readkey a keypressed v pascale
readkey a keypressed v pascale
Ahojte, mam problem. Mam spravit seminarku na ivt. Mam v pascale naprogramovat hru. Neviem, ako presne sa to vola, ale ide o to, ze na nahodnom mieste sa zobrazi gulicka (v mojom pripade o) a pada diagonalne. ja hybem palickou, ktora je dole a odrazam ju.
Uz mi gulicka lieta po obrazovke, uz si viem zobrazit palicku a odrazanie, ale na to, abysom s nou mohla hybat mucim nacitat nieco z klavesnice. Tak som si myslela, ze na koniec procedury, ktora posuva gulicku o jeden dielik, dam if keypressed a ak bolo nieco stlacene, tak pojdem do procedury, ktora zisti co bolo stlacene tak, ze do premennej priradi readkey, ale readkey nenacita klavesu ktora uz bola stlacena, ale caka na stlacenie. takze ked som stlacila klaves, program sa zastavil a cakal, kym som neco stlacila znovu.
ako by sa to dalo vyriesit?
dakujem.
Uz mi gulicka lieta po obrazovke, uz si viem zobrazit palicku a odrazanie, ale na to, abysom s nou mohla hybat mucim nacitat nieco z klavesnice. Tak som si myslela, ze na koniec procedury, ktora posuva gulicku o jeden dielik, dam if keypressed a ak bolo nieco stlacene, tak pojdem do procedury, ktora zisti co bolo stlacene tak, ze do premennej priradi readkey, ale readkey nenacita klavesu ktora uz bola stlacena, ale caka na stlacenie. takze ked som stlacila klaves, program sa zastavil a cakal, kym som neco stlacila znovu.
ako by sa to dalo vyriesit?
dakujem.
-
harrison314
Hardcore addict
- Príspevky: 8224
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
tak som si myslela, ze uz to pojde a nejde to vobec. neviem, kde je chyba, lebo mi vypise iba compilation abroted, takze vobec neviem, co s tym teraz.
ak by sa niekomu nahodou chcelo pozriet sa na to, tak by som bola veeeelmi vdacna
Kód: Vybrať všetko
program skuska;
uses crt;
var lvl,max,may,odrazy:integer;
cosi:char;
procedure boardlevel(lvl,b:integer);(*vykresli palicku posla prislusneho levelu*)
var i:integer
begin
gotoxy(1,may);
for i:=1 to b do write (#219);
end;
procedure gamestarted;(*Zobrazi uvodnu obrazovku*)
begin
clrscr;
writeln('GAME STARTED');
writeln('pohyb dolava=F');
writeln('pohyb doprava=J');
writeln('koniec=E');
writeln('Press any key.');
readln;
clrscr;
end;
procedure koniec(lvl,odrazy:integer);(*vypise game over a skore*)
begin
clrscr;
writeln('GAME OVER');
writeln('Tvoje skore je ',(lvl-1)*10+odrazy);
writeln('Press any key.');
readln;
end;
procedure left(lvl,b:integer);(*Posunie palicku dolava*)
begin
if (b+lvl-10)>1 then begin
goto(b+lvl-11,may);
write(#219);
goto(b,may);
b:=b-1;
end;
end;
procedure lvlup(lvl:integer);(*vypise level up, hra s zacne odznova s o jedno policko kratsou palickou*)
begin
clrscr;
writeln('LEVEL UP');
writeln('Press any key.');
readln;
zakladna(lvl);
end;
procedure move(xx,yy:integer);(*hybe gulickou*)
while cosi<>'e'do begin
if (xx=max) then x:=-1;
if(yy=may)then y:=-1;
if(xx=1)then x:=1;
if(yy=1)then y:=1;
xx:=xx+x;
yy:=yy+y;
gotoxy(xx,yy);
write('o');
delay(100);
gotoxy(xx,yy);
write(' ');
zistovacka(lvl,b);
padam(xx,yy,b,lvl);
end;
end;
procedure padam(xx,yy,b,lvl:integer); (*zisti, ci sa gulicka pri dopade dotkla palicky alebo nie*)
begin
if yy=may then
if(xx>b)or (xx<(b-11-lvl))then koniec(lvl,odrazy)
elseodrazy?=odrazy+1;
if odrazy=10 then lvlup(lvl);
end;
procedure right(lvl,b:integer);(*posuva palicku doprava*)
begin
if b<max then begin
goto(b+1,may);
write(#219);
goto(b+lvl-10);
write(' ');
b:=b+1;
end;
end;
procedure zakladna(lvl:integer);(*zakladna procedura, ktora vyvolava ostatne a zabezpecuje prvotne zobrazenie gulicky*)
var x,y,xx,yy:integer;
begin
odrazy:=0;
lvl:=lvl+1;
if lvl=9 then won(lvl,odrazy);
x:=1;
y:=1;
xx:=random(max+1);
yy:=random(may+1);
gotoxy(xx,yy);
write('o');
boardlvl(lvl);
gotoxy(xx,yy);
write('o');
move(xx,yy);
end;
procedure zistovacka(var lvl,b:integer);(*zisti ci a co bolo stlacene na klavesnici*)
var cosi:char;
begin
if keypressed then begin
cosi:=readkey;
if cosi='f'then left(lvl,b)else
if cosi='j'the right(lvl,b)else
if cosi='e' then koniec(lvl,odrazy);
end;
end;
procedure won(var lvl,odrazy);(*zaverecna vitazna obrazovka*)
begin
clrscr;
witeln('YOU WON');
writeln('CONGRATULATIONS');
writeln('Tvoje skore je',(lvl-1)*10+odrazy);
readln;
end;
begin
clrscr;
randomize;
gamestarted;
lever:=0;
max:=80;
may:=50;
odrazy:=0;
b:=11-lvl;
zakladna(lvl);
end.
nevola sa to nahodou ping-puong? alebo (s)table tennis?
pridaj si tam este to bto je chybne napisanetu ti lokalna premenna prekryva globalnu => cyklus while nikdy neskonci
pred kompilovanim pouzi kontrolu chyb alebo debugger
Kód: Vybrať všetko
var lvl,max,may,odrazy:integer;
cosi:char; Kód: Vybrať všetko
elseodrazy?=odrazy+1; Kód: Vybrať všetko
procedure zistovacka(var lvl,b:integer);(*zisti ci a co bolo stlacene na klavesnici*)
var cosi:char;
begin pred kompilovanim pouzi kontrolu chyb alebo debugger
uz mi to ide spustit, ale prejde procedura gamestarted a program sa potom vypne. tu je kod.
Kód: Vybrať všetko
program skuska;
uses crt;
var b,lvl,max,may,odrazy:integer;
cosi:char;
procedure boardlvl(lvl,b:integer);(*vykresli palicku posla prislusneho levelu*)
var i:integer;
begin
gotoxy(1,may);
for i:=1 to b do write (#219);
end;
procedure gamestarted;(*Zobrazi uvodnu obrazovku*)
begin
clrscr;
writeln('GAME STARTED');
writeln('pohyb dolava=F');
writeln('pohyb doprava=J');
writeln('koniec=E');
delay(5000);
clrscr;
end;
procedure koniec(lvl,odrazy:integer);(*vypise game over a skore*)
begin
clrscr;
writeln('GAME OVER');
writeln('Tvoje skore je ',(lvl-1)*10+odrazy);
writeln('Press any key.');
readln;
end;
procedure left(lvl,b:integer);(*Posunie palicku dolava*)
begin
if (b+lvl-10)>1 then begin
gotoxy(b+lvl-11,may);
write(#219);
gotoxy(b,may);
b:=b-1;
end;
end;
procedure won(lvl,odrazy:integer);(*zaverecna vitazna obrazovka*)
begin
clrscr;
writeln('YOU WON');
writeln('CONGRATULATIONS');
writeln('Tvoje skore je',(lvl*10+odrazy-10));
readln;
end;
procedure right(lvl,b:integer);(*posuva palicku doprava*)
begin
if b<max then begin
gotoxy(b+1,may);
write(#219);
gotoxy(b+lvl-10,may);
write(' ');
b:=b+1;
end;
end;
procedure zistovacka(var lvl,b:integer);(*zisti ci a co bolo stlacene na klavesnici*)
var cosi:char;
begin
if keypressed then begin
cosi:=readkey;
if cosi='f'then left(lvl,b)else
if cosi='j'then right(lvl,b)else
if cosi='e' then koniec(lvl,odrazy);
end;
end;
procedure zakladna(lvl,b:integer);(*zakladna procedura, ktora vyvolava ostatne a zabezpecuje prvotne zobrazenie gulicky*)
var x,y,xx,yy:integer;
begin
odrazy:=0;
lvl:=lvl+1;
if lvl=9 then won(lvl,odrazy);
x:=1;
y:=1;
xx:=random(max+1);
yy:=random(may+1);
gotoxy(xx,yy);
write('o');
boardlvl(lvl,b);
gotoxy(xx,yy);
write('o');
move(x,y,b);
end;
procedure lvlup(lvl:integer);(*vypise level up, hra s zacne odznova s o jedno policko kratsou palickou*)
begin
clrscr;
writeln('LEVEL UP');
writeln('Press any key.');
readln;
zakladna(lvl,b);
end;
procedure padam(xx,yy,b,lvl:integer); (*zisti, ci sa gulicka pri dopade dotkla palicky alebo nie*)
begin
if yy=may then
if(xx>b)or (xx<(b-11-lvl))then koniec(lvl,odrazy)
else odrazy:=odrazy+1;
if odrazy=10 then lvlup(lvl);
end;
procedure move(xx,yy,x,y,b:integer);(*hybe gulickou*)
begin
while cosi<>'e'do begin
if (xx=max) then x:=-1;
if(yy=may)then y:=-1;
if(xx=1)then x:=1;
if(yy=1)then y:=1;
xx:=xx+x;
yy:=yy+y;
gotoxy(xx,yy);
write('o');
delay(100);
gotoxy(xx,yy);
write(' ');
zistovacka(lvl,b);
padam(xx,yy,b,lvl);
end;
end;
begin
clrscr;
randomize;
gamestarted;
lvl:=0;
max:=80;
may:=50;
odrazy:=0;
b:=11-lvl;
zakladna(lvl,b);
end.
spravila som to s forwardom a uz to ide. ale stale to nerobi to, co to ma robit. palicka so zobrazuje niekde inde a neda sa s nou hybat
Kód: Vybrať všetko
program skuska;
uses crt;
var b,lvl,max,may,odrazy:integer;
cosi:char;
procedure boardlvl(lvl,b:integer);(*vykresli palicku posla prislusneho levelu*)
var i:integer;
begin
gotoxy(1,may);
for i:=1 to b do write (#219);
end;
procedure gamestarted;(*Zobrazi uvodnu obrazovku*)
begin
clrscr;
writeln('GAME STARTED');
writeln('pohyb dolava=F');
writeln('pohyb doprava=J');
writeln('koniec=E');
delay(5000);
clrscr;
end;
procedure koniec(lvl,odrazy:integer);(*vypise game over a skore*)
begin
clrscr;
writeln('GAME OVER');
writeln('Tvoje skore je ',(lvl-1)*10+odrazy);
writeln('Press any key.');
readln;
end;
procedure left(lvl,b:integer);(*Posunie palicku dolava*)
begin
if (b+lvl-10)>1 then begin
gotoxy(b+lvl-11,may);
write(#219);
gotoxy(b,may);
b:=b-1;
end;
end;
procedure won(lvl,odrazy:integer);(*zaverecna vitazna obrazovka*)
begin
clrscr;
writeln('YOU WON');
writeln('CONGRATULATIONS');
writeln('Tvoje skore je',(lvl*10+odrazy-10));
readln;
end;
procedure right(lvl,b:integer);(*posuva palicku doprava*)
begin
if b<max then begin
gotoxy(b+1,may);
write(#219);
gotoxy(b+lvl-10,may);
write(' ');
b:=b+1;
end;
end;
procedure zistovacka(var lvl,b:integer);(*zisti ci a co bolo stlacene na klavesnici*)
var cosi:char;
begin
if keypressed then begin
cosi:=readkey;
if cosi='f'then left(lvl,b)else
if cosi='j'then right(lvl,b)else
if cosi='e' then koniec(lvl,odrazy);
end;
end;
procedure zakladna(lvl,b:integer);
forward;
procedure lvlup(lvl:integer);(*vypise level up, hra s zacne odznova s o jedno policko kratsou palickou*)
begin
clrscr;
writeln('LEVEL UP');
writeln('Press any key.');
readln;
zakladna(lvl,b);
end;
procedure padam(xx,yy,b,lvl:integer); (*zisti, ci sa gulicka pri dopade dotkla palicky alebo nie*)
begin
if yy=may then
if(xx>b)or (xx<(b-11-lvl))then koniec(lvl,odrazy)
else odrazy:=odrazy+1;
if odrazy=10 then lvlup(lvl);
end;
procedure move(xx,yy,x,y,b:integer);(*hybe gulickou*)
begin
while cosi<>'e'do begin
if (xx=max) then x:=-1;
if(yy=may)then y:=-1;
if(xx=1)then x:=1;
if(yy=1)then y:=1;
xx:=xx+x;
yy:=yy+y;
gotoxy(xx,yy);
write('o');
delay(100);
gotoxy(xx,yy);
write(' ');
zistovacka(lvl,b);
padam(xx,yy,b,lvl);
end;
end;
procedure zakladna(lvl,b:integer);(*zakladna procedura, ktora vyvolava ostatne a zabezpecuje prvotne zobrazenie gulicky*)
var x,y,xx,yy:integer;
begin
odrazy:=0;
lvl:=lvl+1;
if lvl=9 then won(lvl,odrazy);
x:=1;
y:=1;
xx:=random(max+1);
yy:=random(may+1);
gotoxy(xx,yy);
write('o');
boardlvl(lvl,b);
gotoxy(xx,yy);
write('o');
move(xx,yy,x,y,b);
end;
begin
clrscr;
randomize;
gamestarted;
lvl:=0;
max:=80;
may:=50;
odrazy:=0;
b:=11-lvl;
zakladna(lvl,b);
end.