BombFight Készítők: A játékot készítette Orosz Ákos (
[email protected]) és Róth Gergő (
[email protected]). Esetleges kérdésekkel hozzájuk lehet fordulni.
Rövid leírás: Egy térképen egyszerre két játékos játszik egymással versenyezve. A játék célja az ellenséges játékos pontszámánál több pont elérése az adott térképen.
Szabályrendszer: Cél: drágakövek megszerzésével több pontot 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ípusok különböző pontszámot érnek. A pályán nem csak drágakövek, hanem többféle gomba is található. A különböző típusú gombáknak különböző pontszáma van. Ezek a pontszámok negatív értékkel számítanak bele a végeredménybe. A pálya a jól ismert Bomberman számítógépes játék pályájához hasonló. A játéktér négyzetrács alapú, minden négyzeten többféle elem lehet. A pálya minden második sorában minden második elem kötelezően fal, valamint a teljes pályát zárt fal veszi körül. A kijárat minden esetben valahol a falban van. Ezek az elemek a következők: -
Fal
-
o Tégla
-
o Bomba
-
o Játékos
-
o Kijárat
-
o Drágakő
o
5 pont:
o
10 pont:
o
20 pont:
o
-
25 pont:
o 40 pont: Gomba
o
-3 pont:
o
-6 pont:
o
-10 pont:
o
-15 pont:
o
-20 pont:
A játékos a pályán függőleges és vízszintes irányban mozoghat olyan helyre, ahol nincs fal, vagy tégla. A játék körökre osztott. A játékos minden körben két dolgot csinálhat akármilyen sorrendben: -
Mozoghat Bombát rakhat le A játék meghatározott számú körből áll, minden egyes körben minden játékos léphet a saját Bomberman-
jével. A bomba a lerakása után a 3. kör végén robban, 3 mezőt vízszintes és függőleges irányban. A bomba robbanása átmegy minden másik bombán és minden drágakövön és gombán. A robbanás sugara falba, illetve téglába ütközés esetén áll meg. Téglába ütközés esetén bontó hatása van, vagyis a téglát eltünteti a pályáról.
Pontszámok: A játék során a játékosok drágaköveket gyűjtenek. A drágakövek pontot érnek. Továbbá a pályán találhatóak különféle gombák is. A gombák felszedése mínuszpontot ér. Fontos: a különböző pontot érő elemek felszedése helyett, akár fel is robbanthatjuk azokat. Felrobbantással az adott elem értéke megkétszereződik. Tehát a felrobbantott drágakő kétszer annyi pontot ér, a felrobbantott gomba esetén pedig kétszer annyi pont vonódik le. Továbbá pontot ér az, ha eljutunk a kijáratig (80 pont). Az elhalálozásért (saját magunk felrobbantása, vagy másik játékos által lerakott bomba okozta halál) mínusz pontot kap az adott játékos (-40). A játék vége: A játék akkor ér véget, ha az egyik játékos a kijáratra lépett, vagy ha elfogy a körök száma.
Kommunikáció a BombFight programmal A BombFight program feladata két mesterséges, illetve valódi intelligencia kezelése. Egy intelligencia lehet a játékos által megírt program és a játékos is. Ezeknek az intelligenciáknak az interakcióit a BombFight program váltakozva kezeli, úgy, hogy minden körben minden egyes intelligencia léphet. A kommunikáció a játékosok által megírt programokkal a standard input és a standard output-on keresztül történik. A standard error használható debug üzenetek írására. A BombFight biztosítja a játékos által megírt programnak a standard input-on a teljes térképet és az összes játékos pozícióját. Ahol játékos azonosító szerepel, ott az 1 érték jelöli az első, a 2 érték a második játékost. A BombFight a pályát egy mátrixon reprezentálja, ahol a mátrix minden négyzetrácsában különböző elemek vannak.
A standard input-ra küldött információk sorrendben: -
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ámok mátrixa első játékos pozíciója -> x1 y1: két egész szám második játékos pozíciója -> x2 y2: két egész szám aktuális játékos -> 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ékos pontszáma -> p1: egész szám a második játékos pontszáma -> p2: egész szám
Az stdin-re kapott mátrix elemei: -
0: -20 pontot érő gomba 1: -15 pontot érő gomba 2: -10 pontot érő gomba 3: -6 pontot érő gomba 4: -3 pontot érő gomba 5: 5 pontot érő gomba 6: 10 pontot érő gomba 7: 20 pontot érő gomba 8: 25 pontot érő gomba 9: 40 pontot érő gomba 10: fal 11: tégla 14: kijárat 15: üres 1000-1003: 1. játékos által lerakott bomba 2000-2003: 2. játékos által lerakott bomba
Példabemenet a játékos által megírt program számára: 11 11 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 36 19 1 199 0 0
// szélesség magasság
// egyes játékos pozíciója // kettes játékos pozíciója // aktuális játékos sorszáma // hátralevő körök száma // egyes játékos pontszáma // kettes játékos pontszáma
A játékos által megírt program a standard output-on keresztül biztosít információt a BombFight-nak, így a standard output-ra tilos bármilyen más szöveget kiírni. A mesterséges intelligenciának utasítást kell adnia a hozzá tartozó Bomberman-nek. Ha nem ad utasítást, akkor a Bomberman nem csinál semmit az adott körben. Mesterséges intelligencia kimenetének legfeljebb két szóból kell állnia. A két szó egyike a mozgást befolyásolja, a másik pedig bomba lerakásra szolgál. A sorrend körönként lehet eltérő. A parancsok (szavak), amiket értelmez a BombFight program: -
up: a Bomberman-t arra utasítja, hogy felfelé menjen down: a Bomberman-t arra utasítja, hogy lefelé menjen left: a Bomberman-t arra utasítja, hogy balra menjen right: a Bomberman-t arra utasítja, hogy jobbra menjen bomb: a Bomberman-t arra utasítja, hogy bombát rakjon le
Pár példakimenet: ”bomb”: a játékos lerak egy bombát ”right”: a játékos egy mezőt megy jobbra ”up bomb”: a játékos egy mezőt megy felfelé, majd bombát rak le ”bomb right”: a játékos bombát rak le, majd egy mezőt megy jobbra ”bomb bomb”: a játékos lerak egy bombát (csak egy bombát rakhatunk le) ”left right”: a játékos balra megy egy mezőt (csak egy lépést tehetünk) ”left up”: a játékos balra megy egy mezőt (csak egy lépést tehetünk)
A játékosok debug üzeneteket a standard error-ra írhatnak (pl. fprintf(stderr, “debug information”) ). Az fprintf használata hasonló a printf-hez, a különbség annyi, hogy első paraméternek meg kell adni egy FILE mutatót, jelen esetben ez az stderr.
A BombFight level (.bflvl) fájltípus Ennek a fájlnak a kezelése nem szükséges, csak azoknak, akik saját pályát akarnak készíteni. A BombFight pályáit .bflvl fájltípus tárolja. Ha a felhasználó ad meg pályát („Level” melletti „Browse” gomb), akkor a „start game”-re kattintva a megadott pálya töltődik be, amennyiben ez nem sikerül, vagy nincs megadva fájl, akkor véletlenszerűen generál egy pályát a véletlenszerű beállításoknak megfelelően. A pálya egy mátrixot tárol. A mátrix minden rácspontjában egy-egy elem szerepel. Minden elemet egyetlen karakter reprezentál. Példa egy .bflvl fájlra (// után kommentek, nem a fájl része): 11 9 ########### #XX XX BX# #X# # # # # # XX 1# # # # # #8# # A XX91# # # # # #X# # 37X # #E######### 40
// a pálya 11 széles és 9 magas // a pálya legfelső sora
// maximális körök száma
A következő elemek lehetnek a mátrixban: -
-
A: első játékos kezdőpontja B: második játékos kezdőpontja #: fal X: tégla E: kijárat 0-4: gombák o 4: -3 pont o 3: -6 pont o 2: -10 pont o 1: -15 pont o 0: -20 pont 5-9: o 5: 5 pont o 6: 10 pont o 7: 20 pont o 8: 25 pont o 9: 40 pont
A BombFight program kezelése Telepítés (Windows alatt): a mellékelt könyvtárstruktúrát mentsük el. A BombFight programot a BombFight.exe indítja.
A játék megkezdéséhez meg kell adni a két játékos programját a megfelelő mezőben („Player1” és „Player2” melletti „Browse” gomb). Értelemszerűen ez a program Windows-on egy .exe fájl. Amennyiben a felhasználó nem ad meg valamelyik Player-nek programot, úgy a megfelelő Player körében a felhasználónak kell cselekednie. A saját Bomberman-jének a billentyűzet segítségével tud parancsot adni. Az irányítás a W, S, A, D, B és F gombokkal történik. -
W: a Bomberman fölfelé próbál meg menni S: a Bomberman lefelé próbál meg menni A: a Bomberman balra próbál menni D: a Bomberman jobbra próbál menni B: a Bomberman bombát rak le F: a játékos már nem kíván több parancsot adni
Értelemszerűen a Bomberman 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” pontjá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 BombFight generál egyet véletlenszerűen a „Random map options” beállításainak megfelelően. Az „Options” menü „show process output” alpontjára kattintva a felhasználó megnézheti, hogy mit ír ki a futtatandó program az stdout-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 probability: egy négyzetrácson tégla létezésének a valószínűsége (minél nagyobb, annál valószínűbb, hogy az adott rácson van tégla) Point probability: egy négyzetrácson drágakő vagy gomba létezésének a valószínűsége (minél nagyobb, annál valószínűbb, hogy az adott rácson van pontot érő elem) Max rounds: legfeljebb hány körig tarthat a játék Exits: kijáratok száma (a kijáratokat a program véletlenszerűen generálja)
Mellékelt programok random.c / random.exe (Windows): egyszerű program, mely illusztrálja a kommunikációt a BombFight programmal. A program logikája nagyon egyszerű: véletlenszerűen kiválaszt a pályán egy pontot és a lehető legrövidebb úton elindul a kijelölt pont felé. uber.exe (Windows): kicsivel okosabb logikájú program. A beadott pályaműveknek ezt ajánlatos legyőzni. Forráskód nincs mellékelve.
Értékelés A verseny során különböző (előre nem ismert) pályákon zajlik majd a küzdelem körmérkőzések formájában a pályázók programjai között. A programok egymás ellen fognak játszani egy automata segítségével, amelynek szabályai hasonlóak a kiadott egyszerűbb BombFight programéhoz. Minden mérkőzést minden játékos pár kétszer játszik le, megcserélt kezdőpozíciókból. Így a pálya egyenlőtlenségeit kiküszöböljük. A futtatás során egy lépésre maximum 2 másodperc ideje lesz a programoknak, ennél hosszabb gondolkodási idő esetén a mérkőzést lebonyolító program úgy értelmezi, hogy a mesterséges intelligencia nem akarja a játékost irányítani. Az egyes fordulókban szerzett pontszámok összeadódnak, a legtöbb pontot szerzett program lesz a győztes.
Beadandó fájlok Olyan C nyelvben íródott kód leadása, melynek célja, hogy különböző előre nem ismert pályákon képes legyen irányítani a Bomberman-t, úgy hogy az a lehető legtöbb pontot érje el, maga mögött hagyva a másik játékost. A .c kiterjesztésű forrá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. Továbbá futtatható állományt sem fogadunk el.