Pascalban a w, a, s, d -nek mi a kódja? (#27 ilyenekre gondolok)
Az ez előbbi linkből kinyerhető a válasz ebben a kódok ugyanabba a sorrendbe #119 #97 #115 #100.
Egyébként az nem igaz hogy a felfele nyíl kódja #72, ennek dupla kódja van #0 #72.
Írtam egy kis programot amivel meg lehet tudni bármelyik billentyű kódját.
uses
crt;
var
ch:char;
begin
writeln('Kilepes esc ...');
repeat
ch:=readkey;
write('#',ord(ch),' ');
until ch=#27;
writeln;
writeln('kilepeshez nyomjon egy billentyut ...');
readkey;
end.
Lehet hülyének fogtok nézni, de pl egy alakzat irányításánál ez így nem működik. Viszont, ha azt írom be h #72, #77, #80, #75, akkor a nyilakkal tudom irányítani , de nullákat nem írtam bele és jó, de w,a,s,d-vel nem megy :S mi a baj?
case ch of
#119 : if y-5>=0 then y:=y-5;
#97 : if y+5<=440 then y:=y+5;
#115 : if x-5>=0 then x:=x-5;
#100 : if x+5<=602 then x:=x+5;
end;
Semmi baj, nem nézlek hülyének csak amatőrnek, biztos te tetted fel ezt a kérdést is:
http://www.gyakorikerdesek.hu/szamitastechnika__programozas_..
Úgy kell elképzelni, hogy ha nyíl billentyűt nyomsz akkor a pascal program úgy érzékeli hogy megnyomtál egy #0 kódú gombot majd villámgyorsan egy másik gombot is.
Mert előtte ezek vannak
ch := readkey;
if ch=#0 then begin
ch := readkey;"
Ezek szerint nem érted a kódot.
Elmagyarázom:
ch := readkey; Ez az jelenti hogy ch változóba eltárolod a billentyűzetpufferről érkező karaktert.
if ch=#0 then begin Ha a ch változóban tárolt érték #0 akkor végrehajtom a következő utasításokat ... w, a, s, d gombok esetén ez sose teljesülhet.
ch := readkey; Ezt már írtam.
mert így próbálkoztam :
program Pelda30;
uses graph, wincrt;
var gd,gm,i,j: integer;
p,p1: pointer;
x,y,x1,y1:integer;
ch1:char;
begin
x1 := 5;
y1 := 5;
x := 205;
y := 5;
{ grafika inicializalasa }
gd := d4bit;
gm := m640x480;
initgraph(gd,gm,'');
{ rajzolas }
bar(10,10,30,30);
bar(210,10,230,30);
{ memoria lefoglalasa }
getmem(p1,imagesize(10,10,30,30));
getmem(p,imagesize(210,10,230,30));
{ kep megjegyzese }
getimage(5,5,35,35,p1^);
getimage(205,5,235,35,p^);
repeat
ch1:=readkey;
repeat
delay(40);
case ch1 of
#56 : if y-5>=0 then y:=y-5;
#50: if y+5<=440 then y:=y+5;
#54 : if x-5>=0 then x:=x-5;
#52 : if x+5<=602 then x:=x+5;
#119 : if y1-5>=0 then y1:=y1-5;
#115 : if y1+5<=440 then y1:=y1+5;
#97 : if x1-5>=0 then x1:=x1-5;
#100 : if x1+5<=602 then x1:=x1+5;
end;
putimage(x,y,p^,copyput);
putimage(x1,y1,p1^,copyput);
until keypressed;
until ch1=#27;
{ grafikus mod bezarasa }
closegraph;
end.
de kicsit érdekesen működik :D
Rosszul foglaltad le a memóriát. Az i és j használatlan változót kiszedtem. A #119 helyett írhatsz 'w' -t meg a többi karakter helyett is, ezeket kicseréltem így áttekinthetőbb a kód. A lefoglalt memóriát illik felszabadítani.(Ez nem okoz gondot ,de mondjuk egy DOS rendszeren igen.)
program Pelda30;
uses graph, wincrt;
var gd,gm: integer;
p,p1: pointer;
x,y,x1,y1:integer;
ch1:char;
begin
x1 := 5;
y1 := 5;
x := 205;
y := 5;
{ grafika inicializalasa }
gd := d4bit;
gm := m640x480;
initgraph(gd,gm,'');
{ rajzolas }
bar(10,10,30,30);
bar(210,10,230,30);
{ memoria lefoglalasa }
getmem(p1,imagesize(5,5,35,35));
getmem(p,imagesize(210,10,235,35));
{ kep megjegyzese }
getimage(5,5,35,35,p1^);
getimage(205,5,235,35,p^);
repeat
ch1:=readkey;
repeat
delay(40);
case ch1 of
'8' : if y-5>=0 then y:=y-5;
'2' : if y+5<=440 then y:=y+5;
'6' : if x-5>=0 then x:=x-5;
'4' : if x+5<=602 then x:=x+5;
'w' : if y1-5>=0 then y1:=y1-5;
'a' : if y1+5<=440 then y1:=y1+5;
's' : if x1-5>=0 then x1:=x1-5;
'd' : if x1+5<=602 then x1:=x1+5;
end;
putimage(x,y,p^,copyput);
putimage(x1,y1,p1^,copyput);
until keypressed;
until ch1=#27;
{ grafikus mod bezarasa }
closegraph;
{memoria felszabaditas}
freemem(p1);
freemem(p);
end.
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!