Kezdőoldal » Számítástechnika » Programozás » A Free Pascalban a ClrScr -en...

A Free Pascalban a ClrScr -en kívül milyen képernyőtörlési mód van? Olyan esetleg amely egy adott koordináta karakterét törli le van?

Figyelt kérdés
pascal, képernyőtörlés
2012. dec. 8. 20:08
 1/9 ejbenjaro ***** válasza:
clreol is van, adott karaktertől töröl a sor végéig. Illetve ha window-al hozol létre a képernyőn egy ablakot, akkor a clrscr, ha jól emlékszem annak a tartalmát törli.
2012. dec. 8. 20:16
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:
Ja értem. Mert olyan lenne a problémám, van két parancsom GoToXY-ban az egyik magától mozog, a másikat én irányítom, és amelyik magától mozog annak mindig törölnie kell a képernyőt, de a másikét nem kéne törölnie, nem tűnik el, csak egy pici pillanatokra, és ezt kellene valahogy külön kezelni
2012. dec. 8. 20:35
 3/9 ejbenjaro ***** válasza:
Valószínűleg szálkezeléssel kellene próbálkoznod. de ha írnál ide kódot kicsit könnyebben menne a segítségnyújtás.
2012. dec. 8. 20:44
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

Ja rendben, itt van:

program hazi;

uses

crt;

var

c,d,e:char;

a,b,x,y,z,v:shortint;

no,csokken:boolean;

Procedure szint;

Begin

WriteLn('Valassz nehézségi szintet:');

WriteLn;

WriteLN('1: konnyu');

WriteLN('2: kozepes');

WriteLN('3: nehez');

e:=Readkey;

end;

Procedure mozgas;

Begin

if keypressed then

begin

d:=readkey;

d:=upcase(d);

end;

If (d=#80) then b:=b+3;

If (d=#72) then b:=b-3;

If b<1 then b:=1;

If b>21 then b:=21;


GoToXy(a,b);

WriteLn(#179);

GoToxy(a,b+1);

WriteLn(#179);

GoToXy(a,b+2);

WriteLn(#179);

GoToXy(a,b+3);

WriteLn(#179);

GoToXy(a,b+4);

WriteLn(#179);

d:='a';

end;

procedure nono;

begin

Repeat

if keypressed then

begin

c:=readkey;

c:=upcase(c);

end;

mozgas;

If c=#27 then halt;

GotoXy(x,y);

inc(x);

inc(y);

Write('*');

delay(z);

Clrscr;

until ((y=25) or (x=80));

no:=true;

end;


procedure nocsokken;

begin

Repeat

if keypressed then

begin

c:=readkey;

c:=upcase(c);

end;

If c=#27 then halt;

mozgas;

GotoXy(x,y);

inc(x);

dec(y);

Write('*');

delay(z);

clrscr;

until ((y=1) or (x=80));

no:=false;

end;


procedure csokkenno;

begin

Repeat

if keypressed then

begin

c:=readkey;

c:=upcase(c);

end;

If c=#27 then halt;

mozgas;

GotoXy(x,y);

dec(x);

inc(y);

Write('*');

delay(z);

clrscr;

until ((y=25) or (x=1));

csokken:=false;

end;


procedure csokkencsokken;

begin

Repeat

if keypressed then

begin

c:=readkey;

c:=upcase(c);

end;

If c=#27 then halt;

mozgas;

GotoXy(x,y);

dec(x);

dec(y);

Write('*');

delay(z);

clrscr;

until ((y=1) or (x=1));

csokken:=true;

end;


procedure torzs;

begin

ClrScr;

Randomize;

z:=0;

x:=random(50)+1;

y:=random(23)+1;

a:=80;

b:=10;

v:=0;

no:=true;

csokken:=true;

szint;

Case e of

'1':z:=80;

'2':z:=55;

'3':z:=30;

#27:halt;

else begin

Repeat

ClrScr;

WriteLn('Helytelen ertek, kerjuk adjon meg egy ujat:');

szint;

Case e of

'1':z:=80;

'2':z:=55;

'3':z:=30;

#27:halt;

end;

until ((e='1') or (e='2') or (e='3'));

end;

end;

nono;

Repeat

If ((y=1) and (csokken=true) and (x>1)) then begin

csokkenno;

no:=false;

end;

If ((x=80) and (no=true) and (y<25)) then begin

csokkenno;

no:=false;

end;

If ((x=80) and (no=false) and (y>1)) then begin

csokkencsokken;

no:=true;

end;

If ((x=1) and (csokken=false) and (y<25)) then nono;

If ((x=1) and (csokken=true) and (y>1)) then nocsokken;

If ((x=1) and (y=1)) then begin

x:=2;

nono;

end;

If ((x=1) and (y=25)) then begin

x:=2;

nocsokken;

end;

If ((x=80) and (y=1)) then begin

x:=79;

csokkenno;

end;

If ((x=80) and (y=25)) then begin

x:=79;

csokkencsokken;

end;



If ((y=25) and (no=true) and (x<80)) then nocsokken;

If ((x=80) and ((y<b) or (y>b+4))) then v:=5;

If ((y=25) and (csokken=false) and (x>1)) then begin

csokkencsokken;

no:=true

end;

If ((y=1) and (no=false) and (x<80)) then nono;

If ((x=80) and ((y<b) or (y>b+4))) then v:=5;



Until v=5;

end;

begin

torzs;

ClrScr;

Repeat

WriteLn('Jatek vege');

WriteLn('Uj jatek kezdeshez, nyomja meg a Y-t. Kilepeshez az ESC-t');

e:=readkey;

Case e of

'y':torzs;

#27:halt;

end;

until e=#27;

ReadLn;

end.

2012. dec. 8. 20:54
 5/9 coopper ***** válasza:

Szia.


Nézd meg ezt az UNIT-ot hátha segit valamiben : [link]


Elvileg a képernyő memóriát kellene elérned

(Turbó pascalban ez az array[1..25,1..80,1..2] of byte absolute $B8000:0000 sorral lehetett erlérni, a linkelt unitban is van valami hasonló)


Ha megvan akkor mielőtt kiirod az uj pozicióra a karaktert megnézed mi van abban a képernyő pozicóban, aztán amikor tovább mozgot visszairod. Akkor nem kell az egész képernyőt törölni, elég csak egy karaktert törölni.


Sok sikert.

Üdv.

2012. dec. 8. 20:58
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:
Mindig töröld az egészet és rajzold újra!
2012. dec. 8. 21:13
Hasznos számodra ez a válasz?
 7/9 ejbenjaro ***** válasza:
Ebben az esetben úgy is tudod törölni a mozgó elemet, hogy a kirajzolás során a korábbi pozíció helyére háttérszínnel íratod ki a mozgó elemet, az új pozícióba pedig előtérszínnel. Így nem nagyon kell trükközni a képernyőtörléssel. És emlékeim szerin van egy valami cursoroff és cursoron eljárás is freepascalban, amivel a képernyőn megjelenő kurzort tudod ki és bekapcsolni.
2012. dec. 8. 21:27
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:
Köszi mindenkinek! Megpróbálom azt a színt módosítani ahogy mondtad :D a Cursor kikapcsolást meg köszönöm :D
2012. dec. 8. 23:38
 9/9 ejbenjaro ***** válasza:

Csináltam egy kicsit átírt verziót a programodból, amit itt tudsz letölteni: *****

Igyekeztem objektumorientált megközelítésben átírni a programodat. Nyilván ezen is lehet még mit csiszolni. Ha érdekel vess rá egy pillantást. (a Zip fájl tartalmazza az általad itt közzétett programot is) Szerkesztéshez és megtekintéshez javaslom a Lazarus használatát.



* Automatikusan eltávolított tartalom.
2012. dec. 9. 17:47
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!