Obsah:

Minesweeper-Raspberry-Pi-Edition: 7 kroků (s obrázky)
Minesweeper-Raspberry-Pi-Edition: 7 kroků (s obrázky)

Video: Minesweeper-Raspberry-Pi-Edition: 7 kroků (s obrázky)

Video: Minesweeper-Raspberry-Pi-Edition: 7 kroků (s obrázky)
Video: Things Mr. Welch is No Longer Allowed to do in a RPG #1-2450 Reading Compilation 2024, Listopad
Anonim
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition

Můj poslední projekt pro sérii CSC 130 na Louisiana Tech University je Minesweeper Raspberry Pi Edition. V tomto projektu jsem se pokusil znovu vytvořit klasickou hru minolovky pomocí knihovny Tkinter v programovacím jazyce Python. Mřížka, kterou hra minolovka zahrnuje, je osm dlaždic na šířku a pět dlaždic na výšku. Formátování projektu bylo vhodné a zdokonalené pro použití Raspberry Pi nainstalovaného s Pythonem 2.7.

Kód a obrázky pro finální projekt Minesweeper Raspberry Pi Edition si můžete stáhnout na následujícím odkazu:

Minesweeper-Raspberry-Pi-Edition

Zásoby

x1 Malina

Python 2.7 nainstalován na Raspberry Pi

Microsoft Powerpoint (nebo jiný software pro vytváření obrázků pro tlačítka)

Krok 1: Vytvořte obrázky tlačítek

Vytvářejte obrázky tlačítek
Vytvářejte obrázky tlačítek

VYSVĚTLENÍ:

Každé tlačítko, které tvoří GUI, bude nutné vytvořit. Pro tento úkol jsem použil Microsoft Powerpoint k vytvoření obrázků, které jsem potřeboval zobrazit na tlačítkách.

Nejprve jsem pomocí aplikace Microsoft Powerpoint vytvořil deset tlačítek dlaždic potřebných k vytvoření mřížky minolovky (prázdná, bobová, nulová, jedna, dvě, tři, čtyři, pět, šest, sedm a osm).

Za druhé, pomocí aplikace Microsoft Powerpoint jsem vytvořil čtyři obrázky potřebné pro obrazovku nabídky (zobrazení nabídky, tlačítko snadné obtížnosti, tlačítko střední obtížnosti a tlačítko těžké obtížnosti).

Za třetí jsem vytvořil obrázek potřebný pro tlačítko restartu a obrázky potřebné pro ostatní různá tlačítka zobrazení (zobrazení „game over“, zobrazení „you win“a „rules“) pomocí aplikace Microsoft Powerpoint.

Za čtvrté, budete muset změnit velikost obrázků, aby se vešly na obrazovku. U mého Rasberry Pi jsem pro okno použil následující rozměry (odkazující na pixely v délce a šířce): 432x576.

Krok 2: Formátování programu

Formátovat program
Formátovat program

VYSVĚTLENÍ:

Než může proběhnout jakékoli skutečné programování, musíme importovat potřebné knihovny a napsat hlavní část našeho programu.

Nejprve budeme muset importovat * z knihovny Tkinter a zamíchat z náhodné knihovny. Za druhé, budeme muset v hlavní části programu provést následující kroky v kódu: vytvořit okno, nastavit titulní okno, vygenerovat GUI a zobrazit GUI a čekat na interakci uživatele. Tento kód je napsán ve správném formátování s ohledem na knihovnu Tkinter (podívejte se na kód uvedený v instruktáži, abyste viděli správné formátování).

Krok 3: Vytvořte GUI (Menu & Minesweeper Grid)

Vytvořte GUI (Menu & Minesweeper Grid)
Vytvořte GUI (Menu & Minesweeper Grid)
Vytvořte GUI (Menu & Minesweeper Grid)
Vytvořte GUI (Menu & Minesweeper Grid)
Vytvořte GUI (Menu & Minesweeper Grid)
Vytvořte GUI (Menu & Minesweeper Grid)
Vytvořte GUI (Menu & Minesweeper Grid)
Vytvořte GUI (Menu & Minesweeper Grid)

VYSVĚTLENÍ:

Po spuštění programu se otevře obrazovka nabídky. Po zvolení obtížnosti (kliknutím na jedno z tlačítek obtížnosti na obrazovce nabídky) se GUI obnoví mřížkou minolovky, displejem a tlačítkem restartu. Vzhledem k tomu, že s grafickým uživatelským rozhraním teprve začínáte, budeme potřebovat pouze spuštění nabídky, uvedení do provozu tlačítek obtížnosti nabídky a obnovení grafického uživatelského rozhraní na herní obrazovku pomocí mřížky minolovky.

Nejprve můžeme nechat zobrazit obrazovku nabídky po spuštění programu voláním metody „setupMenu“v konstruktoru třídy MainGUI.

Za druhé, můžeme nechat každé z tlačítek obtížnosti nabídky spustit určité řádky kódu po kliknutí na něj přidáním metody „process“(bude také nutné přidat příkaz lambda: self.process („returnButtonName“) v parametrech použité funkce tlačítka při vytváření každého tlačítka obtížnosti). V metodě „process“budou vytvořeny tři příkazy if-else a provedou určité další metody a řádky dalšího kódu podle toho, co se tlačítko rovná (tlačítko se rovná jakémukoli názvu tlačítka, který byl naposledy zaregistrován).

Za třetí, když je obrazovka nabídky nahoře a pokud uživatel klikne na jedno z tlačítek obtížnosti, program uloží určitou hodnotu do proměnné „obtížnost“(obtížnost se rovná „snadné“, „střední“nebo „tvrdé“) na které tlačítko obtížnosti se klikne). Toto kliknutí na tlačítko ví, který příkaz if-else následovat podle toho, jaké jméno tlačítka bylo naposledy zaregistrováno (jaké tlačítko se rovná). Navíc k opětovnému přiřazení proměnné „obtížnost“budeme muset nejprve vytvořit instanci to mimo třídu. Proměnnou „obtížnost“tedy nastavíme jako prázdný řetězec před vytvořením třídy „MainGUI“.

Začtvrté, vymažte GUI tlačítek vytvořených metodou „setupMenu“vytvořením metody „clearMenu“(pomocí funkce button.destroy () ve více instancích) a voláním metody „clearMenu“v metodě „process“(pod každé tlačítko obtížnosti se zaregistruje po přiřazení proměnné obtížnosti).

Za páté, aktualizujte GUI vytvořením metody „setSLASHresetGUI“(tlačítka jsou vytvořena stejným způsobem jako v metodě „setupMenu“) a voláním metody „setSLASHresetGUI“v metodě „proces“(pod každým z tlačítek obtížnosti se registruje po obtížnost přiřazení proměnné a volání metody „clearMenu“).

Kromě toho, než jsou všechna tlačítka přiřazena v rámci metody „setSLASHresetGUI“, musíme nakonfigurovat řádky a sloupce v rámci mřížky a poté, co jsou všechna tlačítka přiřazena v rámci metody „setSLASHresetGUI“, musíme zabalit veškerý obsah v mřížce (podívejte se na kód uvedený v pokynu k zobrazení správného formátování).

Krok 4: Zprovozněte tlačítka na obrazovce ve hře

Aktivujte tlačítka na obrazovce ve hře
Aktivujte tlačítka na obrazovce ve hře
Aktivujte tlačítka na obrazovce ve hře
Aktivujte tlačítka na obrazovce ve hře
Aktivujte tlačítka na obrazovce ve hře
Aktivujte tlačítka na obrazovce ve hře
Aktivujte tlačítka na obrazovce ve hře
Aktivujte tlačítka na obrazovce ve hře

VYSVĚTLENÍ:

Aby tlačítka po kliknutí spustila určité řádky kódu, budeme muset spustit metody v rámci metody „process“. Pro tento úkol budeme muset vytvořit několik nových metod, proměnných a seznamů.

Nejprve vytvoříme dva seznamy. Bude existovat seznam s názvem „mřížka“. Tento seznam „mřížky“bude obsahovat pouze celá čísla 9 a 0. V tomto seznamu bude devítka představovat bomby a nuly budou představovat ne-bomby. Takto program rozlišuje, zda je dlaždice bomba nebo ne. Bude vytvořen druhý seznam, kterému se bude říkat „stav“. Tento seznam „status“se skládá pouze z jednoho řetězce znaků („0“, „1“, „2“, „3“, „4“, „5“, „6“, „7“, „8“, „b "). V tomto seznamu bude každý řetězec znaků odpovídat určitému obrázku. Program tak bude vědět, jaký obrázek se má zobrazit na každém tlačítku v mřížce minolovky. Každé tlačítko v mřížce minolovky bude mít v každém seznamu odpovídající index na základě jeho umístění v mřížce. Odpovídající rejstřík bude přiřazen následujícím postupem (číslo tlačítka - 1). Například odpovídající index každého tlačítka v každém seznamu je index nula. Nakonec budou tyto dva seznamy provedeny před spuštěním třídy „MainGUI“a budou vytvořeny mimo třídu „MainGUI“. Třída "grid" bude vytvořena jako prázdný seznam (grid = ) a seznam "status" bude vytvořen funkcí rozsahu (přidání čtyřiceti jednoznakových řetězců "n" do seznamu "status").

Za druhé, uděláme různé metody, které dokážou detekovat počet dolů, které jej obklopují, a které lze vyvolat po kliknutí na tlačítko (rozhodnutí o tom, která metoda by měla být provedena, bude určeno umístěním tlačítka). Právě těmto metodám budeme říkat naše minové analyzátory. Tyto metody zvýší počítadlo s názvem „NumOfMines“a pomocí určitých indexů v seznamu „mřížka“určí, kolik bomb obklopuje dlaždici. Řetězec, který bude uložen v proměnné „NumOfMines“, bude použit k nahrazení stejného odpovídajícího indexu v seznamu „status“. Nyní se můžete divit, jak program bude vědět, který index použít. Když je tlačítko zaregistrováno v metodě „process“, pak bude vytvořena/znovu přiřazena proměnná „index“k určitému celému číslu (podle toho, jaký řetězec tlačítko zaregistruje). Jedna z vytvořených metod použije přiřazený index, aby poznala umístění dlaždice a indexy dlaždic, které ji obklopují (algoritmus v rámci metody to zjistí). Navíc k opětovnému přiřazení proměnné „index“budeme muset nejprve vytvořit instanci mimo třídu. Před vytvořením třídy „MainGUI“tedy přednastavíme proměnnou „index“jako celočíselnou nulu.

Za třetí, budou vytvořeny metody „operace“. Metoda „operace“bude provedena pokaždé, když je tlačítko zaregistrováno. Tyto metody "operace" budou provedeny v metodě "proces". V metodě „proces“určí více příkazů if-else, na které tlačítko bylo kliknuto (podle toho, co se tlačítko rovná). Zde bude vyvolána určitá metoda „operace“(v příkazech if-else).

Začtvrté, ve skutečnosti se dostaneme k tomu, jak tlačítka fungují. Jak již bylo uvedeno dříve, v metodě „process“je umístěno více příkazů if-else a provádějí určité další metody a řádky dalšího kódu v závislosti na tom, co se tlačítko rovná (tlačítko se rovná jakémukoli řetězci, který byl naposledy zaregistrován). V rámci těchto příkazů if-else dojde k následujícímu pořadí: index bude přiřazen globálně, odpovídající index v seznamu „status“bude znovu přiřazen k řetězci „b“(pokud se odpovídající index seznamu „grid“rovná celé číslo devět), bude provedena odpovídající metoda „operace“(pokud se odpovídající index seznamu „mřížky“rovná nule celého čísla), příslušný index v seznamu „stav“bude znovu přiřazen k řetězci, který se rovná proměnné „NumOfMines“(pokud se odpovídající index seznamu „mřížky“rovná nule celého čísla) a grafické uživatelské rozhraní se obnoví voláním metody „setSLASHresetGUI“.

Krok 5: Metoda „setDifficulty“a metoda „restart“

obraz
obraz
obraz
obraz

VYSVĚTLENÍ:

Dále bude nutné vytvořit metodu „setDifficulty“a bude nutné zprovoznit tlačítko pro restart umístěné ve spodní části obrazovky ve hře (vytvořením metody „restart“, aby se spustila, když na ni uživatel klikne)).

Nejprve bude třeba implementovat metodu „setDifficulty“do příkazů if-else tlačítek obtížnosti v metodě „proces“a v metodě „restart“. Řádky kódu a metody prováděné touto metodou jsou celkem jednoduché. V metodě „setDifficulty“připojíme určité množství nul (ne-bomb) a devítek (bomb) do seznamu „grid“(prostřednictvím dvou funkcí rozsahu v každém příkazu if-else) a poté zamícháme seznam "mřížka" (s funkcí náhodného knihovny shuffle) v rámci metody "setDifficulty" (po provedení příkazů if-else). Poměr nul k devítkám bude určen podle toho, na jaký řetězec je proměnná „obtížnost“nastavena („snadné“: 34–6, „střední“: 28–12, „tvrdé“: 16–24).

Za druhé, v metodě „restart“nastavíme proměnné „index“a „NumOfMinesLEFT“globálně na nulu, globálně vyprázdníme seznamy „status“i „grid“, resetujeme seznam „status“pomocí funkce rozsahu (přidání čtyřicet jednobarevných řetězců „n“do seznamu „status“) a použijte metodu „setDifficulty“.

Krok 6: Scénáře končící hru

Scénáře končící hru
Scénáře končící hru
Scénáře končící hru
Scénáře končící hru
Scénáře končící hru
Scénáře končící hru
Scénáře končící hru
Scénáře končící hru

VYSVĚTLENÍ:

Každá hra s minolovkou má dva scénáře končící hru: výhra a prohra. V rámci tohoto programu implementujeme tyto dva scénáře končící hrou dvěma novými metodami: metodou „You_A_Winner_Son“a metodou „GameOver“. Předtím, než se GUI obnoví v rámci metody „process“a na základě indexů změněných dvěma metodami scénáře končících her, změní se tlačítko zobrazení, aby správně reprezentovalo výsledek.

Nejprve, když uživatel klikne na poslední skrytou dlaždici bez bomb, musí být spuštěna metoda „You_A_Winner_Son“. Tento úkol dokončíme zavoláním metody „You_A_Winner_Son“pokaždé, když kliknete na dlaždici a zjistíte, že dlaždice není dlaždicí bez bomb (v rámci metod „operace“prováděných metodou „proces“). Pokud jsou splněny výherní podmínky, budou provedeny dva příkazy if-else v rámci metody „You_A_Winner_Son“. První příkaz if-else bude vždy spuštěn bez ohledu na to, zda hráč vyhrál nebo ne, když je tato metoda vyvolána. Na základě toho, čemu se proměnná „obtížnost“rovná, určitý algoritmus, který určí, kolik min/bomb zůstalo skryto. Celé číslo nalezené tímto algoritmem bude uloženo do proměnné "NumOfMinesLEFT". Dále mezi těmito dvěma příkazy if-else bude proveden jiný algoritmus pro zjištění počtu zbývajících počátečních dlaždic (nekliknutých dlaždic). Celé číslo nalezené tímto algoritmem bude uloženo do proměnné "NumOfStartingTilesLEFT". Druhý příkaz if-else se vždy spustí bez ohledu na to, zda hráč vyhrál nebo ne, když je tato metoda vyvolána. Na základě toho, čemu se proměnná „obtížnost“rovná, lze provést jeden ze tří příkazů if-else, pokud jsou splněny jejich podmínky. Podmínky budou založeny na tom, čemu se rovnají dvě proměnné „NumOfMinesLEFT“a „NumOfStartingTilesLEFT“. V rámci těchto tří příkazů if-else bude spuštěn algoritmus, který učiní každé tlačítko zbytečným (hra je u konce).

Za druhé, když uživatel klikne na jednu ze skrytých dlaždic bomb, musí být spuštěna metoda „GameOver“. Tento úkol dokončíme zavoláním metody „GameOver“pokaždé, když kliknete na dlaždici a zjistíte, že je dlaždicí bomba (v rámci metod „operace“prováděných metodou „proces“). Když je vyvolána metoda „GameOver“, bude spuštěn algoritmus, který způsobí, že každá počáteční dlaždice bude k ničemu (hra skončí) a odhalí se skryté dlaždice bomb (na základě odpovídajících indexů v „seznamu mřížky, určité indexy“v seznamu „status“bude znovu přiřazen k jednoznakovému řetězci „b“).

Za třetí, zobrazení herní obrazovky bude aktualizováno pokaždé, když se GUI obnoví provedením velmi málo drobných úprav metody „setSLASHresetGUI“. Po konfiguraci mřížky grafického uživatelského rozhraní umístíme tři příkazy if-else do aktuálního přiřazení tlačítka zobrazení. Jeden ze tří příkazů if-else se spustí na základě toho, čemu se rovnají následující proměnné: „GameOverDETECTOR“, „obtížnost“, „NumOfMinesLEFT“a „NumOfStartingTilesLEFT“. Jak vás možná zajímá, proměnná „GameOverDETECTOR“je nová proměnná. Tato proměnná bude vytvořena těsně před provedením příkazů if-else v rámci metody "setSLASHresetGUI". Proměnná "GameOverDETECTOR" se bude rovnat celému číslu, které se najde pomocí algoritmu, který zjistí, kolik indexů v "mřížce" seznam byl znovu přiřazen k celému číslu devadesát devět (jak jsou tlačítka vykreslena jako zbytečná). Na základě toho, které podmínky příkazu if-else jsou splněny, dojde k odpovídajícímu opětovnému přiřazení k zobrazení.

Krok 7: Zprovoznění tlačítka Restart

Uvedení tlačítka Restart do provozu
Uvedení tlačítka Restart do provozu

VYSVĚTLENÍ:

Tento krok je shodou okolností nejkratší. Většina práce pro tento krok již byla provedena. Jediné, co teď budeme muset udělat, je provést metodu „restart“pokaždé, když uživatel klikne na tlačítko restartu.

Nejprve a nakonec provedeme metodu „restart“v metodě „proces“příkazem if-else. Pokud řetězec "!" je zaregistrován, pak bude provedena metoda „restart“. Také budeme muset na konci metody „setSLASHresetGUI“vytvořit tlačítko s názvem restart, než bude obsah mřížky zabalen dohromady. Toto tlačítko restartu zpracuje řetězec "!" (příkaz lambda: self.process ("!")) a proveďte odpovídající metodu "restart" v rámci metody "process".

Doporučuje: