A beadandókat a küldjétek el e-mailben is, egyetlen ZIP fájlként mellékelve. A levél fejléce a következőképp nézzen ki:
csop<csoportszám>_<EHA kód>_bead1
Példa:
csop4_LERIAAT_bead1
Készítsük el a klasszikus Hunt the Wumpus játék egy egyszerűbb változatát Javaban!
Az eredeti játékot Gregory Yob írta az 1970-es években, és a mai napig megtalálható
a legtöbb Linux disztribúcióban (például a Caesar klaszteren is kipróbálható egy
variáns a wump
paranccsal).
Adott egy NxN
-es kétdimenziós világ, amely a Wumpus barlangja. A barlangban
a következő dolgok találhatók:
Player
)Wumpus
)Pit
)Treasure
)A játékos minden körben léphet egyet egy tetszőleges, a jelenlegi pozíciójával szomszédos mezőre. Minden lépés előtt a következő dolgokat érzékelheti:
Miután a játékos lépett, a Wumpus is léphet egy véletlenszerű irányba. Amennyiben nem tud továbblépni (mert pl. elérte a barlang legszélét), helyben marad, és csak a következő körben lép újra.
Ha a játékos rálép egy mezőre, ahol gödör van, beleesik, és a játéknak vége (a Wumpus tapadókorongos lábbal rendelkezik, ő nem esik bele).
A Wumpus előszeretettel fogyaszt fiatal kalandozókat, akik betévednek a barlangjába, emiatt egy mezőn tartózkodni vele erősen ellenjavallt magatartás. Ebben az esetben szintén vége a játéknak.
Ha a játékos megtalálja a kincset, a játéknak vége, és nyert. A Wumpust nem érdekli a kincs, számára az nem több terepakadálynál.
N = 5
, de készítsd fel a programot, hogy ez később akár
tetszőlegesen állítható legyen!1
játékost, 1
Wumpust, 1
kincset és 3
gödröt tartalmaz, véletlenszerű pozíciókban (egy pozícióra lehetőleg egy
kerüljön).Készíts egy egyszerű konzolos felületet, ahol a játékos irányíthatja a játékot.
Legyen egy cheat
funkció is, amely megjeleníti a teljes térképet!
Az alábbi példajáték szemlélteti a csalás funkciót is. A .
üres területeket,
a @
a játékost, a P
a gödröket, a W
a Wumpust, a T
pedig a kincset
jelöli a kirajzolt térképen. Az irányítás az n
(north), s
(south), e
(east) és w
(west) karakterekkel történik.
$ java wumpus.Game
=== Welcome to the Wumpus Lair ===
You are at the edge of the world.
Perception: -, -, -
Which direction to go? cheat
.P..P
..T..
...P.
....W
...@.
You are at the edge of the world.
Perception: -, -, -
Which direction to go? n
Perception: breezy, smelly, -
Which direction to go? cheat
.P..P
..T..
...P.
...@W
.....
Perception: breezy, smelly, -
Which direction to go? w
Perception: -, -, -
Which direction to go? cheat
.P..P
..T..
...PW
..@..
.....
Perception: -, -, -
Which direction to go? n
Perception: breezy, smelly, gloomy
Which direction to go? n
Congratulations! You have found the treasure!
r = 1
).[-1, 1]
intervallumból, majd a saját koordinátáihoz külön-külön hozzáadja. Így
előfordulhat, hogy nem lép tovább az adott körben. Biztos talált valamely
előző kalandorból 1-2 csontot, amelyen elnyammoghat :-)A feladat számos megközelítéssel megoldható, ebből egyhez található egy példa tesztfájl itt: GameTest.java. Amennyiben ez segít, nyugodtan használjátok, de bátran térjetek el tőle, ha indokoltnak találjátok, vagy csak más megközelítést kényelmesnek találtok! A hangsúly most a kísérletezésen van!
GameObject
leszármazottai (Pit
, Player
,
Treasure
, Wumpus
).GameObject
legfontosabb tulajdonsága a pozíció (Position
), ahol
található (ehhez megfelelő elérő és beállító függvényekkel is rendelkezik).Position
példány tudja az x
, y
értékeket, megfelelő equals()
,
hashCode()
, és toString()
implementációkkal rendelkezik, valamint néhány
segédfüggvénnyel megkönnyíti a használatot (pl. szomszédság, lekérdezése,
eltolás, véletlenszerű módosítás).Tile
tömb.Tile
példányon egyszerre több GameObject
is előfordulhat (pl. a
játékos, a kincs és maga a Wumpus is), ezeket érdemes egy tetszőleges
adatszerkezetben tárolni (lista, halmaz).Tile
néhány segédfüggvénnyel is rendelkezik, pl. van-e rajta
csillogó, szeles vagy bűzlő GameObject
.Az irányokat reprezentálhatod egy egyszerű felsorolási típussal. Ez sokban
hasonlít a C++ enum
típusaihoz, azonban vannak specialitásai (részletek
itt és itt):
public enum Direction {
NORTH, SOUTH, EAST, WEST;
}
k = 3-5
). Ezeket ellőheti egy tetszőleges irányba, és ha a Wumpus az
adott irányban lévő szomszédos területen tarózkodik, a játékos eltalálja és
megnyerte a játékot (a nyílvesszők korlátozottan Wumpus-követőek). Ha nincs
ott a Wumpus, a nyílvessző zajt csap, és a Wumpus mozoghat.