Tili-Toli játék megvalósítása

Egykor népszerű volt egy olyan, magyarul Tili-Toli vagy 15-ös játékként (angolul sliding puzzle) ismert, egyszemélyes logikai táblajáték, amelynél egy 4 sorból és 4 oszlopból álló táblán 15 db megszámozott mozgatható lap (mező) van és egy mező üresen marad. A játék többnyire műanyagból készült, de fa kivitelezésben is előfordult. E változatok így néznek ki:

A játék lényege, hogy a lapokat egy kiinduló kevert elrendezésből függőlegesen vagy vízszintesen kell az üres helyre tologatni mindaddig, amíg egy előre ismert, a megoldást jelentő elrendezésbe (általában soronként növekvő számsorrendbe) kerülnek és a jobb alsó mező marad üresen.

Ennek a játéknak a programbeli megfelelőjét magunk is elkészíthetjük grafikus felhasználói felülettel, amelyhez a Python szabványos könyvtárának tkinter modulját használjuk. Mivel a játék szabályrendszere nagyon egyszerű, így maga a program sem lesz bonyolult felépítésű. A megvalósítandó fő fázisok:

1) kezdeti mezőelrendezés megjelenítése

2) a játékos által kiválasztott mező áthelyezése az üres helyre

3) annak ellenőrzése, hogy a megoldást jelentő elrendezés megvalósult-e, és ha igen erről tájékoztatás.

A játékot megvalósító programkód alább látható. A részletes kommentekből a működés megérthető. Ezért itt csupán azt jegyezzük meg, hogy a mezők kezdeti keverésének megvalósítása az, ami nem magától értetődő. Ugyanis az nem lehet teljesen véletlen, mert ha az lenne, akkor előállhatnak olyan elrendezések is, amelyekből nem lehet tologatással a megoldást kihozni. Ezért a keverés úgy történik – hasonlóan mint a valós fizikai játéknál – , hogy a megoldást jelentő elrendezésből kiindulva az üres mező szomszédai közül választunk egyet véletlenszerűen, és azt mozgatjuk az üres mező helyére, és ezt ismételjük kellően nagy számban. Ami a mezők mozgatását illeti, egyszerűsíti a munkát az a tény, hogy egy egérkattintással kiválasztott mezőlap csak egyetlen helyre kerülhet át, ami az üres mező. Ezért nem kell a kiválasztott mező tényleges mozgatásának animálásával foglalkozni, hanem a mezőre való kattintással az egyből az üres mezőre ugrik.

A a programkód a https://github.com/pythontudasepites/Sliding_puzzle linken is elérhető.

A programmal nem csak az alapértelmezett 4×4-es táblán lehet játszani, hanem eltérő sor- és oszlopszámmal is, amely értékeket a játékot reprezentáló osztály példányosításakor kell megadni, amely értékek 1-nél nagyobbak és legfeljebb akkorák, hogy a játéktábla teljes egészében látható legyen a képernyőn.

A következő képernyőképek két különböző játéktáblát mutatnak be a kiindulóállással és a célelrendezéssel a sikeres megoldásról tájékoztató üzenetablakkal együtt.

Kellemes szórakozást!

E bejegyzésben elsődlegesen a grafikus felhasználói felület kialakítása volt a fókuszban, amelyhez az ismereteket a Python tudásépítés lépésről lépésre című e-könyvben a „Grafikus felhasználói felület készítése” fejezetben lehet olvasni. Ugyanakkor számos más nyelvi elemet és lehetőséget is alkalmaztunk a szabványos könyvtár különböző moduljait használva, amelyekről az e-könyv „Készétel fogyasztás – a szabványos könyvtár moduljainak használata” fejezeten belül a következő részekben kaphatunk részletesebb információkat: „A programvégrehajtás felfüggesztése és a futási idő mérése”, „Speciális konténer típusok”, „Speciális iterátorok”, és „A véletlen használatba vétele” alfejezetek.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.