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
 1/21 anonim ***** válasza:

public class Grid {

//...

}


public class Key implements KeyListener {

private Grid grid;

public Key(Grid grid) { this.grid=grid;}

//...

}


Amikor példányosítod a Key-t, add neki át a Grid példányt.

2013. dec. 9. 18:18
Hasznos számodra ez a válasz?
 2/21 anonim ***** válasza:

#1 vagyok, kiegészítek, mert látom a private kulcsszóval is gondod van. Erre a megoldás a getter metódus.


public class Grid {


private Object mezo;


public Object getMezo() { return mezo; }


}


public class Key implements KeyListener {


private Grid grid;


public Key(Grid grid) { this.grid=grid; }


public void valami() {

// ...

// Object mezo = grid.getMezo();

// ...

}


}

2013. dec. 9. 18:31
Hasznos számodra ez a válasz?
 3/21 A kérdező kommentje:

Tehát akkor jól értem:

Program -> new Gui -> JFrame.add(new Grid)

class Grid(){


public Grid(){

new Key(this);

}

}


public class Key implements KeyListener{

public Key(Grid grid){

this.gridPeldany = grid;

}

}


?

2013. dec. 9. 19:06
 4/21 anonim ***** válasza:
Ja, jónak tűnik. :)
2013. dec. 9. 19:12
Hasznos számodra ez a válasz?
 5/21 A kérdező kommentje:

Na valahogy megfogalmazódott bennem a probléma.


A getter/setter dolgokat értem, meg értem azt a bizonyos encapsulation-t is, csak azt nem tudtam, hogy egy osztályból (itt a Key), hogyan érek el egy másik osztályt ha az nincs példányosítva a Key-nél, de hála neked kiküszöbölődött a probléma. Illetve még annyit had kérdezzek meg, hogy ez így egy helyes megközelítés vagy felesleges ennyire szétszedni osztályokra? Te hogy csinálnád?

2013. dec. 9. 19:17
 6/21 anonim ***** válasza:
Teljesen jó szétbontás. :) A modellt, logikát és GUI-t tényleg jó szétbontani, az MVC tervezési minta is erről szól. :)
2013. dec. 9. 21:32
Hasznos számodra ez a válasz?
 7/21 A kérdező kommentje:

Van plusz egy kérdésem.


Mi történik akkor ha a játék logikáját (kajával való találkozás, növekedés, ütközés) egy külön Snake class-ba teszem.

Így el kell, hogy érjem a Grid class-t, mert ott történik az animálás onnan tudom csak a koordinátákat. Ez így játszik vagy a Grid class-ba tegyem a logikát?

2013. dec. 9. 23:47
 8/21 A kérdező kommentje:
(Amúgy már mozog a kígyó és reagál a billentyűütésre :D
2013. dec. 9. 23:55
 9/21 anonim ***** válasza:

Hmm... szerintem úgy jobb lenne, ha:

- a Grid-ben csak ilyen alap metódusok lennének, mint kaja kirajzolás, kígyókirajzolás, ...

- a Snake lenne a modell, tárolná, milyen hosszú, milyen pozíciókon van, merre néz, mittudomén

- és lenne egy plusz Game osztály, mint controller, ami a Key event és a Snake állapota alapján instruálná a Grid-et, a rajzolást; illetve a Key alapján módosítaná a Snake-et is (pozíció pl.).


Így akkor csak a Game osztálynak kell ismernie a többit (Grid, Snake), és a Key instruálná a Game-et. De egyszerűsítésként Game osztály lehet akár maga a Key is.


Ezzel a megoldással a Snake modelled nem függ semmi mástól, bármikor átviheted egy másik programba, ahol teszem azt már másképp csinálod a GUI-t. És a Grid osztályod is független, újrafelhasználhatod másfajta kígyós játékhoz. :)


Én valahogy így csinálnám. :)

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

Köszönöm szépen, hogy ennyire sokat segítettél. Megpróbálom így leírásod alapján az utóbbi módszerrel kivielezni (Game, Snake class)

Mégegyszer köszönöm, sokat dobtál a programozási vágyamon :-D

2013. dec. 10. 00:32
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!