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?
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.
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.
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.
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!