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?
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.
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.
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.
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!