Power of Towers – Telecom stratégiai játék
Tartalomjegyzék 1. Bevezető..........................................................................................................................2 1.1. A játék célja, pontozás...............................................................................................2 2. A térkép............................................................................................................................3 3. A tornyok ..........................................................................................................................4 3.1. Költségek ..................................................................................................................4 3.2. Utasítások egy adott toronnyal kapcsolatban ............................................................6 4. A vevők ............................................................................................................................6 5. A játék időzítése ...............................................................................................................6 5.1. Online forduló ............................................................................................................7 5.2. Körök.........................................................................................................................7 6. Segédeszközök, induló anyagcsomag.............................................................................8
1. Bevezető A Nokia Code Jam programozó verseny feladata a Power of Towers – Telecom stratégiai játék lesz. A játék során Nektek, résztvevőként egy virtuális mobilszolgáltató vállalat irányítását kell automatizálnotok az általatok fejlesztett programkóddal. A játékhoz a Szervezők biztosítanak jelen dokumentáció mellett demo játékos kódokat, valamint letölthető keretrendszert próbafutamok futtatásához, a verseny működésének megértéséhez. Ez utóbbiak a regisztrációs határidő után lesznek elérhetőek, addig a jelen játékleírást tesszük csak közzé.
1.1. A játék célja, pontozás, alapfogalmak A játék célja az adott játékfutamok során a legtöbb vállalati profit termelése, ezáltal az adott játékfutam megnyerése, a játékfutamban résztvevő többi 3 csapat megelőzése. Egy játékfutamon 4 pont szerezhető, a részletes pontozást a táblázat mutatja meg.
1. helyezett 2. helyezett 3. helyezett 4. helyezett
4 pont 2 pont 1 pont 0 pont
A Nokia Code Jamen korlátlan számú csapat vehet részt. Alapfogalmak A Power of Towers játék egy körökre osztott térképes stratégiai játék. A játékfutam minden esetben 30 évig tart, havi döntési körökkel, tehát 360 körrel. Kör – egy játékfutam egy döntési „állomása”. Játékfutam – Röviden játék. 4 csapat versenyez egymással 360 körön keresztül. Forduló – a Nokia Code Jam selejtezője több fordulóból áll. Egy forduló során célunk, hogy számos játékfutamon vegyen részt minden csapat, jelenleg fordulónként 10-10 játékfutamot tervezünk minden csapat számára. Torony – A játék alapegysége. Virtuális Telecom céged a Power of Towers játékban a tornyokon keresztül nyújt szolgáltatást az ügyfeleknek. Térkép – A játék területe, melyen maximum 400 torony, a lakosság (potenciális vevőid) elhelyezkedik. Kutatási pontok – Röviden KP. Általános döntésként vállalatod minden körben áldozhat a Kutatás-fejlesztésre (R&D), annak érdekében, hogy nagyobb adatforgalmat lehetővé tevő, magasabb technológiai szintet érjen el. A technológiai szint befolyásolja a szolgáltatás minőségét. Technológiai szint – A technológiai fejlesztésnek 5 szintje van, a következő szint kapacitása az előző négyszerese. Minden játékban a csapatok az 1. szintről indulnak. A technológiai fejlődéshez szükséges KP-szinteket a játék során kell kitapasztalni.
A játékfutam felépítése, a játék célja A csapatok által beadott kódokat 4 fős csoportokba sorsoljuk, a 4 csapat kódja játszik le egy-egy játékfutamot. A játék célja, hogy a kezdőtőkét telekommunikációs szolgáltatásokba fektessétek tornyok bérlésével, amivel vevőket szerezhettek, és ezáltal minél több profitot érjetek el a játékfutam végére. A játék végén, az utolsó kör lefutását követően a teljes játék alatt gyűjtött profit összege határozza meg a résztvevő csapatok sorrendjét. A pontozásnál a játék végére kialakult sorrendet vesszük figyelembe.
2. A térkép Minden játék egy véletlenszerűen generált, kétdimenziós (500x500) térképen zajlik, melyet a térkép azonosítója (seed) egyértelműen meghatároz. Minden játékfutamra más-más térképet sorsolunk. A térképen víz (kék terület) és szárazföld található. A népesség a szárazföldön nem egyenletesen oszlik meg. Vannak városközpontok (piros területek), amelyek környékén sokan laknak, de a távoli vidékek sem teljesen lakatlanok. Az adótornyok helye változatlan a térképen a játék teljes időtartama alatt, ezeket csak bérelni lehet. A népesség elhelyezkedése és létszáma kismértékben ingadozik, amit két tényező határoz meg: a populáció változás és az urbanizációs faktor. A térképgenerálás algoritmusa publikus. A vevők szolgáltató választás algoritmusa azonban nem (ahogy az életben sem tudjuk pontosan meghatározni), ezt a játék és a felkészülés során szerzett tapasztalatokkal lehet kiismerni.
3. A tornyok A toronynak van üzemeltetési költsége és bérleti díja. A tornyoknak kétféle teljesítménye van: hatótávolság és adatforgalmi kapacitás. Csak a hatótávolságon belül tartózkodó ügyfeleknek képes szolgáltatást nyújtani, azon belül azonban nincs minőségkülönbség. A hatótávolság bizonyos mértékig növelhető, de ekkor a torony üzemeltetési költsége is növekszik tőle. Az adatforgalmi kapacitás csak technológiai fejlesztéssel növelhető. A fejlesztésre költött pénzért kutatási pontokat kapunk, és ha ez elér bizonyos értékeket, akkor képesek vagyunk a technológia következő szintjét is használni. A technológiai fejlesztésnek 5 szintje van, a következő szint kapacitása az előző négyszerese, ezen kívül semmi másban nem különbözik a korábbi technológiától a játék szempontjából.
3.1. Költségek és bevételek A bevételeket a vevők által fizetett havidíj jelenti. Szolgáltatóként Te határozod meg az szolgáltatási árajánlatot, a vevők pedig döntenek, hogy igénybe veszik-e. Árajánlat: amennyiért a szolgáltatást a torony adóterületén biztosítja a cég egy vevőnek. Minden toronnyal külön ajánlatot lehet tenni az ügyfelek felé, ezek azonban csak korlátozottan térhetnek el egymástól. A tornyok ajánlati ára nem térhet el nagymértékben ( >50%) az előző kör átlagárától. A fő költségtényező a játékban a torony bérleti díja. Egy toronyra bérleti jogot úgy lehet szerezni, ha egy üres toronyra licitálunk. Ha több jelentkező is van egyszerre, akkor az kapja, aki a legmagasabb bérleti díjat ajánlja. Ezt később nem lehet módosítani, és a bérlési jog megszerzésekor 3 hónapot előre ki kell fizetni. Ezt a torony felmondásakor, vagy ha más veszi át a tornyot, az átmeneti 3 hónapos időszakban lehet „lelakni”. A bérleti jog életbe lépésétől kezdve minden hónapban folyamatosan kell fizetni a havi bérletet. A toronybérlést fel lehet mondani, ilyenkor már nem kell tovább fizetni, de még 3 hónapig használhatod, „lelakjátok” a bérleti jog megszerzésekor befizetett összeget.
Torony bérlő váltás: rá lehet licitálni egy olyan toronyra is, amelyiknek már van bérlője. A licitáláskor egy havi bérleti díjat kell fizetni (az általad ajánlott áron számolva), és még hármat letétbe tenni. (Az egy havi mindenképpen elveszik, ez a próbálkozás költsége.) A jelenlegi bérlőnek előbérlési joga van, ha tartja azt az árat, amit most kínáltak érte, akkor megtarthatja. 3 hónap áll rendelkezésre a döntésre. A játékban hitel nincs, így amennyiben egy csapatnak elfogy a pénze (csőd), törlésre kerül a játékból és nem rangsoroljuk az adott játékban.
Azon extrém esetben, amennyiben mind a 4 játékos csődbe megy a 360. kör letelte előtt, senki sem kap pontot.
3.2. Utasítások egy adott toronnyal kapcsolatban Az utasítások, amiket egy játékos kiadhat (bővebben a Költségeknél):
Licit üres, foglalt, vagy saját toronyra (védés esetén) Bérletfelmondás egy toronynál Hatótávolság változtatás (distance) Árajánlat (price offer) változtatás
Egyszerre akárhány parancsot kiadhatunk. Érvénytelen utasításért nincs büntetés, simán hatástalan. Pl. olyan toronynak akarom a hatósugarát növelni, amit nem én bérlek.
3.3. Utasítások általánosan Kutatás-fejlesztési (R&D) költés. A befizetett összeg alapján kap a játékos kutatási pontokat. Egy bizonyos összeg felett azonban a kutatás hatásfoka romlik (nem csak a pénzen múlik) és csak az összeg 70 %-a konvertálódik kutatási pontokra. A kutatás globális, és ha elérünk egy KP szintet, akkor az összes tornyunk automatikusan szintet lép, a később bérelt tornyok már az aktuális szinten kerülnek bérlésre. Azaz egy újként a bérletünkbe került torony is az általános szinten kerül működtetésre, függetlenül az előző bérlő szolgáltatási szintjétől.
4. A vevők Egy ügyfél mindig az adott szolgáltató legközelebbi adótornyától veszi igénybe a szolgáltatást. A vevők adatfogalmi igénye növekszik, fixen havi kb. 1.015-szörösére. Ezt több torony bérlésével vagy technológiai fejlesztéssel lehet követni. Az ügyfelek azok közül a szolgáltatók közül választanak, melyeknek a lakóhelyük szerint hatótávolságon belül esnek, de egy szolgáltatótól mindig a legközelebbi tornyot veszik igénybe. A szolgáltató választás az ár és a minőség alapján történik. Minőségproblémák akkor keletkeznek, ha több ügyféllel kötünk szerződést egy adott torony területén, mint amennyinek az adatforgalom igényét ki tudjuk szolgálni. Az ügyfeleknek van bizonyos toleranciájuk a minőségproblémákkal szemben, de ha tartós vagy nagymértékű, az biztosan ügyfélvesztéshez vezet.
5. A játék időzítése A selejtező három fordulóból fog állni. Mindegyik fordulón több játékfutam lesz. Egy játékfutam 360 körre van osztva, ez 30 év játékidő, havi beavatkozási lehetőséggel. A programokat fel kell tölteni egy netes programmal. Feltöltés után egy automata rendszer lefordítja, és hibalistát küld, ha nem volt sikeres a fordítás.
5.1. Selejtező, online fordulók A 3 online forduló hetente kerül lebonyolításra. Minden héten az időzítés szerinti határidőig beérkezett programokat versenyeztetjük, és 36 órán belül reggelre kihirdetjük az eredményeket. (Ha előbb véget ér a forduló, akkor már korábban is.) Nem csak a verseny eredményét lehet megnézni, hanem a játékfutamok is megtekinthetők lesznek egy webes felületen. A versenyzők ligára lesznek osztva. Egy ligában 40-50 csapat lesz, így az indulók létszámától függően 4-5 liga várható. Az első forduló speciális, akkor mindenki egyenlőként indul. Az első fordulóban dől el, melyik csapat melyik ligában folytatja a versenyt. A későbbiekben először a legalsó (pl. D) ligában bonyolítjuk le a versenyt. Ennek a legjobb helyezettjei felkerülnek a C ligába, és így tovább. Ha valaki az első fordulóban nem küld be fordítható programot, akkor később automatikusan a legalsó ligából indul. Ha azonban a program jó, és minden ligában bejut a legjobbak közé, akkor egy forduló alatt is felkerülhet az élre az A ligába! A legjobbak az élő döntő során mérhetik össze a tudásukat. Az utolsó fordulóban lesznek meglepetés szabályok, amire ott helyben kell stratégiát kidolgozni. A korábban megírt játékkódokat lehet használni majd, az új szabályok alkalmazásával. Fontos információ: egy program 1 GByte memóriát és csak 1 szálat használhat. A szabályok megszegése a partiból, szándékosság esetén a versenyből való kizárást vonhat maga után.
5.2. Körök Egy játékfutam 30 virtuális évig tart, havi döntési körökkel, tehát 360 körig tart egy játék. Egy játékfutam inicializálással indul. A program megkapja a térkép azonositóját (seed), és hoszabb idő (pl. 20 sec) áll rendelkezésére, hogy kielemezze a pályát. Ha elöbb készen van, akkor kérjük jelezzen, ne lassitsa feleslegesen a versenyt. A továbbiakban viszonylag gyorsan (pl. 200 msec) kell lépni.
Egy kör során a következő események történnek:
Játékosok megkérdezése, utasítások begyűjtése.
Időlépés a térképen. (populációváltozás)
Csődbe ment játékos(ok) törlése
Felmondott tornyok elhagyása
Befektetések adminisztrálása, tornyok fejlesztése, amennyiben aktuális
Változtatás saját tornyokon: hatótáv, árajánlat, torony elhagyása, torony megvédése licit ellen.
Tulajdonoscsere, ha nem védte meg a bérlő a tornyot
Licitek működő tornyokra
Új tornyok bérbevétele
Előfizetési ajánlatok ellenőrzése, túlárazottak visszafogása maximum árra
Adatforgalom igény növekedése
Legközelebbi torony megkeresése minden pixelhez, majd a vevők elosztása az ár és a minőség függvényében
Bevételek és költségek ki- és felszámítása
6. Segédeszközök, induló anyagcsomag 6.1. Vizualizáció, térképgenerálás A térképgeneráló programot C++ és JAVA program formájában is letöltheti minden játékos. Így többféle térképen is tesztelhetitek a programotokat. Adunk egy keretrendszert, amivel le lehet játszani egy játékfutamot 4 játékos között. Saját programot is lehet több verzióban indítani, de a mi általunk adott demo játékosokat is lehet használni. A keretrendszer olyan lekérdező tulajdonságokkal fog rendelkezni, ami a debuggolást egyszerűvé teszi. Lehet látni egy térképen az eseményeket, egyesével is lehet léptetni az időt, de futtatni is lehet a parti végéig. Lépésenkénti végrehajtásnál le lehet kérdeni a játékosok ajánlatait, a tornyok tulajdonságait, és a játékstatisztikákat.
6.2.Példa forgatókönyvek a játékhoz
A játék működésének forgatókönyvet.
megértéséhez,
készítettünk
néhány
szemléltető
példát,
A data alkönyvtárban levo a?.txt és a?.inv file-okban vannak az utasítások. A txt fileban levő utasitások szerkezete: Idő, toronyID, bérlési költség, bérlés felmondása, hatótávolság, árajánlat Bérlés felmondás helyére 0-át kell irni, ha nem akarjuk felmondani a tornyot, és 1-et, ha igen.
A 0. pályára vonatkozik minden forgatókönyv. Használata: a run.bat file-ban az NTPlayer második paraméterének kell írni. NTPlayer C=0 a1 A különböző forgatókönyvek (A-F) leírásai: A: 4 torony van. Fejlesztések és egyéb változtatások menet közben nincsenek. A kék és a sárga nagy népsűrűségű helyen bérel tornyot. A zöld olyan ritkán lakott területen, hogy magától tönkremegy az üzemeltetési és bérlési költségtől. A lila csak kis hatótávolsággal szolgáltat. A szimuláció folyamán a kék kezd legjobban gazdagodni, de az ügyfelek adatfogalom igényének növekedésével itt lesznek először minőségproblémák, ami ügyfélvesztéshez vezet. Ha ez kritikussá válik, akkor az ügyfélszám instabil lesz és csökkenések, növekedések után végül teljes ügyfélkör-vesztéshez vezet. Mivel tovább működtetik az ügyfél nélküli tornyokat, így tönkremennek és lila nyeri a játékot, mivel ez utóbbi működése fenntartható. B: Hasonlít az A-ra, de sárga fejlesztésekre is költ. (Két szintet fejleszt.) Így eleinte lassul a pénznövekedése, de később nagy különbséggel nyeri a játékot. C:
Hasonló a B-re, de a kék játékos a minőségproblémákat észlelésekor, csökkenti a torony hatósugarát, így a kezdeti előnyét kihasználva végül 2. lesz. D: Hasonló a C-re, de kék is fejleszt, és így kihasználja, hogy jobb helyen van a tornya, és nyer. E: Csak kék és zöld játszik. Zöld a 10. körben rálicitál kék kettő tornyára. Az egyiket megvédi kék, a másikat viszont elviszi zöld. F: Újabb toronybérlések valósulnak meg. Azt illusztrálja, hogy egy túlnépesedő világban a kezdeti kis népsűrűségű helyek is gazdaságossá válhatnak később.
7. Gyakori kérdések Mi történik, ha nincs elegendő pénz toronybérlésre, de licitáltam? Egyszerre történik a licitálás meg az üres tornyokra. Ha már nincs pénzed egy toronyra, akkor érvénytelen a licit. Nincs rá külön büntetés, egyszerűen csak figyelmen kívül hagyjuk. Fontos, hogy ez esetben a tornyok sorszáma, nem pedig a licitek értéke adja a sorrendet! Egyszerre tesszük meg a licitjeinket a többiekkel? Igen. Ha három toronyra licitálsz, az elsőt elveszíted, a másodikat megnyered, de a harmadikra már nem jut elég pénzed, akkor csak a 2. tornyot fogom kibérelni. Fontos, hogy ez esetben a tornyok sorszáma, nem pedig a licitek értéke adja a sorrendet! Mi történik, ha már be van fizetve az első 3 hónap, és aközben ránk licitálnak, de szeretnék elővásárlási joggal élni. Akkor az első 3 hónapra már befizetett összegeket újra kell fizetni, vagy csak a különbséget? Csak a különbséget. Torony bérlet felmondás esetén megmarad az előbérlési jogunk a 3 hónapos felmondási idő alatt?
Előbérlési jog mindig van, ha bérlő vagy. A 3 hónapos "megkötési" idő alatt van lehetőség felmondani a szerződést? Akkor visszakapjuk a pénzt? Fel lehet mondani, de sosem adunk vissza a pénzt, csak lelakhatjátok. Mi történik, ha nem sikerül időben válaszolni ? Abban a körben nem hozunk döntéseket, a tornyaink müködnek. A rendszer egy ideig tolerálja a nem válaszoló programot.
8. A Játékvezetés a változás jogát fenntartja Amennyiben a verseny során bármilyen okból szabálymódosításra, pontosításra volna szükség, erről előre értesítjük a résztvevőket.