BmbFight Készítők: A játékt készítette Orsz Áks (rsz@dcs.uni-pannn.hu) és Róth Gergő (rth@dcs.uni-pannn.hu). Esetleges kérdésekkel hzzájuk lehet frdulni. Rövid leírás: Egy térképen egyszerre két játéks játszik egymással versenyezve. A játék célja az ellenséges játéks pntszámánál több pnt elérése az adtt térképen. Szabályrendszer: Cél: drágakövek megszerzésével több pntt kell szerezni a játék végére, mint amennyit az ellenfél szerez. A pályán többféle drágakő is szerepel. A különböző típusk különböző pntszámt érnek. A pályán nem csak drágakövek, hanem többféle gmba is található. A különböző típusú gmbáknak különböző pntszáma van. Ezek a pntszámk negatív értékkel számítanak bele a végeredménybe. A pálya a jól ismert Bmberman számítógépes játék pályájáhz hasnló. A játéktér négyzetrács alapú, minden négyzeten többféle elem lehet. A pálya minden másdik srában minden másdik elem kötelezően fal, valamint a teljes pályát zárt fal veszi körül. A kijárat minden esetben valahl a falban van. Ezek az elemek a következők: - Fal - Tégla - Bmba - Játéks - Kijárat - Drágakő 5 pnt: 10 pnt: 20 pnt:
25 pnt: 40 pnt: - Gmba -3 pnt: -6 pnt: -10 pnt: -15 pnt: -20 pnt: A játéks a pályán függőleges és vízszintes irányban mzghat lyan helyre, ahl nincs fal, vagy tégla. A játék körökre szttt. A játéks minden körben két dlgt csinálhat akármilyen srrendben: - Mzghat - Bmbát rakhat le A játék meghatárztt számú körből áll, minden egyes körben minden játéks léphet a saját Bmbermanjével. A bmba a lerakása után a 3. kör végén rbban, 3 mezőt vízszintes és függőleges irányban. A bmba rbbanása átmegy minden másik bmbán és minden drágakövön és gmbán. A rbbanás sugara falba, illetve téglába ütközés esetén áll meg. Téglába ütközés esetén bntó hatása van, vagyis a téglát eltünteti a pályáról. Pntszámk: A játék srán a játéksk drágaköveket gyűjtenek. A drágakövek pntt érnek. Tvábbá a pályán találhatóak különféle gmbák is. A gmbák felszedése mínuszpntt ér. Fnts: a különböző pntt érő elemek felszedése helyett, akár fel is rbbanthatjuk azkat. Felrbbantással az adtt elem értéke megkétszereződik. Tehát a felrbbanttt drágakő kétszer annyi pntt ér, a felrbbanttt gmba esetén pedig kétszer annyi pnt vnódik le. Tvábbá pntt ér az, ha eljutunk a kijáratig (80 pnt). Az elhalálzásért (saját magunk felrbbantása, vagy másik játéks által leraktt bmba kzta halál) mínusz pntt kap az adtt játéks (-40). A játék vége: A játék akkr ér véget, ha az egyik játéks a kijáratra lépett, vagy ha elfgy a körök száma.
Kmmunikáció a BmbFight prgrammal A BmbFight prgram feladata két mesterséges, illetve valódi intelligencia kezelése. Egy intelligencia lehet a játéks által megírt prgram és a játéks is. Ezeknek az intelligenciáknak az interakcióit a BmbFight prgram váltakzva kezeli, úgy, hgy minden körben minden egyes intelligencia léphet. A kmmunikáció a játéksk által megírt prgramkkal a standard input és a standard utput-n keresztül történik. A standard errr használható debug üzenetek írására. A BmbFight biztsítja a játéks által megírt prgramnak a standard input-n a teljes térképet és az összes játéks pzícióját. Ahl játéks aznsító szerepel, tt az 1 érték jelöli az első, a 2 érték a másdik játékst. A BmbFight a pályát egy mátrixn reprezentálja, ahl a mátrix minden négyzetrácsában különböző elemek vannak. A standard input-ra küldött infrmációk srrendben: - pálya szélessége -> w: egész szám - pálya magassága -> h: egész szám - h x w dimenziós mátrix, mely a pályát tartalmazza: egész számk mátrixa - első játéks pzíciója -> x1 y1: két egész szám - másdik játéks pzíciója -> x2 y2: két egész szám - aktuális játéks -> p: egész szám (értéke lehet 1, vagy 2) - hátralevő körök száma -> r: egész szám - az első játéks pntszáma -> p1: egész szám - a másdik játéks pntszáma -> p2: egész szám Az stdin-re kaptt mátrix elemei: - 0: -20 pntt érő gmba - 1: -15 pntt érő gmba - 2: -10 pntt érő gmba - 3: -6 pntt érő gmba - 4: -3 pntt érő gmba - 5: 5 pntt érő gmba - 6: 10 pntt érő gmba - 7: 20 pntt érő gmba - 8: 25 pntt érő gmba - 9: 40 pntt érő gmba - 10: fal - 11: tégla - 14: kijárat - 15: üres - 1000-1003: 1. játéks által leraktt bmba - 2000-2003: 2. játéks által leraktt bmba
Példabemenet a játéks által megírt prgram számára: 11 11 // szélesség magasság 10 10 10 10 10 10 10 10 10 10 10 10 15 7 15 9 15 0 11 15 15 10 10 15 10 15 10 15 10 11 10 11 10 10 0 15 11 11 15 4 15 11 15 10 10 15 10 15 10 15 10 11 10 15 10 10 15 15 15 15 15 15 11 11 3 10 10 15 10 15 10 15 10 3 10 15 10 10 15 15 15 15 15 15 15 15 15 10 10 15 10 15 10 15 10 15 10 3 10 10 15 15 15 1 15 15 3 2 15 14 10 10 10 10 10 10 10 10 10 10 10 3 6 // egyes játéks pzíciója 1 9 // kettes játéks pzíciója 1 // aktuális játéks srszáma 199 // hátralevő körök száma 0 // egyes játéks pntszáma 0 // kettes játéks pntszáma A játéks által megírt prgram a standard utput-n keresztül biztsít infrmációt a BmbFight-nak, így a standard utput-ra tils bármilyen más szöveget kiírni. A mesterséges intelligenciának utasítást kell adnia a hzzá tartzó Bmberman-nek. Ha nem ad utasítást, akkr a Bmberman nem csinál semmit az adtt körben. Mesterséges intelligencia kimenetének legfeljebb két szóból kell állnia. A két szó egyike a mzgást beflyáslja, a másik pedig bmba lerakásra szlgál. A srrend körönként lehet eltérő. A parancsk (szavak), amiket értelmez a BmbFight prgram: - up: a Bmberman-t arra utasítja, hgy felfelé menjen - dwn: a Bmberman-t arra utasítja, hgy lefelé menjen - left: a Bmberman-t arra utasítja, hgy balra menjen - right: a Bmberman-t arra utasítja, hgy jbbra menjen - bmb: a Bmberman-t arra utasítja, hgy bmbát rakjn le Pár példakimenet: bmb : a játéks lerak egy bmbát right : a játéks egy mezőt megy jbbra up bmb : a játéks egy mezőt megy felfelé, majd bmbát rak le bmb right : a játéks bmbát rak le, majd egy mezőt megy jbbra bmb bmb : a játéks lerak egy bmbát (csak egy bmbát rakhatunk le) left right : a játéks balra megy egy mezőt (csak egy lépést tehetünk) left up : a játéks balra megy egy mezőt (csak egy lépést tehetünk)
A játéksk debug üzeneteket a standard errr-ra írhatnak (pl. fprintf(stderr, debug infrmatin ) ). Az fprintf használata hasnló a printf-hez, a különbség annyi, hgy első paraméternek meg kell adni egy FILE mutatót, jelen esetben ez az stderr. A BmbFight level (.bflvl) fájltípus Ennek a fájlnak a kezelése nem szükséges, csak azknak, akik saját pályát akarnak készíteni. A BmbFight pályáit.bflvl fájltípus tárlja. Ha a felhasználó ad meg pályát ( Level melletti Brwse gmb), akkr a start game -re kattintva a megadtt pálya töltődik be, amennyiben ez nem sikerül, vagy nincs megadva fájl, akkr véletlenszerűen generál egy pályát a véletlenszerű beállításknak megfelelően. A pálya egy mátrixt tárl. A mátrix minden rácspntjában egy-egy elem szerepel. Minden elemet egyetlen karakter reprezentál. Példa egy.bflvl fájlra (// után kmmentek, nem a fájl része): 11 9 // a pálya 11 széles és 9 magas ########### // a pálya legfelső sra #XX XX BX# #X# # # # # # XX 1# # # # # #8# # A XX91# # # # # #X# # 37X # #E######### 40 // maximális körök száma A következő elemek lehetnek a mátrixban: - A: első játéks kezdőpntja - B: másdik játéks kezdőpntja - #: fal - X: tégla - E: kijárat - 0-4: gmbák 4: -3 pnt 3: -6 pnt 2: -10 pnt 1: -15 pnt 0: -20 pnt - 5-9: 5: 5 pnt 6: 10 pnt 7: 20 pnt 8: 25 pnt 9: 40 pnt
A BmbFight prgram kezelése Telepítés (Windws alatt): a mellékelt könyvtárstruktúrát mentsük el. A BmbFight prgramt a BmbFight.exe indítja. A játék megkezdéséhez meg kell adni a két játéks prgramját a megfelelő mezőben ( Player1 és Player2 melletti Brwse gmb). Értelemszerűen ez a prgram Windws-n egy.exe fájl. Amennyiben a felhasználó nem ad meg valamelyik Player-nek prgramt, úgy a megfelelő Player körében a felhasználónak kell cselekednie. A saját Bmberman-jének a billentyűzet segítségével tud parancst adni. Az irányítás a W, S, A, D, B és F gmbkkal történik. - W: a Bmberman fölfelé próbál meg menni - S: a Bmberman lefelé próbál meg menni - A: a Bmberman balra próbál menni - D: a Bmberman jbbra próbál menni - B: a Bmberman bmbát rak le - F: a játéks már nem kíván több parancst adni Értelemszerűen a Bmberman csak arrafelé közlekedik, amerre nem ütközik akadályba. A következő elemeken nem lehet átmenni: fal, tégla. A File menü start game pntjára kattintva kezdődik el a játék. A pályát még a játék megkezdése előtt meg kell adni a Level alatti beviteli mezőben. Amennyiben a felhasználó nem ad meg pályát, úgy a BmbFight generál egyet véletlenszerűen a Randm map ptins beállításainak megfelelően. Az Optins menü shw prcess utput alpntjára kattintva a felhasználó megnézheti, hgy mit ír ki a futtatandó prgram az stdut-ra és az stderr-re. Véletlenszerű pálya beállítási lehetőségei: Width: pálya szélessége Height: pálya magassága
Brick prbability: egy négyzetrácsn tégla létezésének a valószínűsége (minél nagybb, annál valószínűbb, hgy az adtt rácsn van tégla) Pint prbability: egy négyzetrácsn drágakő vagy gmba létezésének a valószínűsége (minél nagybb, annál valószínűbb, hgy az adtt rácsn van pntt érő elem) Max runds: legfeljebb hány körig tarthat a játék Exits: kijáratk száma (a kijáratkat a prgram véletlenszerűen generálja) Mellékelt prgramk randm.c / randm.exe (Windws): egyszerű prgram, mely illusztrálja a kmmunikációt a BmbFight prgrammal. A prgram lgikája nagyn egyszerű: véletlenszerűen kiválaszt a pályán egy pntt és a lehető legrövidebb útn elindul a kijelölt pnt felé. uber.exe (Windws): kicsivel ksabb lgikájú prgram. A beadtt pályaműveknek ezt ajánlats legyőzni. Frráskód nincs mellékelve. Értékelés A verseny srán különböző (előre nem ismert) pályákn zajlik majd a küzdelem körmérkőzések frmájában a pályázók prgramjai között. A prgramk egymás ellen fgnak játszani egy autmata segítségével, amelynek szabályai hasnlóak a kiadtt egyszerűbb BmbFight prgraméhz. Minden mérkőzést minden játéks pár kétszer játszik le, megcserélt kezdőpzíciókból. Így a pálya egyenlőtlenségeit kiküszöböljük. A futtatás srán egy lépésre maximum 2 másdperc ideje lesz a prgramknak, ennél hsszabb gndlkdási idő esetén a mérkőzést lebnylító prgram úgy értelmezi, hgy a mesterséges intelligencia nem akarja a játékst irányítani. Az egyes frdulókban szerzett pntszámk összeadódnak, a legtöbb pntt szerzett prgram lesz a győztes.
Beadandó fájlk Olyan C nyelvben íródtt kód leadása, melynek célja, hgy különböző előre nem ismert pályákn képes legyen irányítani a Bmberman-t, úgy hgy az a lehető legtöbb pntt érje el, maga mögött hagyva a másik játékst. A.c kiterjesztésű frrásfájlt érvényes Quincy Student digitális aláírással kell leadni. Érvénytelen digitális aláírással rendelkező kód leadása esetén a pályázó nem vehet részt a versenyen. Tvábbá futtatható állmányt sem fgadunk el.