Kezdőoldal » Számítástechnika » Programozás » Free pascalban kellene segítsé...

Free pascalban kellene segítség:már megvan a kőr és a vonal is, de úgy kellene, hogy csak a vonalat mozgatom gombokkal és a kőr magától mozog?

Figyelt kérdés

2015. febr. 2. 18:30
1 2
 1/12 A kérdező kommentje:
2015. febr. 2. 18:35
 2/12 SimkoL ***** válasza:
Először is a GetImage és PutImage eljárásoknak nézz utána, mert valahogy nem 'buli' állandóan a képernyőt törölni.
2015. febr. 2. 18:58
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:
Letudnád írni helyesen ezt a progit?
2015. febr. 2. 20:10
 4/12 SimkoL ***** válasza:
Csak már nem ma este.
2015. febr. 2. 21:09
Hasznos számodra ez a válasz?
 5/12 SimkoL ***** válasza:

Mozog a labda, értelemszerűen írd meg az ütőmozgást, helyét megtalálod a programban.


program Fallabda;


uses Crt, Graph;


const sugar = 10;

uto = 40;


var gd, gm : integer;

LabdaX, LabdaY : integer;

UtoX, UtoY : integer;

LabdaTop, LabdaLeft, LabdaWidth, LabdaHeigth : integer;

ClientWidth, ClientHeigth, vx, vy : integer;

bill: char;

NullSize, KepSize : word;

NullP, KepP : pointer;


begin

ClrScr;

Randomize;

gd:=detect;

InitGraph(gd, gm, ' ');

ClientWidth := GetMaxX;

ClientHeigth := GetMaxY;

LabdaX := Random(ClientWidth - sugar) + sugar;

LabdaY := Random(ClientHeigth - sugar) + sugar;

SetBkColor(Blue);

SetColor(Black);

ClearDevice;

NullSize := ImageSize(LabdaX - 10, LabdaY - 10, LabdaX + 10, LabdaY + 10);

GetMem(NullP, NullSize);

GetImage(LabdaX - 10, LabdaY - 10, LabdaX + 10, LabdaY + 10, NullP^);

SetFillStyle(SolidFill, Red);

FillEllipse(LabdaX, LabdaY, sugar, sugar);

KepSize := ImageSize(LabdaX - 10, LabdaY - 10, LabdaX + 10, LabdaY + 10);

GetMem(KepP, KepSize);

GetImage(LabdaX - 10, LabdaY - 10, LabdaX + 10, LabdaY + 10, KepP^);

vx := 5;

vy := 3;

while KeyPressed do bill := ReadKey;

bill:= #0;

repeat

if KeyPressed then

begin

bill := readkey;

case bill of

#108: Inc(UtoY, 10);

#102: Dec(UtoY, 10);

end;

{ line(x,y,x,y-h); Itt lehet majd az utot kirajolni, mozgatni,

probald ugyanugy megcsinalni mint a labda,

de ezzel kuzdj meg, ha nem megy majd akkor segitek }

end;

delay(10000);

PutImage(LabdaX - 10, LabdaY - 10, NullP^, NormalPut);

LabdaTop := Labday - sugar;

LabdaLeft := Labdax - sugar;

LabdaWidth := 2 * sugar;

LabdaHeigth := LabdaWidth;

if (LabdaLeft + LabdaWidth + vx > ClientWidth) or (LabdaLeft + vx < 0) then vx := -vx;

if (LabdaTop + LabdaHeigth + vy > ClientHeigth) or (LabdaTop + vy < 0) then vy := -vy;

LabdaTop := LabdaTop + vy;

LabdaLeft := LabdaLeft + vx;

LabdaX := LabdaLeft + sugar;

LabdaY := LabdaTop + sugar;

PutImage(LabdaX - 10, LabdaY - 10, KepP^, NormalPut);

until bill='q';

CloseGraph;

end.

2015. febr. 3. 00:37
Hasznos számodra ez a válasz?
 6/12 SimkoL ***** válasza:

Félkómásan éjszaka - minek iszik aki nem bírja - elfelejtettem a memóriát felszabadítani és most tiszta fejjel átnézve láttam, hogy sok 'dolog' összevonható, egyszerűbben kifejezhető:


program Fallabda;


uses Crt, Graph;


const sugar = 10;

uto = 40;


var gd, gm : integer;

LabdaX, LabdaY : integer;

UtoX, UtoY : integer;

LabdaTop, LabdaLeft, LabdaWidth, LabdaHeigth : integer;

ClientWidth, ClientHeigth, vx, vy : integer;

bill: char;

NullSize, KepSize : word;

NullP, KepP : pointer;


begin

ClrScr;

Randomize;

gd:=detect;

InitGraph(gd, gm, ' ');

ClientWidth := GetMaxX;

ClientHeigth := GetMaxY;

LabdaX := Random(ClientWidth - 2 * sugar) + sugar;

LabdaY := Random(ClientHeigth - 2 * sugar) + sugar;

SetBkColor(Blue);

SetColor(Black);

ClearDevice;

LabdaWidth := 2 * sugar;

LabdaHeigth := LabdaWidth;

LabdaTop := LabdaY - sugar;

LabdaLeft := LabdaX - sugar;

NullSize := ImageSize(LabdaLeft, LabdaTop, LabdaLeft + LabdaWidth, LabdaTop + LabdaHeigth);

GetMem(NullP, NullSize);

GetImage(LabdaLeft, LabdaTop, LabdaLeft + LabdaWidth, LabdaTop + LabdaHeigth, NullP^);

SetFillStyle(SolidFill, Yellow);

FillEllipse(LabdaX, LabdaY, sugar, sugar);

KepSize := ImageSize(LabdaLeft, LabdaTop, LabdaLeft + LabdaWidth, LabdaTop + LabdaHeigth);

GetMem(KepP, KepSize);

GetImage(LabdaLeft, LabdaTop, LabdaLeft + LabdaWidth, LabdaTop + LabdaHeigth, KepP^);

vx := 5;

vy := 3;

while KeyPressed do bill := ReadKey;

bill:= #0;

repeat

if KeyPressed then

begin

bill := readkey;

case bill of

#108: Inc(UtoY, 10);

#102: Dec(UtoY, 10);

end;

{ line(x,y,x,y-h); Itt lehet majd az utot kirajolni, mozgatni,

probald ugyanugy megcsinalni mint a labda,

de ezzel kuzdj meg, ha nem megy majd akkor segitek }

end;

Delay(10000);

PutImage(LabdaLeft, LabdaTop, NullP^, NormalPut);

if (LabdaLeft + LabdaWidth + vx > ClientWidth) or (LabdaLeft + vx < 0) then vx := -vx;

if (LabdaTop + LabdaHeigth + vy > ClientHeigth) or (LabdaTop + vy < 0) then vy := -vy;

Inc(LabdaLeft, vx);

Inc(LabdaTop, vy);

PutImage(LabdaLeft, LabdaTop, KepP^, NormalPut);

until bill='q';

CloseGraph;

Dispose(NullP);

Dispose(KepP);

end.

2015. febr. 3. 12:35
Hasznos számodra ez a válasz?
 7/12 SimkoL ***** válasza:

Kb. öt sor - sör - kell még hozzá, hogy mozogjon az ütő és érzékelje az ütközést, de azért küzdj...

Nem olyan régen írtam meg Delphi-ben utána tabaki kolléga átírta Free-Pascal-ba legalább keresni tanulj meg.

2015. febr. 3. 12:39
Hasznos számodra ez a válasz?
 8/12 A kérdező kommentje:
Köszöntem!!
2015. febr. 4. 19:50
 9/12 SimkoL ***** válasza:
Érted is ?
2015. febr. 4. 19:53
Hasznos számodra ez a válasz?
 10/12 tabaki ***** válasza:
Asz'szem, ebből a körből kimaradok. Linuxban a graph unit nem működik alapból, meg amúgy is ellenjavallott a crt-vel együtt való használata, ez a platformfüggetlenség kedvemet szegte... Az a bizonyos átirat Lazarusban készült, ami nagyjából úgy viszonyul az alap Free Pascalhoz, mint a Delphi a Turbóhoz. Lazarusban mindkét rendszeren jól működik a grafika, ha nem iskolai kötelesség a „csupasz” Free Pascal használata, javaslom, hogy kísérletezz vele.
2015. febr. 5. 12:38
Hasznos számodra ez a válasz?
1 2

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!