Meg lehet azt Pascalban oldani, hogy úgy írjak karaktert a sor végére, hogy ne ugorjon a kurzor a következő sorra?
Szia.
Igen ha használod a képernyőmemóriát és ugy iratod bele amit akarsz :
Var Video : array [1..80,1..25,1..2] of char absolute $B800:000 ;
Begin
clrscr ;
writeln ('bbbb');
Video[80,25,1]:='a';
End.
Ha windows alatt használod akkor :
Var Video : array [1..80,1..50,1..2] of char absolute $B800:000 ;
és
Video[80,50,1]:='a';
Sok sikert.
Üdv.
A char karakter típust jelöl.
Az absolute az adott tömböt egy abszolút memóriacímen fogja kezelni. A karakteres képernyő karakterei és szín információi egy adott memóriaterületen érhetők el: $B800:0000 -tól kezdve.
Tehát az így deklarált tömb közvetlenül a karakteres képernyő karaktereit és színeit fogja tartalmazni.
Ha a tizedik oszlop, ötödik sorába akarsz egy „x” karakter tenni, akkor:
Video[10,5,1]:='x';
Ha ugyanennek a helynek a színét akarod változtatni, akkor 16 háttérszín és 16 előtérszín áll a rendelkezésedre
Video[10,5,2]:=chr(hatterszin*16 + eloterszin);
(A chr azért kell, mert ez karaktertömb, és nem egész számokat tartalmazó tömb.)
(Annyi sejtésem még van, hogy lehet, hogy az előző válaszoló felcserélte az x és y koordinátákat, tehát előbb van a sor és azon belül az oszlop:
Var Video : array [1..25,1..80,1..2] of char absolute $B800:0000;
Jogos a felvetés, valóban forditva vannak először sorok száma aztán az oszlopok.
A neten ezt találtam :
Screen:ARRAY[0..24,0..79] OF WORD ABSOLUTE = $B8000
Tehát word-ként kezeli. Ez sem rossz, de egyszerübb karakteresként vagy bájtosként kezelni. A karakterest (chr) fent megtalálod itt a bájtos :
Video:ARRAY[1..25,1..80,1..2] OF byte ABSOLUTE $B8000:0000;
De akkor értékadásnál kell a Karakteres tipust átalakitani bájtá :
Video[25,80,1]:=ord ('a');
illetve a szine :
Video[25,80,2]:=hatterszin*16 + eloterszin ;
(az ord függvény az egy sorszámot ad vissza, ha egy ascii karaktert irsz be neki akkor az ASCII kódját kapod vissza, tehát az ord ('a') értéke : 97-nek felel meg.
Sok sikert.
Üdv.
"Még egyetlen dolog van, amit nem értek, hogy konkrétan a $B800:0000 mit jelöl? Miért pont ezt kellett odaírni?"
Itt megtalálod a Video memória felosztását (sajnos angol nyelvű) : [link]
Üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!