Kezdőoldal » Számítástechnika » Programozás » Snake játék JAVA-ban. Szeretné...

Snake játék JAVA-ban. Szeretnék adni egy terv ötletet és arra szeretnélek titeket kérni, hogy mondjátok el kti milyen "hiearchiával" valósítanátok meg?

Figyelt kérdés

Szóval annyi lenne a lényeg, hogy adok egy mintát ami alapján szeretném megcsinálni a Snake játékot. Ez a minta legfőképpen classokból áll, csak nem tudom, hogy hogyan mondják normálisan.


Szóval én véleményem szerint:

Program - public static void main(...)

GUI - JFrame (..)

Grid - GUI-ra kirajzolna egy négyzethálót (drawLine-al), a kígyót és a kaját, valamint a kígyó animálása is itt lenne (ugye?)

Snake - Itt lenne a játék logikája

Key - Ez lenne a KeyListener osztálya


Nálam az objektum orientáltság azt jelenti (valamiért), hogy minden olyan dolog amely egy külön objektumnak mondható (grid, gui, key) legyen külön osztályban. Ezt tényleg így kéne felfogni?

Viszont, hogy tudom megoldani, hogy a Key.class elérje a Grid.class-t és mondjuk az egyik változoját (irány) változtassa ha private?

Szabad-e olyat csinálni, hogy a Key extends Grid?

Ismerem az IS-A megközelítést az öröklődésben, de az, hogy a billentyűfigyelő egyfajta pálya legyen nem jön össze nálam.


Remélem érthető, hogy mit kérdezek, ha nem akkor sorry csak nem tudom, hogy hogy fogalmazzam meg normálisan :D



2013. dec. 9. 18:08
1 2 3
 11/21 A kérdező kommentje:
Hát lehet majd lesz még kérdésem az új megközelítésről, de mostmár inkább csicsikálok xD
2013. dec. 10. 01:31
 12/21 anonim ***** válasza:
Nincs mit, örülök, és segítek még szívesen. :)
2013. dec. 10. 09:28
Hasznos számodra ez a válasz?
 13/21 anonim ***** válasza:
Hogy oldod meg a mezők leképzését pixelekre?
2013. dec. 10. 11:00
Hasznos számodra ez a válasz?
 14/21 A kérdező kommentje:

Gui - Ablak

Grid - Rajzolások [kígyó, kaja, négyzetháló] (Itt van az animáció is ugye?)

Snake - Milyen hosszú a kígyó, merre néz

Game - Itt van a logic [kígyó eszik, kígyó nő, kígyó ütközik stb...]

Key - Billentyűleütés figyelő


Jól értelmezem?

2013. dec. 10. 14:51
 15/21 anonim ***** válasza:
Igen, szerintem jó lesz. :)
2013. dec. 10. 18:41
Hasznos számodra ez a válasz?
 16/21 A kérdező kommentje:

Hát ha teljesen őszinte akarok lenni, akkor úgy elakadtam, hogy csak na.


Ezt úgy kell értelmeznem, hogy a Game class-nak kell, hogy legyen egy példánya az összes többi classból?

Viszont így ha állítani akarom a kígyó irányát akkor a Snake classnak is kell, hogy legyen egy Grid class, hogy legyen hova változtatni a feje irányát, ugye?

2013. dec. 10. 21:54
 17/21 anonim ***** válasza:

Egyedül a Game-nek kell ismernie (példányosítania) a többit (Snake, Grid). :)


A Snake-ben a fejállás csak egy tulajdonság és van hozzá egy beállító metódus, egy setter, pl. setFejirany(...);


Ezt a metódust pedig az hívja meg, aki tudja, hogy merre kell, merre lehet állítani a fejet. Ezt pedig a Game tudja, mert ő ismeri a pályát, meg hogy milyen művelet van éppen (milyen gombnyomás, stb.).

2013. dec. 10. 22:48
Hasznos számodra ez a válasz?
 18/21 A kérdező kommentje:

Rajzolgattam és arra jutottam, hogy:


A Gui-t a Game csinálja


A game állít tulajdonságot a Snake-ben és a Grid-ben (a grid is tárolja az irányt azért mert ott van az animáció)


Viszont amit nem értek, hogy ha a Key-nek nincs semmi beleszólása a Snake-be akkor a billentyű leütésnél, hogy fog megváltozni a fejirány?


Jól érzem, hogy ez megvalósítási gondolkodásmód problémák oka, hogy ilyeneket nem látok? xD

2013. dec. 10. 23:01
 19/21 anonim ***** válasza:

> "Viszont amit nem értek, hogy ha a Key-nek nincs semmi beleszólása a Snake-be akkor a billentyű leütésnél, hogy fog megváltozni a fejirány? "


A Key irányítja a Game-et, a Game irányítja a Snake-et és a Grid-et. :)


Tehát én valahogy így képzelem el, most példa kódrészletekkel:


public class Key ... {

private Game game;

public Key(Game game) { this.game=game; }


public void keyEvent(...) {

.. if (leütöttBillentyű.equals('W')) game.felfele();

.. if (leütöttBillentyű.equals('A')) game.balra();

}


} // Key


public class Game() {

private Snake snake;

private Grid grid;


public void felfele() {

.. if (snake fejiránya nem felfelé) {

.... snake.setFejirány(felfelé);

.... grid.rajzoldÚjraAKígyót(snake); // és a snake-kel együtt az irány is átmegy:)

.. }

}


} // Game


Én így csinálnám. :) De nem muszáj ezt követned, nyugodtan csináld úgy ahogy jobban átlátod, aztán megpróbálhatod csoportosítani. A cél (az OOP-ben) az, hogy modulokra bontsunk, és a modulok legyenek újrafelhasználhatóak, könnyen cserélhetőek, bővíthetőek. Itt az én elgondolásomban a Snake csak egy sima POJO (annyit tesz, hogy csak pár adattag + getterek-setterek), csak egy modell, amit bármikor átvihetek másik programba.

2013. dec. 10. 23:31
Hasznos számodra ez a válasz?
 20/21 A kérdező kommentje:

public class Game {

.........Grid grid = new Grid();

.........Key key = new Key(this);

.........Gui gui = new Gui(grid, key);

}


Azért van így, mert a Gui class-nak kell, hogy legyen egy Grid és Key. Ezek miatt:

- frame.add(grid);

- frame.addKeyListener(key);


Ugye ez így jó?

Egy főbb kérdésem privátban tudsz adni egy elérhetőséget, hogy ha valaha elkészülök vele, akkor áttudjam küldeni normálisan a kódot, hogy megnézd?

[Amúgy mozog a kígyó :) ]

2013. dec. 11. 00:14
1 2 3

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!