Mastermind játék készítése

A Mastermind egy kód, illetve színkeresős táblajáték, amely fizikai formában kétszemélyes játék. Az egyik játékos a játéktábla egy meghatározott részén elrejt kódokat/színeket. A másik játékosnak pedig adott számú lehetősége van sorrendhelyesen kitalálni, hogy mely kódok/színek vannak elrejtve. A fizikai játék kinézetét, valamint a játékszabályokat az ábra mutatja. Az interneten rákeresve a játék nevére a játék eredetéről és változatairól további információkat olvashatunk.

Azért említettünk a szín mellett kódot is, mert bár a leggyakoribb játékfajta az, ahol színeket kell elrejteni, de a játékban valójában bármi lehet az elrejtés és kitalálás tárgya (pl. számjegyek vagy betűk). Ezért ezt a valamit általánosan kódnak nevezik.

Ennek a játéknak a szoftveres változatát készítjük el grafikus felhasználói felülettel. A programkódban való könnyebb tájékozódáshoz a fenti ábra mutatja a játéktér egyes részeit és azoknak a programban használt angol elnevezéseit. A játék a közölt szoftveralkalmazás formában egyszemélyessé válik, mert a felhasználó fogja a tippeket megadni, de a kódok/színek elrejtését, valamint a tippek kiértékelését a program hajtja végre.

Az alkalmazás logikai modell részének programkódja a következő:

Ebben látható, hogy az elrejtett és kitalálandó kódok nem színek, hanem egész számok. Ez egyrészt egyszerűsíti a programot és a kiértékelést könnyíti, másrészt, ha GUI helyett konzolalkalmazást írnánk, akkor az az adatbevitelt is egyszerűsíti.

Alább láthatjuk a grafikus felhasználói felületet, illetve a futtatható alkalmazást megvalósító programkódokat. A GUI a fenti ábrán hivatkozott panelekből áll össze, amelyeket egy-egy osztály valósít meg.

A bejegyzés elején szereplő ábrán látható fizikai játéknál a játék megkezdése előtt a játékosok állapodnak meg, hogy maximálisan hány sor áll rendelkezésre a tippekhez, valamint milyen lehet az elrejtett kód (lehet-e ismétlődés és szerepelhet-e az üres pozíció). A programban ezt a felhasználó állíthatja be egy beviteli mezővel, valamint két választógombbal. Bármelyik változtatása esetén új játékot kell indítani az erre szolgáló gombbal, ami az aktuális beállításoknak megfelelően fog megjelenni és működni. Szintén a felhasználó kezdeményezi a tippje ellenőrzését. Mindezeket a funkciókat a ControlPanel nevű osztály valósítja meg és teszi lehetővé.

E komponensekből építi fel a MastermindGame osztály a játékteret, és a logikai modell közreműködésével irányítja a játékmenetet, azaz a kódok elrejtését, a tippek kiértékelését és a játék sikeres vagy sikertelen befejezéséről tájékoztatást, valamint hibaüzenetet küld, ha a tippsorok megadott száma kívül esik a megengedett értéktartományon. A játék indulásához is ezt az osztályt kell példányosítani és meghívni annak run() metódusát. A részletes kommentek segítik a programkódok megértését.

A futtatáshoz Python 3.9+ verzió szükséges.

A játék indítása után megjelenő felület képernyőképét a következő ábra bal oldala mutatja. Középen egy sikeres megfejtéssel végződő játék képe látható. Ennek alsó részén megfigyelhető, hogy a választógombok nincsenek bekapcsolt állapotban, ami azt jelenti, hogy az elrejtett színek csak egyszer fordulhatnak elő, és az üres pozíció nem szerepelhet közöttük. Ezzel szemben, az ábra jobb oldali képernyőképe egy olyan játékmenet sikertelen végét mutatja, ahol a rejtett színek között lehet ismétlődés és az üres pozíció is szerepelhet.

A teljes forráskód elérhető a https://github.com/pythontudasepites/mastermind_game linken.

Bár ebben az alkalmazásban a GUI felület kialakítása volt a hangsúlyos, a program a logikai modellel együtt elég összetett, ami azt jelenti, hogy sok nyelvi szerkezetet és számos szabványos könyvtári modult használ. Mindezekről a tudnivalókat a Python tudásépítés lépésről lépésre című e-könyv egyes fejezetei részletesen ismertetik, hiszen a könyv célja, hogy a fejezeteken végighaladva a végén az olvasó egy, e bejegyzésben mutatotthoz hasonló, grafikus felhasználói felülettel rendelkező alkalmazást képes legyen megalkotni.

É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.