Obsah:

Minesweeper-Raspberry-Pi-Edition: 7 krokov (s obrázkami)
Minesweeper-Raspberry-Pi-Edition: 7 krokov (s obrázkami)
Anonim
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition

Môj posledný projekt pre sériu CSC 130 na Louisiana Tech University je Minesweeper Raspberry Pi Edition. V tomto projekte som sa pokúsil obnoviť klasickú hru minolovky pomocou knižnice Tkinter v programovacom jazyku Python. Mriežka, ktorú hra minolovka obsahuje, má osem dlaždíc na šírku a päť dlaždíc na výšku. Formátovanie projektu bolo vhodné a zdokonalené na použitie Raspberry Pi nainštalovaného s Pythonom 2.7.

Kód a obrázky k záverečnému projektu Minesweeper Raspberry Pi Edition si môžete stiahnuť na nasledujúcom odkaze:

Minesweeper-Raspberry-Pi-Edition

Zásoby

x1 Raspberry Pi

Python 2.7 nainštalovaný na Raspberry Pi

Microsoft Powerpoint (alebo iný softvér na vytváranie obrázkov pre tlačidlá)

Krok 1: Vytvorte obrázky tlačidiel

Vytvorte obrázky tlačidiel
Vytvorte obrázky tlačidiel

VYSVETLENIE:

Každé tlačidlo, ktoré tvorí GUI, bude potrebné vytvoriť. Na vykonanie tejto úlohy som pomocou programu Microsoft Powerpoint vytvoril obrázky, ktoré som potreboval zobraziť na tlačidlách.

Najprv som pomocou programu Microsoft Powerpoint vytvoril desať tlačidiel na dlaždiciach potrebných na vytvorenie mriežky minolovky (prázdna, bob, nula, jedna, dva, tri, štyri, päť, šesť, sedem a osem).

Za druhé, pomocou programu Microsoft Powerpoint som vytvoril štyri obrázky potrebné pre obrazovku ponuky (zobrazenie ponuky, tlačidlo jednoduchej obtiažnosti, tlačidlo strednej obtiažnosti a tlačidlo ťažkej obtiažnosti).

Po tretie, pomocou programu Microsoft Powerpoint som vytvoril obrázok potrebný pre tlačidlo reštartu a obrázky potrebné pre ďalšie rôzne tlačidlá displeja (zobrazenie „hra nad“, zobrazenie „vyhrávate“a „pravidlá“).

Po štvrté, budete musieť zmeniť veľkosť obrázkov, aby sa zmestili na obrazovku. Pre môj Rasberry Pi som použil nasledujúce rozmery okna (vzťahujúce sa na pixely v dĺžke a šírke): 432 x 576.

Krok 2: Formátujte program

Formátovací program
Formátovací program

VYSVETLENIE:

Predtým, ako sa môže začať akékoľvek skutočné programovanie, musíme importovať potrebné knižnice a napísať hlavnú časť nášho programu.

Najprv budeme musieť importovať * z knižnice Tkinter a zamiešať z náhodnej knižnice. Za druhé, v hlavnej časti programu budeme musieť dokončiť nasledujúce kroky v kóde: vytvorte okno, nastavte nadpisové okno, vygenerujte GUI a zobrazte GUI a počkajte na interakciu s používateľom. Tento kód je napísaný v správnom formátovaní vzhľadom na knižnicu Tkinter (pozrite sa na kód uvedený v návode, aby ste videli správne formátovanie).

Krok 3: Vytvorte GUI (mriežka ponuky a hľadania min)

Vytvorte GUI (mriežka ponuky a hľadania min)
Vytvorte GUI (mriežka ponuky a hľadania min)
Vytvorte GUI (mriežka ponuky a hľadania min)
Vytvorte GUI (mriežka ponuky a hľadania min)
Vytvorte GUI (mriežka ponuky a hľadania min)
Vytvorte GUI (mriežka ponuky a hľadania min)
Vytvorte GUI (mriežka ponuky a hľadania min)
Vytvorte GUI (mriežka ponuky a hľadania min)

VYSVETLENIE:

Po spustení programu sa otvorí obrazovka s ponukou. Po zvolení obtiažnosti (kliknutím na jedno z tlačidiel obtiažnosti na obrazovke s ponukou) sa GUI obnoví mriežkou minolovky, displejom a tlačidlom reštartu. Pretože s prácou na grafickom rozhraní ešte len začínate, budeme potrebovať iba spustenie ponuky, uvedenie do prevádzky funkčných tlačidiel obtiažnosti ponuky a obnovenie grafického používateľského rozhrania na hernej obrazovke pomocou mriežky minolovky.

Po prvé, pri spustení programu sa môžeme nechať zobraziť obrazovku s ponukou volaním metódy „setupMenu“v konštruktore triedy MainGUI.

Za druhé, môžeme nechať na každom z tlačidiel obtiažnosti ponuky vykonať určité riadky kódu na každé kliknutie pridaním metódy „process“(bude tiež potrebné pridať príkaz lambda: self.process („returnButtonName“) do parametrov použitej funkcie tlačidla pri vytváraní každého tlačidla obtiažnosti). V metóde „proces“sa vytvoria tri príkazy if-else a vykonajú sa určité ďalšie metódy a riadky dodatočného kódu v závislosti od toho, čo sa tlačidlo rovná (tlačidlo sa rovná ľubovoľnému názvu tlačidla, ktoré bolo naposledy zaregistrované).

Po tretie, kým je obrazovka ponuky hore a ak používateľ klikne na jedno z tlačidiel obtiažnosti, program uloží určitú hodnotu do premennej „obtiažnosť“(obtiažnosť sa rovná „ľahká“, „stredná“alebo „tvrdá“). mimo toho, na ktoré tlačidlo obtiažnosti sa klikne). Toto kliknutie na tlačidlo vie, ktorý príkaz if-else nasledovať podľa toho, aký názov tlačidla bol naposledy zaregistrovaný (aké tlačidlo sa rovná). Okrem toho na opätovné priradenie premennej „obtiažnosť“budeme musieť najskôr vytvoriť inštanciu to mimo triedu. Takže premennú „obtiažnosť“nastavíme ako prázdny reťazec pred vytvorením triedy „MainGUI“.

Po štvrté, vymažte GUI tlačidiel vytvorených metódou „setupMenu“tak, že vytvoríte metódu „clearMenu“(vo viacerých inštanciách použijete funkciu button.destroy ()) a v metóde „process“zavoláte metódu „clearMenu“(pod každé z tlačidiel obtiažnosti sa zaregistruje po priradení premennej obtiažnosti).

Po piate, aktualizujte GUI vytvorením metódy „setSLASHresetGUI“(tlačidlá sú vyrobené rovnakým spôsobom ako v metóde „setupMenu“) a zavolaním metódy „setSLASHresetGUI“v metóde „proces“(pod každým z tlačidiel obtiažnosti sa zaregistruje po obtiažnosť priradenia premenných a volanie metódy „clearMenu“).

Okrem toho, predtým, ako sú všetky tlačidlá priradené v rámci metódy „setSLASHresetGUI“, musíme nakonfigurovať riadky a stĺpce v mriežke a potom, čo sú všetky tlačidlá priradené v rámci metódy „setSLASHresetGUI“, musíme zabaliť všetok obsah v mriežke (pozrite sa na kód uvedený v návode na zobrazenie správneho formátovania).

Krok 4: Aktivujte tlačidlá na hernej obrazovke

Aktivujte tlačidlá na hernej obrazovke
Aktivujte tlačidlá na hernej obrazovke
Aktivujte tlačidlá na hernej obrazovke
Aktivujte tlačidlá na hernej obrazovke
Aktivujte tlačidlá na hernej obrazovke
Aktivujte tlačidlá na hernej obrazovke
Aktivujte tlačidlá na hernej obrazovke
Aktivujte tlačidlá na hernej obrazovke

VYSVETLENIE:

Aby tlačidlá vykonali po kliknutí určité riadky kódu, budeme musieť vykonať metódy v rámci metódy „proces“. Pre túto úlohu budeme musieť vytvoriť niekoľko nových metód, premenných a zoznamov.

Najprv urobíme dva zoznamy. K dispozícii bude zoznam s názvom „mriežka“. Tento zoznam „mriežky“bude pozostávať iba z celých čísel 9 a 0. V tomto zozname bude deväť predstavovať bomby a nuly budú predstavovať ne bomby. Program tak rozlíši, či je dlaždica bomba alebo nie. Vytvorí sa druhý zoznam, ktorý sa bude nazývať „stav“. Tento zoznam „stav“pozostáva iba z jedného reťazca znakov („0“, „1“, „2“, „3“, „4“, „5“, „6“, „7“, „8“, „b“"). V tomto zozname bude každý jeden reťazec znakov zodpovedať určitému obrázku. Program tak bude vedieť, aký obrázok sa má zobraziť na každom tlačidle v mriežke minolovky. Každé tlačidlo v mriežke minolovky bude mať v každom zozname zodpovedajúci index na základe svojho umiestnenia v mriežke. Zodpovedajúci index bude priradený nasledujúcim postupom (číslo tlačidla - 1). Napríklad zodpovedajúci index tlačidla v každom zozname je nulový. Nakoniec sa tieto dva zoznamy vykonajú pred vykonaním triedy „MainGUI“a vytvoria sa mimo triedy „MainGUI“. Trieda "mriežka" bude vytvorená ako prázdny zoznam (grid = ) a zoznam "status" bude vytvorený funkciou rozsahu (pridanie štyridsiatich jednoznakových reťazcov "n" do zoznamu "status").

Za druhé, urobíme rôzne metódy, ktoré dokážu zistiť počet mín okolo neho a ktoré je možné vyvolať po kliknutí na tlačidlo (rozhodnutie o tom, ktorá metóda by sa mala vykonať, sa určí umiestnením tlačidla). Práve tieto metódy sa budú nazývať naše banské analyzátory. Tieto metódy zvýšia počítadlo s názvom „NumOfMines“a pomocou určitých indexov v zozname „mriežky“určí, koľko bômb obklopuje dlaždicu. Reťazec, ktorý bude uložený v premennej „NumOfMines“, bude použitý na nahradenie rovnakého zodpovedajúceho indexu v zozname „status“. Teraz sa môžete čudovať, ako program bude vedieť, ktorý index použiť. Keď je tlačidlo zaregistrované v metóde „procesu“, potom sa vytvorí/priradí premenná „index“k určitému celému číslu (podľa toho, aký reťazec tlačidlo zaregistruje). Jedna z vytvorených metód použije priradený index na poznanie umiestnenia dlaždice a indexov dlaždíc, ktoré ju obklopujú (algoritmus v rámci metódy to zistí). Navyše na zmenu priradenia premennej „index“budeme musieť najskôr vytvoriť inštanciu mimo triedu. Pred vytvorením triedy „MainGUI“teda prednastavíme premennú „index“ako celočíselnú nulu.

Po tretie, vytvoria sa metódy „prevádzky“. Metóda „operácie“sa vykoná vždy, keď je tlačidlo zaregistrované. Tieto metódy "operácie" budú vykonávané v metóde "proces". Pri metóde „proces“viac príkazov if-else určí, na ktoré tlačidlo bolo kliknuté (podľa toho, čo sa tlačidlo rovná). Tu sa vyvolá určitá metóda „operácie“(vo príkazoch if-else).

Po štvrté, v skutočnosti sa dostaneme k tomu, ako tlačidlá fungujú. Ako už bolo uvedené, v metóde „proces“sa nachádza viacero príkazov if-else, ktoré vykonávajú určité ďalšie metódy a riadky dodatočného kódu v závislosti od toho, čo sa tlačidlo rovná (tlačidlo sa rovná reťazcu, ktorý bol naposledy zaregistrovaný). V rámci týchto príkazov if-else bude nasledovať nasledujúce v poradí: index bude priradený globálne, príslušný index v zozname „status“bude priradený k reťazcu „b“(ak sa zodpovedajúci index v zozname „mriežky“rovná celé číslo deväť), vykoná sa zodpovedajúca metóda „operácie“(ak sa zodpovedajúci index v zozname „mriežky“rovná nule celého čísla), príslušný index v zozname „stav“bude znova priradený k reťazcu, ktorý sa rovná premennej „NumOfMines“(ak sa zodpovedajúci index v zozname „mriežky“rovná nule celého čísla) a grafické používateľské rozhranie sa obnoví zavolaním metódy „setSLASHresetGUI“.

Krok 5: Metóda „setDifficulty“a metóda „reštart“

Obrázok
Obrázok
Obrázok
Obrázok

VYSVETLENIE:

Ďalej bude potrebné vytvoriť metódu „setDifficulty“a tlačidlo reštartu umiestnené v spodnej časti obrazovky v hre bude potrebné uviesť do prevádzky (vytvorením metódy „reštart“, aby sa spustila po kliknutí používateľa)).

Najprv bude potrebné implementovať metódu „setDifficulty“do príkazov if-else tlačidiel obtiažnosti v metóde „proces“a v metóde „reštart“. Riadky kódu a metódy vykonávané touto metódou sú dosť jednoduché. Pri metóde „setDifficulty“pridáme do zoznamu „mriežka“určité množstvo núl (ne bomby) a deviatky (bomby) (prostredníctvom dvoch funkcií rozsahu v rámci každého príkazu if-else) a potom zamiešame „mriežkový“zoznam (s funkciou náhodného výberu knižnice) v rámci metódy „setDifficulty“(po vykonaní príkazov if-else). Pomer núl a deviatok bude určený tým, na aký reťazec je premenná „obtiažnosť“nastavená („ľahké“: 34-6, „stredné“: 28-12, „tvrdé“: 16-24).

Za druhé, v metóde „reštart“nastavíme premenné „index“a „NumOfMinesLEFT“na globálnu nulu, globálne vyprázdníme zoznamy „status“aj „grid“, resetujeme zoznam „status“pomocou funkcie rozsahu (pridanie štyridsať reťazcov jedného znaku „n“do zoznamu „status“) a zavolajte na metódu „setDifficulty“.

Krok 6: Scenáre ukončujúce hru

Scenáre ukončujúce hru
Scenáre ukončujúce hru
Scenáre ukončujúce hru
Scenáre ukončujúce hru
Scenáre ukončujúce hru
Scenáre ukončujúce hru
Scenáre ukončujúce hru
Scenáre ukončujúce hru

VYSVETLENIE:

Každá hra s minolovkou má dva scenáre končiace hru: výhra a prehra. V rámci tohto programu implementujeme tieto dva scenáre končiace hru dvoma novými metódami: metódou „You_A_Winner_Son“a metódou „GameOver“. Predtým, ako sa GUI obnoví v rámci metódy „process“a na základe indexov zmenených dvoma metódami scenára končiaceho hru, zmení sa tlačidlo zobrazenia tak, aby zodpovedalo výsledku.

Po prvé, keď používateľ klikne na poslednú skrytú dlaždicu, ktorá neobsahuje bomby, musí byť spustená metóda „You_A_Winner_Son“. Túto úlohu dokončíme zavolaním metódy „You_A_Winner_Son“vždy, keď kliknete na dlaždicu a zistíte, že dlaždica nie je bombou (v rámci metód „operácie“vykonaných metódou „proces“). Ak sú splnené víťazné podmienky, budú vykonané dva príkazy if-else v rámci metódy „You_A_Winner_Son“. Prvý príkaz if-else sa spustí vždy bez ohľadu na to, či hráč zvíťazil alebo nie, keď je táto metóda vyvolaná. Na základe toho, čomu sa rovná premenná „obtiažnosť“, určitý algoritmus, ktorý určí, koľko mín/bômb zostalo skrytých. Celé číslo, ktoré nájde tento algoritmus, bude uložené do premennej "NumOfMinesLEFT". Ďalej medzi dvoma príkazmi if-else bude vykonaný ďalší algoritmus na zistenie počtu zostávajúcich počiatočných dlaždíc (nekliknuté dlaždice). Celé číslo, ktoré nájde tento algoritmus, bude uložené do premennej "NumOfStartingTilesLEFT". Druhý príkaz if-else bude vždy vykonaný bez ohľadu na to, či hráč zvíťazí alebo nie, keď je táto metóda vyvolaná. Na základe toho, čomu je premenná „obtiažnosť“rovná, je možné vykonať jeden z troch príkazov if-else, ak sú splnené ich podmienky. Podmienky budú založené na tom, čomu sa rovnajú dve premenné „NumOfMinesLEFT“a „NumOfStartingTilesLEFT“. V rámci týchto troch príkazov if-else bude spustený algoritmus, ktorý spôsobí, že každé tlačidlo bude zbytočné (hra sa skončila).

Za druhé, keď používateľ klikne na jednu zo skrytých dlaždíc s bombami, musí byť spustená metóda „GameOver“. Túto úlohu dokončíme zavolaním metódy „GameOver“vždy, keď kliknete na dlaždicu a zistíte, že je dlaždicou s bombami (v rámci metód „operácie“vykonaných metódou „proces“). Keď je vyvolaná metóda „GameOver“, spustí sa algoritmus, ktorý spôsobí, že každá počiatočná dlaždica bude zbytočná (hra sa skončí) a odhalia sa skryté dlaždice bomby (na základe zodpovedajúcich indexov v zozname „mriežky“, určitých indexov. v zozname „status“bude preradený do jednoznakového reťazca „b“).

Po tretie, zobrazenie hernej obrazovky sa aktualizuje pri každom obnovení grafického rozhrania vykonaním veľmi málo drobných úprav metódy „setSLASHresetGUI“. Keď je mriežka grafického rozhrania nakonfigurovaná, umiestnime tri príkazy if-else na miesto, kde je umiestnené aktuálne priradenie zobrazovacieho tlačidla. Jeden z troch príkazov if-else sa spustí na základe toho, čomu sa rovnajú nasledujúce premenné: „GameOverDETECTOR“, „obtiažnosť“, „NumOfMinesLEFT“a „NumOfStartingTilesLEFT“. Ako by vás mohlo zaujímať, premenná „GameOverDETECTOR“je nová premenná. Táto premenná sa vytvorí tesne pred vykonaním príkazov if-else v rámci metódy „setSLASHresetGUI“. Premenná „GameOverDETECTOR“sa bude rovnať celému číslu, ktoré sa nájde pomocou algoritmu, ktorý zistí, koľko indexov je v „mriežke“zoznam bol znova priradený k celému číslu deväťdesiatdeväť (ako sú tlačidlá zbytočné). Na základe ktorých sú podmienky príkazu if-else splnené, dôjde k zodpovedajúcemu opätovnému priradeniu k zobrazeniu.

Krok 7: Aktivácia tlačidla Reštartovať

Spustenie tlačidla Reštartovať
Spustenie tlačidla Reštartovať

VYSVETLENIE:

Tento krok je najkratší. Väčšina práce na tomto kroku už bola vykonaná. Všetko, čo teraz budeme musieť urobiť, je vykonať metódu „reštart“vždy, keď používateľ klikne na tlačidlo reštartu.

V prvom rade vykonáme metódu "reštart" v metóde "proces" pomocou príkazu if-else. Ak reťazec "!" je zaregistrovaný, potom sa vykoná metóda „reštart“. Tiež budeme musieť vytvoriť tlačidlo s názvom reštart na konci metódy „setSLASHresetGUI“predtým, ako bude obsah mriežky zabalený dohromady. Toto tlačidlo reštartu spracuje reťazec "!" (príkaz lambda: self.process ("!")) a vykonajte zodpovedajúcu metódu "reštart" v rámci metódy "proces".

Odporúča: