Kezdőoldal » Számítástechnika » Programozás » Mi a gond ezzel a free pascal...

Mi a gond ezzel a free pascal kóddal?

Figyelt kérdés

repeat

ch := readkey;

if ch=#0 then begin

ch := readkey;

case ch of

ch := readkey;

repeat

#72: if y-5>=0 then y:=y-5; {fel} until ch<>#72;

#80: if y+5<=440 then y:=y+5; {le}

#75: if x-5>=0 then x:=x-5; {balra}

#77: if x+5<=602 then x:=x+5; {jobbra}

end;

putimage(x,y,p^,copyput);

end;

until ch=#27;


ezzel a ciklussal egy képet/alakzatot mozgatok, de úgy szeretném megcsinálni , hogy addig menjen egy irányba amíg más gombot le nem nyomok.a #72-nél az a repeat ... until ch<> #72 ezzel próbálkoztam, de nem jó, egyébként az ,működik, hogy jobbra barra fel le mozog. Köszönöm előre is a segítséget!


2011. jan. 22. 09:57
 1/9 anonim ***** válasza:
Ha teljes kódot írnál akkor esetleg tudnék segíteni.
2011. jan. 22. 15:47
Hasznos számodra ez a válasz?
 2/9 zsomkovacs ***** válasza:
A ReadKey VÁR amíg nem nyomsz le billentyűt. Használd helyette a KeyPressed logikai függvényt. Ha true az értéke, a ReadKey-el kiolvashatod a kódot, de nem állítja meg a programodat.
2011. jan. 22. 16:39
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:

program Pelda30;

uses graph, wincrt;

var gd,gm,i,j,a: integer;

p:pointer;

x,y:integer;

ch:char;

begin

a := 1;

x := 0;

y := 0;

{ grafika inicializalasa }

gd := d4bit;

gm := m640x480;

initgraph(gd,gm,'');

{ rajzolas }

rectangle(10,10,30,30);

{ memoria lefoglalasa }

getmem(p,imagesize(0,0,42,42));

{ kep megjegyzese }

getimage(0,0,42,42,p^);

{ kep mozgatasa a kurzorbillentyuk segitsegevel }

repeat

ch := readkey;

if ch=#0 then begin

ch := readkey;

case ch of



#72: if y-5>=0 then y:=y-5; {fel}

#80: if y+5<=440 then y:=y+5; {le}

#75: if x-5>=0 then x:=x-5; {balra}

#77: if x+5<=602 then x:=x+5; {jobbra}

end;

putimage(x,y,p^,copyput);

end;

until ch=#27;

{ memoria felszabaditasa }

freemem(p,imagesize(0,0,42,42));

{ grafikus mod bezarasa }

closegraph;

end.



itt az egész, az utolsónak: nem értem pontosan hogy gondolod, írnál rá egy példát? előre is köszönöm! :)

2011. jan. 22. 22:47
 4/9 zsomkovacs ***** válasza:

Például a te programod a következőképpen fog kinézni: /mármint az a része, amit a kérdésben kiírtál/


repeat

ch:=readkey;

if ch=0 then

begin

ch:=readkey;

repeat

case ch of

#72: if y-5>=0 then y:=y-5;

#80: if y+5<=440 then y:=y+5;

#75: if x-5>=0 then x:=x-5;

#77: if x+5<=602 then x:=x+5;

end;

putimage(x,y,p^,copyput);

until KeyPressed;

end;

until ch=#27;


Ezen persze kell még dolgozni, mert ha a képernyő szélére ért a képed, akkor nem mozog, de újrarajzolja, ezért esetleg villoghat majd, ami hülyén néz ki. Ugyanez történik, ha nem nyílbillentyűt (hanem pl. CTRL+Z-t) üt le a felhasználó. Ezt legegyszerűbb úgy javítani, hogy csinálsz egy b változót, a belső repeat elején hamisra állítod, a case mindegyik if-jében átállítod true-ra (viszont akkor majd kell begin...end!), a putimage-t csak akkor futtatod, ha b igaz, és a belső ciklus kilépési feltételét


Keypressed or (Not(b))


-re cseréled. x és y lehetőleg legyen Integer típusú, mert láttam már problémázni a Pascalt a x-5>=0 feltétel eldöntésén Byte/Word típusban... (ha x<5, nem mindig jól csinálja...)

2011. jan. 23. 08:32
Hasznos számodra ez a válasz?
 5/9 zsomkovacs ***** válasza:
Most nézem, hogy x és y integer. Ez esetben az utolsó pontot tekintsd semmisnek.
2011. jan. 23. 08:33
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:
köszi a válaszodat ! :)
2011. jan. 23. 13:25
 7/9 A kérdező kommentje:

megpróbáltam úgy ahogy mondtad, de még mindig vmi baja van :S kérlek még 1x nézd meg aztán nem zaklatlak :)


program Pelda30;

uses graph, wincrt;

var gd,gm,i,j: integer;

p:pointer;

x,y:integer;

ch:char;

begin

x := 0;

y := 0;

{ grafika inicializalasa }

gd := d4bit;

gm := m640x480;

initgraph(gd,gm,'');

{ rajzolas }

rectangle(10,10,30,30);

{ memoria lefoglalasa }

getmem(p,imagesize(0,0,42,42));

{ kep megjegyzese }

getimage(0,0,42,42,p^);

{ kep mozgatasa a kurzorbillentyuk segitsegevel }

repeat

ch:=readkey;

if ch=0 then

begin

ch:=readkey;

repeat

case ch of

#72: if y-5>=0 then y:=y-5;

#80: if y+5<=440 then y:=y+5;

#75: if x-5>=0 then x:=x-5;

#77: if x+5<=602 then x:=x+5;

end;

putimage(x,y,p^,copyput);

until KeyPressed;

end;

until ch=#27;

{ grafikus mod bezarasa }

closegraph;

end.



itt az egész, a te javaslatoddal.

2011. jan. 23. 13:32
 8/9 zsomkovacs ***** válasza:
Elírtam. A ch=0 feltételt cseréld ch=#0-ra.
2011. jan. 23. 14:31
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:
köszi :) bár ezt nekem is illett volna észrevenni :)
2011. jan. 23. 14:43

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!