"nagylacis szösszenetek": nemcsak a táblajátékokról szóló, ma is aktuális írások

A gép fricskája a táblajátékosoknak?

Idén lesz három éves a táblajátékos progizseni a: Zillions of Games

Aki a PC-n játszható táblás játékokat kedveli, olyan óriási kínálattal találkozik, amelyből igencsak reménytelen az összes valódi értékre rátalálnia. Ugye ismerős? Mindegyik játékot egyenként installálni kell (többnyire más-más módon) és hamarosan betöltik a gyűjtők merevlemezének néhány gigabájtját, az indítómenük ikonjai között pedig szinte lehetetlen lesz eligazodniuk.
Két amerikai játékfejlesztő Mark Lefler (ismerős lehet a neve a computersakk világbajnokságon szerepelt "Now" progi szerzőjeként) és Jeff Mallett (a verhetetlen reversiprogi készítője) néhány éve gondolt egyet és több oldalról is zseniális progit alkotott. Egyetlen kezelőfelülettel és azonos menükezeléssel a világ összes (beleértve a még ki nem találtakat is ! ) táblás játékát kínáló progi találó neve Zillions of Games. Szabad fordításban: zillions = egy, millión felüli, nagyon nagy szám, hétköznapian: "sok , nagyon sok".

A néhány perc alatt installálható alap-készlet 18 megabájtjában benne vannak a grafikus elemek, a hanghatások és minden, ami ahhoz szükséges, hogy egy táblázatos formában megjelenő 48 ikont tartalmazó idítómenü mintegy 300 játékából választhassunk. Komfortos menűkezelése szinte mindent tud a táblás igényekről és azt ki is szolgálja (gép-gép ellen, gép-ember ellen, szerepcsere, visszajátszás, nyomtatás, mentés, léptetgetés, lépésajánlat, szabályismertető, játéktörténet, stratégia, feladványmegoldások.), mi több: mindegyik táblás játszható az Interneten is, ráadásként pedig akár magunk is bővíthetjük további játékokkal...
Játékereje "vérbeli amatőr" szinttel jellemezhető, sőt (szerintem némi túlzással) például a sakkban mesterszintre becsülik a tesztelők, és azt állítják, hogy a sakk egyes variációiban nagy valószínűséggel verné a nagymestereket is. Arról viszont meggyőződtem, hogy logikai feladványaink többségét szinte azonnal képes megoldani (8 vezér ütés nélkül a sakktáblán, fel-le kapcsolgatósok, tologatós puzzlek, NIM-játékok, átugrálós soliterek, labirintusok, táblás végjátékok feladványai, stb.).
Mindezt úgy, hogy a programba nincsenek beépítve játékféleségenkénti algoritmusok. Egy-egy játékonkénti text-file csupán az adott játék szabályait tartalmazza és a program maga generálja ehhez az ellenlépő algoritmust.

Mintha egy mesterséges intelligenciával állnánk szemben: Mutasd meg neki a szabályokat, a játék célját és máris játszhatsz vele! A "tisztánlátása" pedig megdöbbbentő. Pl. a sakkban tradicionálisan kialakult 9/5/3/3/1 értékarányok (királynő/bástya/futó/ló/gyalog) a Zillinél: 14121/8603/5916/5024/1850. Ezeket az értékeket generálja egy analizált hatásvizsgálat nyomán a Zillibe épített értékelőfüggvény.

A Zilli leírónyelvét használva, egy sakkszintű játék leprogrammozása grafikákkal, mindennel együtt nem több egyetlen napnál, az egyszerűbb játékok pedig néhány órát, a változatok perceket igényelnek. 1999-ben az első nyilvános bemutatón, az Esseni Spiel’99-en egy feltaláló Michail Antonow látogatott a Zillions standhoz azon a közmondáson alapuló sakkvari ötlettel, miszerint "egy intelligens ellenfél jobb, mint egy buta barát". A tandemsakkban mindkét oldalon egy-egy pancser a segítőtárs. Minden második húzás (a lépés-szabályok szerint, de) véletlen választással történik. Ezt a vicces ötletet, ott a helyszínen azonnal, alig két perc alatt (néhány utasítás megváltoztatásával) "megtanították" a Zillinek és az, ebben a teljesen új gondolkodást igénylő játékban, ott, akkor, verhetetlennek bizonyult. Az "idiotenchess" azóta már ott van a Zilli kínálatában.
Mintegy fél év alatt magam is meggyőrődtem arról, hogy a Zilli alapvetően milyen sokat "tud" a táblás játékokról.

Sokszor váltott ki belőlem a Zilli "programozása" olyan érzést, mint amikor egy táblajátékos játszóházban a haladóknak mutatok be valamilyen új táblást. Ekkor nem kell bíbelődni az alapokkal. Tudják, hogy egy olyan játékról van szó, amelyben egy táblán bábukat mozgatunk. Tudják, hogy ezeknek a mozgatásoknak vannak szabályai, meg kell legyen határozva az egymásra következés sorrendje és persze van valamilyen cél, amelynek az elérésében versenyezni lehet. Mi több: sok hasonló játékot ismernek már. Tudják, hogy: mi az a "lépéskényszer", mit jelent az "ütéskényszer" . Tudják, hogy többnyire "döntetlent" jelent a "lépésismétlés" és két "passz" után általában vége van a játéknak... Ha nem jelzem, hogy az adott játéknál ez másképp történik, akkor természetesenek veszik, hogy a lépésre következők csak a "saját bábúikat" mozgathatják és a lépéseket felváltva "egyenként, egymást követően" teszik meg, stb.
A táblás játékokat általában kedvelőknek elegendő hivatkoznom egy már ismert játékra és csak az új szabályelemeket kell részleteznem, a továbbfejlesztés lényegét hordozó ötletet, amitől persze az egész megváltozik. Lásd például a potyogtatós amőbát (amikor egy függőlegesen felállított rácsos táblába felülről ejtik bele a játékosok korongjaikat, az első négyes elérésében versenyezve). Ugyanez a játék nem kevésbé érdekes akkor sem, ha az ellenkezőjére változtatjuk a játék célját. Ekkor, az a játékos veszít, aki előbb kényszerül arra, hogy akár oszlopban, akár sorban, akár átlósan négy bábúja egymás mellé kerüljön.
A Zilli "progizásakor" csupán egyetlen sort (a játék célját definiálót) kell, a mintaként tekintett kész potyogtatós amőba forrásnyelvében, átírni és máris működik az új játékunk.

A módszer minden fejlesztő előtt ismert. Mintegy harminc éve, kezdő mérnökként, főnököm/tanítómesterem egy-egy munka kiadásakor mindig letette elém egy mintaként kiválasztott termék szerkesztési/gyártási dokumentációját, majd elemeiről-elemeire átbeszélve a változtatásokat, érthető lett: "pont ugyanilyent kell tervezni, de (tulajdonképpen minden részletében) egészen mást." Így működik ez minden szakmában. Tágabban és általánosan napi életünkben is évezredek során alakuló mintákat követünk, sőt hiszem, hogy így van ez még a művészetekben is. A legeredetibbnek tűnő ötlet boncolgatásakor is megtalálható valami alap szellemi örökségünkből. A minták és az alapok persze folyamatosan változnak, beépülnek az új irányok, az új változatok, hogy alapjai, kiinduló mintái legyenek az újabb fejlesztéseknek.
Becslésem szerint, az ember által ismert mintegy 1500-2000 különbözőnek tekinthető kétszemélyes stratégiai táblás játék, talán ha 25-30 jellegzetesen elkülöníthető alapötlet köré csoportosítható. Meglehetősen nehéz persze meghatározni az objektívnek elfogadható választóvonalakat, mármint hogy mit tekintünk egy újabb csoportalkotó ötletnek. Az a várakozásom, hogy néhány év elteltével mindaz ami nem kerül be addig a Zilli kínálatába elfeledhető lesz. A teljes "enciklopédikus" összesség egyedei pedig így, ha egyszerre, egy helyen megtalálhatók, teljeskörűen elemezhetők, szelektálhatók és rendszerezhetők lesznek. (Igen valószínű, hogy az ilyen jellegű játékszabadalmak újdonságvizsgálatának egyik releváns bázisát a Zillions of Games fogja képezni.)
Magam viszont, talán mégsem a játékok sokasága miatt (napjainkra már százával írtak rá szerintem kevésbé értékesnek minősülő játékokat is), hanem a könnyen elérhető és nagyon gyorsan látványos eredményt nyújtó adottsága miatt szerettem bele a Zillibe. Szinte azonnali sikerélmény kínál egy-egy progiba való belepiszkálás, akár anélkül is, hogy részleteiben ismernénk a proginyelvét. Átrajzolhatjuk a képernyőn látható képeket, kisebbre, nagyobbra állíthatjuk a táblát, megváltoztathatjuk a játék célját, a kezdőállást, egy-egy bábú mozgáslehetőségeit, stb.

Tán nincs is olyan játékos, aki még soha ne kísérletezett volna egy-egy táblás játék szabályainak megváltoztatásával. A legsikeresebb táblások szinte mindegyikének kialakulnak kisebb-nagyobb körben elterjedő "házi" játékszabály-változatai. Gondoljunk csak például a sakk félezernél is több variációjára. Egy-egy új ötlet a Zillivel szinte azonnal tesztelhető, ha a játékszabályokat (egy jól választott mintát követve, de akár nulláról is) a saját nyelvén "mondjuk el neki".

A játékszabályokat leíró $$$.zrf text-file (a kiterjesztés neve a Zillions Rules Files szavak kezdőbetűiből származtatva) többnyire három részre tagolható, melyek közül a középső, öt alapblokkban tartalmazza a legfontosabb információkat, akár logikusnak is tekinthető egymásraépülésben:


1. általános pl.: a játék neve, kétszemélyes, lépéskényszeres, játékosok sorrendje, hanghatások, leírások, helpek, stb.

2. tábla képe, mezőszámozás, mezők "szomszédjai"...

3. bábuk neve, képe, lépéslehetőségei

4. kezdőállás

5. nyerő-, ill. vesztő (döntetlen) helyzetek Ezt az öt blokkot vezeti fel a "(game" megnyitás, az öt blokk végét pedig a megnyitott zárójel ")" bezárása jelzi. Az ötös "főcsoport" előtt, a többször használt programsorokat "(define ... )" formába zárva, az ötös egység után pedig, a változatokat jellemző eltéréseket "(variant ... )" formába zárva "szokás" rendszerezni. Szokás? Úgy tűnik az eddig elkészült progik többsége ezt a struktúrát követi. Egyébként nincs sorrendi probléma!
Az ábrán keretezett blokkok sorrendjét teszőlegesen összekeverve is képes megérteni a ZRF-et feldolgozó, ill. végrehajtó Zillions.exe progi. A zrf ugyanis logikailag "csupán" a Zillions.exe beállítási adatait tartalmazza, ezeket pedig sorrendiség nélkül is értelmezi az exe. (A "szokást" mégis javasolt betartani azért, hogy magunk is és mások is könnyebben eligazodjunk egy-egy kész zrf továbbpiszkálásakor. Ebből viszont az következik, hogy egy adott zrf lényege a games blokk logikusan egymásra épülő sorrendjében többnyire könnyen meg is fejthető.)

Nézzük például az alábbi amőbaprogit, melyről úgy gondolom: angol nyelvismeret nélkül sem okozhat gondot a megértése. (Ha mégis, akkor szabadabb fordításban: game=játék, title=cím, players=játékosok, turn-order=lépéssorrend, board=tábla, image=kép, grid=rács, start-rectangle= kezdőnégyzet, dimensions=méretek, directions=irányok, piece=bábú, drops=lerakás, if=ha, empty=üres, add=végrehajt, win-condition=nyerőhelyzet, or=vagy, reletive-config=egymáshoz mért helyzet, setup=beállítás.)


Ha a Zillions.exe megtalálja az Image/Amoba könyvtárban a tabla.bmp és az OB.bmp, ill. XB.bmp képeket, akkor ez az Amőba.zrf progi elindul és többnyire már 1 másodperces "gondolkodási idővel" is veri a nem túl gyakorlottakat.
Játékát tekintve ugyanis a Zilli roppant célratörő. Nem csodálkozik rá egy-egy míves táblára, vagy egy-egy szokatlan lépéskombinációra, csupán az egymást követő hadállásokat hasonlítja össze az elérendő célkitűzéssel.

Az ábra egy -lépésenként három-három elágazást tartalmazó- fa három szintjét mutatja: a téglalapok felső sorában a lépés előtti, a téglalapok alsó sorában a lépés után állások állapot-jelzéseivel: ami sötét, ha onnan lefelé már a gép nyer és világos, ha nem.

Úgy képzeljük el, hogy a kész fát alulról felfelé kiszínezi a Zilli: Bármelyik "gép lép"-téglalap alsó sorában akkor lesz sötét egy állás állapota, ha legalább 1 db elágazása lefelé sötét. Bármelyik "ellenfél-lép" téglalap alsó sorában akkor lesz sötét az állás állapota, ha mindegyik lefelé ágazó vonal sötét. Azokban a partikban, amikor a beállított válaszidő elegendő a teljes elágazás-fa lebontásához, (és persze, ha létezik biztosan nyerő stratégia) akkor a Zilli mindig nyerni fog. A lebontott fát ugyanis "ész nélkül" (alulról-felfelé) kiértékeli és válaszlépéseit mindig a sötét állapotok láncolatán fogja megtenni.
Bonyolultabb a működése (és ez a jellemző) akkor, ha a beállított "gondolkodási" idő alatt nem jut el a fa teljes lebontásához. Ám, logikusan felthető, hogy ekkor is hasonlóan értékeli ki a fát, de nem a nyerőhelyzet alapján, hanem egy olyan értékszám alapján, amit a játékszabályok, ill. a játék célja szerint határoz meg egy univerzális értékelőfüggvénynek az adott játékra aktualizált részeivel. Ha pl. van ütés a játékban, akkor biztosan értékelni fogja az adott állás pontértékében a relatív bábúszámot, sőt mi több: az egyes bábuk lépési mozgásszabadságának különbözőségeit is figyelembe véve. Itt, most, ezt, találgatásokkal felesleges részletezni. Annyi bizonyos, hogy ezt az értékelő függvényt profi játékosok hozták össze, mert megdöbbentően hatékonyan működik csaknem mindegyik játékban.
Minden lehetséges befejezett lépéshez hozzárendel egy-egy értékelő számot, mely annál nagyobb pozitív érték, minél közelebbnek (biztosabbnak) "látja" a megadott cél elérését. És persze ekkor sem "gondolkozik". Ha "ő következik lépésre", akkor egyszerűen minden lehetséges lépést kipróbál és a hozzájuk rendelt értékelőszámok alapján választ közülük... Egy-egy lépés tehát annyiban "érdekli", hogy mi lesz az utána következő állás pontértéke.
Kézenfekvő, egy vonatkozásában mégis elgondolkoztató, hogy milyen hatékony ez a módszer.
A néhánylépéses sakkfeladványok megfejtését követő sikerélményre, vagy fiatalkorom logikai rejtvényeire gondolok. Arra a pillanatra, amikor megvilágosodik a megoldás útja. Gyakorlott rejtvényfejtők előtt nem ismeretlen a megvilágosodás élménye, amikor "leesik a tantusz", amikor rájövünk az "elrejtett trükkre", amikor az elvárt eredményre koncentrálva egyszerre "beugrik a megoldás". Pedig a legöbb esetben pimaszul egyszerű dologról van szó: sorold fel az összes lehetséges választ és az eredményre vezetőt húzd alá két vízszintes vonallal: mert ez lesz a megoldás.
Ha elegendően nagy a "tárkapacitásod" és kellő gyorsaságú a műveleti sebességed", a munka végén ott lesz az eredmény. Ámbár nem hinném, hogy e módszer eredményre vezető alkalmazása valamelyikünkből is sikerélményt váltana ki.

Ebből a megközelítésből, haragudnom kellene a Zillire, mert pimaszul, szemtelenül, ugyanazzal az ész nélküli sémával szinte mindegyik valaha számomra élményt nyújtó feladvánnyal megbírkózik. Bocsánat! Még csak nem is bírkózik, csupán azt a fenti két vízszintes vonalat helyezi el a kifejtett alternatívák közül a megfelelő alá.

Döbbenetes élményem volt például a Polyák-kockákkal... (A kecskeméti Polyák István "bolyongó kockái" rejtvényfejtő körökben is csak kevessé ismert, pedig büszkék lehetnénk honfitársunkra. Milliónyi játékfekjlesztő törte ugyanis a fejét azon, hogy a Samuel Loyd zseniális "Boss-Puzzle"-ját, -mely nálunk inkább a "tologatós 15-ös játék"-ként ismeretes-, továbbfejlesszék. A sok-sok (gyakorta "izzadságszagú") változat között eredeti új ötletettel eddig egyedül István jelent meg: amikor egy 3x3-as "tepsibe" 8 db színes kockát helyezett el, azzal a használati utasítással, hogy "nem tologatni, átbillenteni". Tegyünk le pl. 8 db dobókockát egy 3x3-as táblára úgy, hogy felül mindegyik hatost mutasson, majd az üres helyre történő átbillentések sorozatával érjük el azt, hogy mindegyik kocka felül egyesre váltson.)
Mindaddig, amíg nem "mutattam meg" a Zillinek ezt a feladványt, úgy tudtam 173 lépésből áll a megoldása és ezzel magyaráztam, hogy játszóházi bemutatóimon (2-3 órán belül) soha senki nem jutott sikerre vele. Aztán, amikor ezt 34 lépésben, néhány perc alatt megoldotta a Zilli, bevetettem egy "nincs ember, aki ezt követné" szigorítást: legyenek ezek az egyesek azonos lapállásúak. Értsd alatta, hogy a "felül egy legyen" célkitűzés mellett, minden kocka bal oldala kettest, elölről pedig mindegyik hármast mutasson. Nos, ehhez is csak 80 lépés kellett a Zillinek, igaz, kb nyolc órába telt a fa lebontása.)



Ezt az élményt igyekezve továbbadni, mindegyik, erre rávehető, ismerősömmel megoldattam az ábrán mutatott "kapcsolgatós" feladványt: Cél, hogy mindegyik cella világítson. Amelyik cellát kijelölöd egy lépésben, az, az ellenkező állapotra vált, de vele együtt ezt teszik a sor- és oszlop-szomszédjai is.
Az 5-10 lépésből elért megoldás feletti sikerélmény, többnyire bosszúságra váltott, amikor megmutattam, hogy ez a hülye gép, ezt, gondolkodás nélkül, három lépésben megoldja, hozzátéve: és persze ugyanezzel az algoritmussal amőbázik, sakkozik, dámázik…

Vígasztalásul, a Zilli korlátairól:- Meddig terjed az "okossága"? Mi történik, ha "végtelenre" állítjuk a gép gondolkodási idejét?
Jó közelítésben feltételezhető, hogy az előbbiekben mutatott fa lebontása és az értékelő függvény behívása mindegyik állásban, szintről-szintre lefelé rendre háromszoros időráfordítással történik. Ha pl. azt tapasztaljuk, hogy egy ilyen három-elágazásos játékban az 5. szintről a 6. szintre 1 másodperc alatt jutott el a Zilli, akkor a 16. szintről a 17. szintre kb. 16 órára, illetve a 17. szintig történő lebontáshoz valamivel több, mint egy egész napra lenne szüksége.

Mielőtt pontosabban utána számolna valaki, gondolkodjon el pl. az alábbi példán:
1. Adott játékban lépésről-lépésre 20 elágazás van.
2. Az átlagos partik lépéspárszáma 25.
Ha az első 10 szintig történő lebontáshoz 1 másodperc kell a Zillinek (mondjuk a jövő egyik szupergyorsaságú számítógépén), akkor a teljes fa kiértékelését, valamikor talán a dinoszauruszok korában kellett volna elkezdenie ahhoz, hogy napjainkra végezzen vele.

Fenti korlát ellenére, az a tapasztalat, hogy a játékok többségében meglehetősen jól működik a Zilli állásértékelő függvénye. Az pedig, hogy sokszor 4-7 lépés előretekintése elegendő a Zillinek a győzelemhez, figyelmeztet átlagos gyengeségünkre. Lehetséges, hogy az amatőr játékosok közül kiválasztódó "legyőzhetetlenek" is csupán egy-két lépéssel járnak a többiek előtt? Az pedig már igencsak elgondolkoztató, hogy intellektuálisan igényesnek tartott logikai feladványaink igen nagy részét szinte azonnal képes megoldani a Zilli ezzel a fa-lebontásos automatizmussal. Többnyire, a legkeményebbnek minősülő feladványaink is lépésenként 2-4 elágazással 5-40 lépés átgondolását igénylik. A rejtvényfejtő emberi elme logikája viszont inkább ráérzésen és megfigyelésen alapul, szinte soha nem a lehetőségek fájának követésén.
Ha bosszantana valakit, hogy a kreatív ötlet nélküli Zilli, sok táblásban eredményesebb nálunk, tekintsen inkább az ellenpéldákra. Tapasztalatom szerint a "sokmezős táblákon" pl. a GO-ban, vagy ahol az általános értékelő függvény "tehetetlen", pl. a PIKK-PAKK-ban… (játékspecifikus algoritmus nélkül) nincs esélye ellenünk a Zillinek… No és ha lenne esélye? Akkor sem több, mint az alkotó ember eszköze, történetesen agyának trenírozásához…

(ÚJ ALAPLAP, 2001. Nagylaci)