Kezdőoldal » Számítástechnika » Programozás » Free Pascal "fallabda" játék...

Free Pascal "fallabda" játék programozás?

Figyelt kérdés

Az a házim, hogy csináljak egy ilyen játékot. Jobb oldalon egy kis vonal, amit betűkkel irányítok fel-le és jön egy kis kör vissza kell ütni, az visszapattan megint elütni stb. Nem tudom mennyire érthető, olyasmi mint a Breakout nevű játék.

Ezt úgy kell megcsinálni, hogy a körnek (labdának) én adjam meg a kezdő koordinátáit, és a labda mindig más szögben pattanjon.


Addig megvan, hogy bekéretem a labda kezdő pozícióját, majd mikor elindul a grafikus üzemmód már kirajzolja a kört és a vonalat, de a kör nem mozog, a vonalat pedig nem tudom irányítani.


Abban kéne segítség, hogy a visszaütős részt hogy oldjam meg, a vonal irányítását, és hogy a labda mozogjon.


A vonal irányítást így próbáltam (a vonal a függőleges tengelyen (y) mozog;

repeat

case billentyu of

#102: y:=y+1;(az f betű ascii kódja, lenyomására felfelé menjen a vonal)

#108: y:=y-1; (az l betű ascii kódja, lenyomására lefelé menjen a vonal)

until #118; (v betű ascii kódja, kilépés)


A repeat ciklus nem tudom szükséges e, csak azért tettem oda ,mert így gondolatban addig csinálja míg a v-t megnyomom.


A vonal megjelenik, de az irányítás nem megy.


A kör mozgatására ötletem sincs. Annyit tudok hogy az x és y értékét kell növelni/csökkenteni eggyel amíg el nem éri a képernyő egy pontját, majd ha elérte akkor megint növelni/csökkenteni hogy az ellenkező irányba menjen stb amíg vége nincs a programnak. repeat ciklus kell, és 4 if utasítás, az biztos, de az értéknövelés/csökkenést nem tudom hogy kellene.


Bocsi a hosszú kérdésért, remélem érthető :D

Minden tanácsot örömmel fogadok :)



2015. jan. 27. 18:36
 1/7 ejbenjaro ***** válasza:

Egy karakteres felületre írt példa: [link]

Nem tökéletes, de az elvet láthatod, hogy merre indulj el.

2015. jan. 27. 18:46
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
100%

Ahhoz, hogy valami mozogjon, mozgási vektorral kell rendelkeznie. Ha ez nincs, vagy a mozgási vektor X és Y koordinátája 0, akkor a labdád nem fog semerre sem menni.


Én így csinálnám:

(Megjegyzés: az ütőt jobb oldalra tettem, és a képernyő bal felső sarka a (0,0) pont)


LabdaX, LabdaY, LabdaSugár: integer

VektorX, VektorY: integer

ÜtőX, ÜtőTetejeY, ÜtőMéret: integer


főprogram:

.. grafika inicializálása

.. labda középpontjának bekérése

.. VektorX és VektorY értékének véletlenszerű meghatározása (-3 és +3 intervallum közt)

.. ÜtőX legyen a képernyő szélessége - 10 pixel

.. amíg a labda a képernyőn van:

.. .. ütő elmozdítása

.. .. labda elmozdítása

.. .. labda mozgási vektorának frissítése

.. .. labda és ütő kirajzolása

.. eredmény értesítése

.. kilépés


ütő elmozdítása:

.. ha a fel nyíl van nyomva, és az ÜtőTetejeY > 0:

.. .. ÜtőTetejeY csökkentése 1-gyel

.. különben ha a le nyíl van nyomva és az ÜtőTetejeY + ÜtőMéret < Képernyő magassága:

.. .. ÜtőTetejeY növelése 1-gyel


labda elmozdítása:

.. LabdaX növelése VektorX-szel

.. LabdaY növelése VektorY-nal


labda mozgási vektorának frissítése:

.. ha a LabdaY - LabdaSugár <= 0 vagy LabdaY + LabdaSugár >= Képernyő magassága:

.. .. VektorY felszorzása -1-gyel

.. ha a LabdaX - LabdaSugár <= 0 vagy (LabdaX + LabdaSugár >= ÜtőX és LabdaY >= ÜtőTetejeY és LabdaY <= ÜtőTetejeY + ÜtőMéret):

.. .. VektorX felszorzása -1-gyel


a labda a képernyőn van-e:

.. Akkor igaz, ha a LabdaX + LabdaSugár <= Képernyő szélessége


a labda és az ütő kirajzolása:

.. ez már a te dolgod


Lehet, hogy nem hibátlan, most fejből raktam össze.

2015. jan. 27. 19:04
Hasznos számodra ez a válasz?
 3/7 SimkoL ***** válasza:
Itt: [link] megtalálod Delphi-ben, nem olyan régen tettem fel egy srácnak.
2015. jan. 27. 19:17
Hasznos számodra ez a válasz?
 4/7 tabaki ***** válasza:

„x és y értékét kell növelni/csökkenteni eggyel”


Legyen két változó, amelyiket mindig hozzáadsz a labda x és y értékeihez haladáskor. Amikor a labda falat ér, a megfelelő irányú növelőt fordítsd negatívba, valahogy így:


x:=x+xnövelő; y:=y+ynövelő;

if (x < xminimum) or ütő then xnövelő := -xnövelő;

if (yx < yminimum) or (y > ymaximum) then ynövelő := -ynövelő;


...tehát mondjuk a növelő érték mindkét koordinátánál 1 (jobbra fel), amíg nekimegy a felső falnak, onnantól minden lépésben x+1, y+(-1) lesz (jobbra le), ha ütőt ér, akkor x+(-1), y+(-1), tehát balra lefelé megy, stb. Így egy rutin intézheti a mozgatást, irányonként különbözők helyett.

2015. jan. 28. 02:56
Hasznos számodra ez a válasz?
 5/7 tabaki ***** válasza:

Egy próba:

[link]

Nem tudom, nálatok hogy néz ki a CursorOff, mert linuxon nem működik.

2015. jan. 28. 04:01
Hasznos számodra ez a válasz?
 6/7 tabaki ***** válasza:

Átírtam SimkoL programját Lazarusba, ha nincs Delphid:

[link]


(@SimkoL: Hm, közben látom ám, hogy ugyanazt az irányváltást használtad, amit némi spéttel én is ajánlgattam. Bocsesz.)

2015. jan. 28. 15:41
Hasznos számodra ez a válasz?
 7/7 tabaki ***** válasza:

Érdekességként átírtam egy régi Rapid-Q Basic programomat Lazarusba:

[link]

Küzdöttem vele, mint a malac a jégen, odáig már nem is jutottam el, hogy tényleg így kellett volna-e csinálnom anno, de legalább működik linuxon is. Az eredetijéről itt van szó:

[link]

2015. jan. 31. 01:07
Hasznos számodra ez a válasz?

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!