FreePascalban hogyan lehet gombnyomást kiértékelni a KEYBOARD unit-tal?
program jatekocska;
uses wincrt,graph,keyboard;
type jatekosok=record
xhely,yhely: integer;
szine: byte;
end;
var gd,gm: integer;
gomb: tkeyevent;
i: byte;
jatekos: array[0..1] of jatekosok;
begin
initkeyboard;
gd:=detect;
gm:=0;
initgraph(gd,gm,'');
jatekos[0].xhely:=5;
jatekos[0].yhely:=5;
jatekos[0].szine:=5;
jatekos[1].xhely:=getmaxx-5;
jatekos[1].yhely:=5;
jatekos[1].szine:=10;
for i:=0 to 1 do
putpixel(jatekos[i].xhely,jatekos[i].yhely,jatekos[i].szine);
repeat
gomb:=getkeyevent;
gomb:=translatekeyevent(gomb);
case ord(gomb) of
87,119: if jatekos[0].yhely-1>0 then jatekos[0].yhely:=jatekos[0].yhely-1; {w}
83,115: if jatekos[0].yhely+1<getmaxy then jatekos[0].yhely:=jatekos[0].yhely+1; {s}
65,97: if jatekos[0].xhely-1>0 then jatekos[0].xhely:=jatekos[0].xhely-1; {a}
68,100: if jatekos[0].xhely-1<getmaxx then jatekos[0].xhely:=jatekos[0].xhely+1; {d}
75: if jatekos[1].xhely-1>0 then dec(jatekos[1].xhely); {balra nyíl}
77: if jatekos[1].xhely+1<getmaxx then inc(jatekos[1].xhely); {jobbra nyíl}
72: if jatekos[1].yhely-1>0 then dec(jatekos[1].yhely); {fel nyíl}
80: if jatekos[1].yhely+1<getmaxy then inc(jatekos[1].yhely); {le nyíl}
end;
for i:=0 to 1 do
putpixel(jatekos[i].xhely,jatekos[i].yhely,jatekos[i].szine);
delay(10);
until getkeyeventchar(gomb)='q';
closegraph;
donekeyboard;
end.
Itt van példa: [link]
Valszeg használat előtt be kell tölteni a keyboard drivert, majd azt inicializálni is szükséges. A linken lévő példában lévő unitban láthatsz erre példát :) (de sokat példálózok)
#2.: Én is böngésztem a freepascal.org-ot ezügyben.
Az initkeyboard nem ezt az inicializálást végezné?
Kivettem belőle a grafikus részt, mert linux alatt problémás, meg WinCRT sincs, de így működik:
program jatekocska;
uses keyboard,crt;
type
jatekosok=record
xhely,yhely: integer;
szine: byte;
end;
nyil=(Up,Down,Left,Right);
var
gd,gm: integer;
gomb: tkeyevent;
i: byte;
jatekos: array[0..1] of jatekosok;
function nyilbill(K:string):nyil;
begin
if K='Up' then nyilbill:=Up;
if K='Down' then nyilbill:=Down;
if K='Left' then nyilbill:=Left;
if K='Right' then nyilbill:=Right;
end;
begin
initkeyboard;
//gd:=detect;
//gm:=0;
//initgraph(gd,gm,'');
jatekos[0].xhely:=5;
jatekos[0].yhely:=5;
jatekos[0].szine:=5;
jatekos[1].xhely:=80-5;
jatekos[1].yhely:=5;
jatekos[1].szine:=10;
//for i:=0 to 1 do
//putpixel(jatekos[i].xhely,jatekos[i].yhely,jatekos[i].szine);
repeat
gomb:=getkeyevent;
gomb:=translatekeyevent(gomb);
writeln(ord(GetKeyEventChar(gomb)));
If IsFunctionKey(gomb) then
case nyilbill(KeyEventToString(gomb)) of
Left: if jatekos[1].xhely-1>0 then dec(jatekos[1].xhely); {balra nyíl}
Right: if jatekos[1].xhely+1<80 then inc(jatekos[1].xhely); {jobbra nyíl}
Up: if jatekos[1].yhely-1>0 then dec(jatekos[1].yhely); {fel nyíl}
Down: if jatekos[1].yhely+1<25 then inc(jatekos[1].yhely); {le nyíl}
end
else
case ord(GetKeyEventChar(gomb)) of
87,119: if jatekos[0].yhely-1>0 then jatekos[0].yhely:=jatekos[0].yhely-1; {w}
83,115: if jatekos[0].yhely+1<25 then jatekos[0].yhely:=jatekos[0].yhely+1; {s}
65,97: if jatekos[0].xhely-1>0 then jatekos[0].xhely:=jatekos[0].xhely-1; {a}
68,100: if jatekos[0].xhely-1<80then jatekos[0].xhely:=jatekos[0].xhely+1; {d}
end;
writeln('Jatekos1 :',jatekos[1].xhely,',',jatekos[1].yhely);
writeln('Jatekos0 :',jatekos[0].xhely,',',jatekos[0].yhely);
//for i:=0 to 1 do
//putpixel(jatekos[i].xhely,jatekos[i].yhely,jatekos[i].szine);
delay(10);
until getkeyeventchar(gomb)='q';
//closegraph;
donekeyboard;
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!