Szeretnék valami sajátot, képernyőt?





Mi érdekelne? Egy 24-szer 40 karakteres kijelzőt szeretnék, ami olyan méretű, amilyet én akarok, olyan fontokat ír, amilyet én akarok. Mondjuk 11 pixel széles és 16 pixel magas betűképek.
Ez 440-szer 384 pixeles képernyő terület lenne. Erre a területre lehetne szöveget írni, mintha egy kis számítógép lenne. Rendesen görgetné a szöveget, új sort nyitna, satöbbi.










Leszek konstruktív, bár bevallom nem könnyíted meg.
A probléma az, hogy a kérdésed már viszonylag specifikus: az ugyanis, hogy az "alap rutinokat" hogyan tudnád legegyszerűbben megvalósítani már erősen környezetfüggő. Más és más választ kapsz ha assembly-ben, python-ban, C#-ban, JAVA-ban, JavaScript-ben vagy akármilyen környezetben akarod megvalósítani szimplán mert a nyelvek és a hozzájuk tartozó könyvtárak eltérő környezetet biztosítanak.
Az alapfeladat amúgy nem nehéz: van egy memóriaterületed, amin a karakterek kódjai vannak, és van két eljárásod: az egyik módosítja ezt a memóriaterületet, a másik meg kirajzolja. Nagyjából ennyi a karakteres képernyő.
A konkrétumokhoz már kéne a környezet. Alacsony szinten sorfolytonos memóriakezelést fog kb mindenki javasolni, magas szinten meg sztringtömböket. Egyáltalán milyen operációs rendszeren akarod megvalósítani? Ez befolyásolja a renderelést. És így tovább...
Szóval jobban jársz, ha leírod, hogy pontosan mit szeretnél. Csak meg akarod érteni pl. hogyan működik a Windows command line ablak, vagy valami hasonlót akarsz magad is csinálni. Vagy csak egy régi számítógép-szimulátort próbálsz meg összerakni, amin meg még csak parancssor volt.





#4-es vagyok.
"Bocsi, de hogy jön ide a rendszer, meg a nyelv, pláne a keretrendszer?"
Úgy, hogy nagyon nem mindegy, hogy mondjuk PC-re akarod megírni, Windows alá, C nyelven, vagy webre Javascripttel, vagy mondjuk Androidra, natívan, Java nyelven. Teljesen más megoldásokat fogsz kapni mindegyik esetben.
Az algoritmus szögegyszerű, egy sor- és oszlopfolytonos memóriaterületről kell átmásolni a bájtokat a képernyőt memóriaterületére, ha scrollozás is játszik, akkor pedig a scrollozás mértékének megfelelő X vagy Y vektorral eltolva.
Köszönöm a segítő szándékot, de úgy tűnik, hogy csak elbeszélünk egymás mellett. Én nem megoldásokat szeretnék kapni Javascript vagy Java nyelven, hanem know-howt. Ez az egész nem merül ki a scrollozásban. Itt van sok más is. Kurzor mozgatás, villogtatás, van billentyűkezelés, azaz megoldás a backspace, az enter, a sorvég karakterek kezelésére, a képernyőtartalom tördelésére, a fileból betöltődött szöveg folyatására.
Ennek, ahogy a mászkálós játékoknak is, nyilván van egy célszerűen, jól kidolgozott sablonja, egy szerkezete, ahogy felépül az egész. Én erre a szerkezetre lennék kiváncsi, csak nem mászkálós játékokkal, hanem a képernyőkezeléssel kapcsolatban.





#8-as vagyok.
"Én erre a szerkezetre lennék kiváncsi"
De ezt már leírtuk, lényegében annyi a dolog lényege, hogy van egy backbuffered, ami lehet egy string tömb, egy memóriaterület, bármi, azt módosítgatod, és végül megjeleníted.
Backspace-nél például fogod a memóriaterületet, és az utolsó elemét lenullázod.
Enter billentyű lenyomásánál beleteszel a memóriaterületre egy speciális vezérlőkaraktert (ASCII 13), kirajzolásnál pedig ezt érzékelve, az adott sort megtöröd, és új sorban kezdesz (azaz a következő kirajzolandó karakter X koordinátája 0 lesz, az Y pedig Y+1).
A fájlkezelés egy más téma, a kurzor mozgatás, villogtatás megint más téma, a billentyűzet kezelés pedig megint egy harmadik téma.
Attól függően, hogy mennyire hardverközeli a programod, lehet, hogy foglalkoznod kell magával a fájlrendszer felépítésével is. Ha nem annyira hardverközeli, akkor kell írni egy hardverközeli köztes réteget, ami ismeri az adott fájlrendszert, és egy elvontabb, absztraktabb réteget, ami mondjuk bytestream-eket kezel (open, seek, write, close, append...), és ezt lefordítani a hardverközeli rétegre, azaz a tényleges fájlrendszer szintjére.
Kurzorkezelés, billentyűzetkezelés megint csak részben hardveres dolog. De igazából ott kéne elkezdeni, hogy egyáltalán milyen rendszerről van szó. Milyen a videómemória felépítése, van-e egyáltalán dedikált videómemória? Ha van, akkor mekkora, hány backbuffer fér bele? Hogyan történik a kirajzolás, memóriamásolással, vagy az aktuális kirajzolandó terület pointerének címátírásával?
Van-e interrupt kezelés, ha van, akkor milyen? Milyen videómódok vannak, miket támogat a rendszer...
Nem mindegy, hogy mondjuk a billentyűzetet hardveres megszakítás kezeli-e, vagy csak egy végtelen ciklus van, ami időnként ellenőrzi a billentyűzet állapotát? Mindkét megoldásra létezik példa...
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!