Kezdőoldal » Számítástechnika » Programozás » FreePascalban hogyan lehet...

Progizo kérdése:

FreePascalban hogyan lehet gombnyomást kiértékelni a KEYBOARD unit-tal?

Figyelt kérdés
Egy kis játékhoz kéne a gombnyomások megtörténtének leellenőrzése, és úgy látom, hogy a KEYBOARD egység ennek segítésére való. De valami nem jó; meg sem mozdulnak a pixelek a képen. Mi a hiba? (Kód lentebb.)

2015. nov. 29. 14:22
 1/7 A kérdező kommentje:

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.

2015. nov. 29. 14:23
 2/7 ejbenjaro ***** válasza:

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)

2015. nov. 29. 18:21
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:

#2.: Én is böngésztem a freepascal.org-ot ezügyben.

Az initkeyboard nem ezt az inicializálást végezné?

2015. nov. 29. 18:30
 4/7 ejbenjaro ***** válasza:
Nem. Neked magát a drivert is inicializálni kell.
2015. nov. 29. 18:39
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:
#4.: Azt hogyan kell? Nekem nincsen külön illesztőprogramom a billentyűzethez.
2015. nov. 29. 19:14
 6/7 ejbenjaro ***** válasza:

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.

2015. nov. 29. 19:21
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
#6.: Köszönöm a fáradozásaidat. Tehát ha jól látom, lebontottad egy elágazással, hogy funkcióbillentyűket kaptunk-e vagy sem. Én is kipróbálom és át- illetve továbbgondolom...
2015. nov. 30. 15:57

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!