INHOUDSOPGAWE:

Minesweeper-Framboos-Pi-uitgawe: 7 stappe (met foto's)
Minesweeper-Framboos-Pi-uitgawe: 7 stappe (met foto's)

Video: Minesweeper-Framboos-Pi-uitgawe: 7 stappe (met foto's)

Video: Minesweeper-Framboos-Pi-uitgawe: 7 stappe (met foto's)
Video: SCP-261 Пан-мерное Торговый и эксперимент Войти 261 объявление Де + полный + 2024, Julie
Anonim
Mynveger-Framboos-Pi-uitgawe
Mynveger-Framboos-Pi-uitgawe
Mynveger-Framboos-Pi-uitgawe
Mynveger-Framboos-Pi-uitgawe

My laaste projek vir die CSC 130 -reeks aan die Louisiana Tech University is die Minesweeper Raspberry Pi Edition. In hierdie projek het ek probeer om die klassieke spel van myneveër te herskep deur die Tkinter -biblioteek van die Python -programmeertaal te gebruik. Die rooster wat die myneveërspel insluit, is agt teëls in breedte en vyf teëls in hoogte. Die opmaak van die projek is geskik en vervolmaak vir die gebruik van 'n Raspberry Pi geïnstalleer met Python 2.7.

Die kode en beelde vir die Minesweeper Raspberry Pi Edition se finale projek kan afgelaai word op die volgende skakel:

Mynveger-Framboos-Pi-uitgawe

Voorrade

x1 Framboos Pi

Python 2.7 geïnstalleer op die Raspberry Pi

Microsoft Powerpoint (of 'n ander sagteware om beelde vir knoppies te skep)

Stap 1: Skep knoppiebeelde

Skep knoppiebeelde
Skep knoppiebeelde

VERDUIDELIKING:

Elke knoppie waaruit die GUI bestaan, moet geskep word. Vir hierdie taak het ek Microsoft Powerpoint gebruik om die beelde te maak wat ek op die knoppies moes vertoon.

Eerstens het ek die tien teëlknoppies gemaak wat nodig is om die mynveërrooster (leeg, bob, nul, een, twee, drie, vier, vyf, ses, sewe en agt) met Microsoft Powerpoint te maak.

Tweedens het ek die vier beelde gemaak wat nodig is vir die spyskaart (spyskaartweergawe, knoppie vir maklike probleme, knoppie vir medium probleme en knoppies vir moeilike probleme) met behulp van Microsoft Powerpoint.

Derdens het ek die beeld geskep wat nodig is vir die herbegin -knoppie en die beelde wat nodig is vir die ander verskillende knoppies ('n "game over" -skerm, 'n "jy wen" -skerm en 'n "reëls" -vertoning) met behulp van Microsoft Powerpoint.

In die vierde plek moet u die grootte van u beelde verander sodat dit binne u skerm pas. Vir my Rasberry Pi het ek die volgende afmetings vir die venster gebruik (verwysend na pixels in lengte en breedte): 432x576.

Stap 2: Formateer program

Formateer program
Formateer program

VERDUIDELIKING:

Voordat 'n werklike programmering kan plaasvind, moet ons die biblioteke wat ons benodig invoer en die grootste deel van ons program skryf.

Eerstens moet ons * uit die Tkinter -biblioteek invoer en uit die ewekansige biblioteek skuifel. Tweedens moet ons die volgende stappe in kode binne die hoofdeel van die program voltooi: skep die venster, stel die titelvenster in, genereer die GUI en vertoon die GUI en wag vir gebruikersinteraksie. Hierdie kode is in die regte opmaak geskryf ten opsigte van die Tkinter -biblioteek (kyk na die kode wat in die instruksies gegee word om die korrekte opmaak te sien).

Stap 3: Skep die GUI (Menu & Minesweeper Grid)

Skep die GUI (Menu & Minesweeper Grid)
Skep die GUI (Menu & Minesweeper Grid)
Skep die GUI (Menu & Minesweeper Grid)
Skep die GUI (Menu & Minesweeper Grid)
Skep die GUI (Menu & Minesweeper Grid)
Skep die GUI (Menu & Minesweeper Grid)
Skep die GUI (Menu & Minesweeper Grid)
Skep die GUI (Menu & Minesweeper Grid)

VERDUIDELIKING:

By die aanvang van die program word die spyskaart oopgemaak. Nadat die moeilikheidsgraad gekies is (deur op een van die moeilikheidsknoppies op die menu -skerm te klik), word die GUI verfris met die myneveër -rooster, 'n skerm en 'n herstartknoppie. Aangesien u eers aan die GUI begin werk het, hoef ons net die spyskaart te laat begin, die knoppies vir die spyskaartprobleme in werking te stel en die GUI na die spelskerm te verfris met die myneveër -rooster.

Eerstens kan ons die spyskaart by die aanvang van die program laat sien deur die "setupMenu" -metode binne die konstruktor van die MainGUI -klas te noem.

Tweedens kan ons elkeen van die spyskaarte se moeilikheidsknoppies sekere reëls kode laat uitvoer wanneer daar op hulle geklik word deur 'n "proses" metode by te voeg (sal ook die opdrag lambda: self.process ("returnButtonName") moet byvoeg binne die parameters van die knoppie funksie wat gebruik word by die maak van elke moeilikheidsknoppie). Drie if-else-stellings sal in die 'proses'-metode geskep word en sekere ander metodes en reëls van bykomende kode uitvoer, afhangende van wat die knoppie gelyk is (knoppie is gelyk aan die knoppie se naam wat laas geregistreer is).

Derdens, terwyl die spyskaart oop is en as die gebruiker op een van die moeilikheidsknoppies klik, sal die program 'n sekere waarde stoor in die 'moeilikheidsveranderlike' (moeilikheidsgraad is gelyk aan 'maklik', 'medium' of 'hard' gebaseer) uit watter moeilikheidsknoppie geklik word). Met hierdie klik op 'n knoppie kan u weet watter as-anders-verklaring gevolg moet word op grond van die knoppie se naam wat laas geregistreer is (watter knoppie gelyk is). Boonop moet ons eers die veranderlikheid "moeilikheid" toewys Dit sal dus buite die klas plaas. Ons sal dus die veranderlikheid 'moeilikheid' as 'n leë string stel voordat die 'MainGUI' klas geskep word.

Vierdens, maak die GUI skoon van die knoppies wat deur die "setupMenu" -metode gemaak word deur 'n "clearMenu" -metode te maak (met behulp van die button.destroy () -funksie in verskeie gevalle) en noem die "clearMenu" -metode in die "proses" -metode (onder elkeen van die moeilikheidsknoppies registreer na die moeilikheidsveranderlike opdrag).

In die vyfde plek, verfris die GUI deur 'n "setSLASHresetGUI" -metode te maak (knoppies word op dieselfde manier gemaak as in die "setupMenu" -metode) en skakel die "setSLASHresetGUI" -metode in die "proses" -metode (onder elk van die moeilikheidsknoppie -registers na die moeilikheidsveranderlike opdrag en noem die "clearMenu" -metode).

Boonop moet ons die rye en kolomme binne die rooster opstel voordat alle knoppies toegeken word volgens die 'setSLASHresetGUI' -metode, en nadat al die knoppies binne die' setSLASHresetGUI 'metode toegewys is, moet ons al die inhoud binne die rooster verpak (kyk na die kode gegee in die instruksies om die korrekte opmaak te sien).

Stap 4: Maak die knoppies op die skerm in die spel in werking

Maak die knoppies op die skerm in die spel in werking
Maak die knoppies op die skerm in die spel in werking
Maak die knoppies op die skerm in die spel in werking
Maak die knoppies op die skerm in die spel in werking
Maak die knoppies op die skerm in die spel in werking
Maak die knoppies op die skerm in die spel in werking
Maak die knoppies op die skerm in die spel in werking
Maak die knoppies op die skerm in die spel in werking

VERDUIDELIKING:

Om die knoppies sekere reëls kode uit te voer as daar geklik word, sal ons metodes moet uitvoer binne die 'proses' -metode. Vir hierdie taak sal ons verskeie nuwe metodes, veranderlikes en lyste moet maak.

Eerstens maak ons twee lyste. Daar sal 'n lys met die naam "rooster" verskyn. Hierdie "rooster" -lys sal slegs uit die heelgetalle 9 en 0. bestaan. In hierdie lys sal nege bomme verteenwoordig, en nulle sal nie-bomme verteenwoordig. Dit is hoe die program sal onderskei of 'n teël 'n bom is of nie. 'N Tweede lys sal gemaak word, en dit sal' status 'genoem word. Hierdie 'status' -lys bestaan uit slegs een tekenreeks (' 0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' b "). In hierdie lys sal elke tekenreeks ooreenstem met 'n sekere beeld. Dit is hoe die program sal weet watter prent op elke knoppie in die rooster van die mynveër vertoon moet word. Elke knoppie in die mynveër -rooster het 'n ooreenstemmende indeks in elke lys, gebaseer op die plasing daarvan in die rooster. Die ooreenstemmende indeks word toegeken deur die volgende prosedure (knoppie nommer - 1). Byvoorbeeld, die ooreenstemmende indeks in elke lys is indeksnul. Laastens sal hierdie twee lyste uitgevoer word voordat die 'MainGUI' klas uitgevoer word en buite die 'MainGUI' klas gemaak word. Die "rooster" -klas sal as 'n leë lys (rooster = ) geskep word, en die 'status' -lys sal deur 'n reeks funksie geskep word (die byvoeging van veertig enkele tekenreëls "n" by die "status" -lys).

Tweedens sal ons verskillende metodes maak om die aantal myne wat dit omring, op te spoor en waarop 'n knoppie geklik kan word (die besluit van watter metode wat uitgevoer moet word, word bepaal deur die plasing van die knoppie). Hierdie metode word ons mynontleders genoem. Hierdie metodes verhoog 'n toonbank met die naam "NumOfMines" en sal sekere indekse in die "rooster" -lys gebruik om te bepaal hoeveel bomme die teël omring. Die string wat binne die veranderlike 'NumOfMines' gestoor word, sal gebruik word om dieselfde ooreenstemmende indeks in die 'status' lys te vervang. Nou wonder u miskien hoe die program sal weet watter indeks u moet gebruik. As 'n knoppie geregistreer is in die 'proses' -metode, word 'n veranderlike' indeks 'geskep/toegewys aan 'n sekere heelgetal (gebaseer op watter string die knoppie registreer). Een van die geskepte metodes sal die toegewysde indeks gebruik om die plasing van die teël en die indekse van die teëls wat dit omring te ken (algoritme in die metode sal dit uitvind). Om die veranderlike "indeks" weer toe te ken, moet ons dit eers buite die klas installeer. Ons stel dus die 'indeks' -veranderlike vooraf as die heelgetal nul voordat die' MainGUI 'klas geskep word.

Derdens sal 'operasie' -metodes geskep word. Elke keer as 'n knoppie geregistreer word, word 'n "operasie" metode uitgevoer. Hierdie "operasie" metodes sal uitgevoer word in die "proses" metode. In die 'proses'-metode, sal veelvoudige if-else-stellings bepaal op watter knoppie geklik is (gebaseer op wat die knoppie gelyk is). Dit is waar 'n sekere 'operasie'-metode (in die if-else-stellings) aangewend sal word.

In die vierde plek gaan ons in op die manier waarop die knoppies funksioneer. Soos voorheen gesê, is verskeie as-anders-stellings in die "proses" -metode geleë en voer sekere ander metodes en reëls van bykomende kode uit, afhangende van wat die knoppie gelyk is (knoppie is gelyk aan die string wat laas geregistreer is). Binne hierdie if-else-stellings sal die volgende in volgorde plaasvind: indeks word wêreldwyd toegewys, die ooreenstemmende indeks in die 'status'-lys word weer toegewys aan die string' b '(as die ooreenstemmende indeks van die' rooster 'lys gelyk is die heelgetal nege), word 'n ooreenstemmende "bewerkings" metode uitgevoer (as die ooreenstemmende indeks van die "rooster" lys gelyk is aan die heelgetal nul), word die ooreenstemmende indeks in die "status" lys toegewys aan 'n string wat gelyk is aan die veranderlike "NumOfMines" (as die ooreenstemmende indeks van die "rooster" lys gelyk is aan die heelgetal nul), en die GUI sal verfris word deur die "setSLASHresetGUI" metode te noem.

Stap 5: Metode "stel probleme" en metode "herbegin"

Beeld
Beeld
Beeld
Beeld

VERDUIDELIKING:

Vervolgens moet 'n 'setDif moeilikheid'-metode geskep word en die herlaai-knoppie onderaan die spelskerm moet funksioneer (deur 'n' herstart'-metode te skep om dit uit te voer wanneer dit deur die gebruiker geklik word).

Eerstens moet die "setDif moeilikheid" -metode geïmplementeer word in die if-else-stellings van die moeilikheidsknoppies in die "proses" -metode en in die "herlaai" -metode. Die kode lyne en metodes wat in hierdie metode uitgevoer word, is redelik eenvoudig. In die "setDif moeilikheid" -metode voeg ons 'n sekere hoeveelheid nulle (nie-bomme) en nege (bomme) by die "rooster" -lys (via twee reeksfunksies binne elke if-else-stelling), en dan skommel ons die "rooster" lys (met die willekeurige biblioteek se skuifel funksie) binne die "setDif moeilike" metode (nadat die if-else state uitgevoer is). Die verhouding van nulle tot nege sal bepaal word deur watter string die veranderlike 'moeilikheid' gestel is ('maklik': 34-6, 'medium': 28-12, 'hard': 16-24).

Tweedens, in die 'herbegin' -metode stel ons die veranderlikes' indeks 'en' NumOfMinesLEFT 'wêreldwyd op nul, maak die' status'- en 'rooster' -lyste wêreldwyd leeg, herstel die' status' -lys met 'n reeks funksie (voeg by veertig enkele tekenreëls van "n" na die "status" -lys), en doen 'n beroep op die "stel moeilikheid" -metode.

Stap 6: Scenario's met 'n einde aan speletjies

Scenario's wat eindig met speletjies
Scenario's wat eindig met speletjies
Scenario's wat eindig met speletjies
Scenario's wat eindig met speletjies
Scenario's wat eindig met speletjies
Scenario's wat eindig met speletjies
Scenario's wat eindig met speletjies
Scenario's wat eindig met speletjies

VERDUIDELIKING:

Elke myneveër-wedstryd het twee scenario's: die wen en die verlies. Binne hierdie program implementeer ons hierdie twee spel-eindige scenario's met twee nuwe metodes: 'n "You_A_Winner_Son" metode en 'n "GameOver" metode. Voordat die GUI binne die 'proses'-metode verfris word en gebaseer is op die indekse wat deur die twee scenario-metodes vir die einde van die spel verander word, sal die vertoonknoppie verander word om die uitkoms behoorlik weer te gee.

As die gebruiker eers op die laaste verborge nie-bomteël klik, moet die metode "You_A_Winner_Son" uitgevoer word. Ons sal hierdie taak voltooi deur die "You_A_Winner_Son" -metode te gebruik elke keer as daar op 'n teël geklik word en die teël 'n nie-bomteël is (binne die "operasie" -metodes wat uitgevoer word in die "proses" -metode). As aan die wenvoorwaardes voldoen word, word twee as-anders-stellings binne die 'You_A_Winner_Son'-metode uitgevoer. Die eerste if-else-stelling sal altyd uitgevoer word, ongeag of die speler gewen het of nie, as hierdie metode gebruik word. Op grond van wat die veranderlike 'moeilikheid' is, 'n sekere algoritme wat bepaal hoeveel myne/bomme versteek bly. Die heelgetal wat deur hierdie algoritme gevind word, sal in die veranderlike "NumOfMinesLEFT" gestoor word. 'N Ander algoritme sal dan tussen die twee if-else-stellings uitgevoer word om die aantal beginteëls te vind (ongeklikte teëls). Die heelgetal wat deur hierdie algoritme gevind word, word gestoor in die veranderlike "NumOfStartingTilesLEFT". Die tweede if-else-stelling sal altyd uitgevoer word, ongeag of die speler gewen het of nie wanneer hierdie metode gebruik word. Op grond van wat die veranderlike 'moeilikheid' gelyk is, kan een van drie as-anders-stellings uitgevoer word as daar aan hul voorwaardes voldoen word. Die voorwaardes sal gebaseer wees op wat die twee veranderlikes "NumOfMinesLEFT" en "NumOfStartingTilesLEFT" gelyk is aan. Binne hierdie drie if-else-stellings word 'n algoritme uitgevoer wat elke knoppie nutteloos maak (die spel is verby).

Tweedens, as die gebruiker op een van die verborge bomteëls klik, moet die "GameOver" -metode uitgevoer word. Ons sal hierdie taak voltooi deur die "GameOver" -metode te gebruik elke keer as op 'n teël geklik word en die teël 'n bomteël is (binne die "operasie" -metodes wat uitgevoer word in die "proses" -metode). As die "GameOver" -metode gebruik word, word 'n algoritme uitgevoer wat elke beginteël nutteloos maak (die spel is verby) en die verborge bomteëls onthul word (gebaseer op die ooreenstemmende indekse in die "roosterlys, sekere indekse in die 'status'-lys word weer toegewys aan die string met 'n enkele karakter' b ').

Ten derde sal die vertoning van die spelskerm bygewerk word elke keer as die GUI opgedateer word deur baie min klein wysigings aan die "setSLASHresetGUI" -metode te maak. Nadat die rooster van die GUI gekonfigureer is, plaas ons drie if-else-stellings waar die huidige toewysing van die knoppie geplaas word. Een van die drie if-else-stellings sal uitgevoer word op grond waarvan die volgende veranderlikes gelyk is: "GameOverDETECTOR", "moeilikheidsgraad", "NumOfMinesLEFT" en "NumOfStartingTilesLEFT". Soos u dalk wonder, is die veranderlike "GameOverDETECTOR" 'n nuwe veranderlike. Hierdie veranderlike sal geskep word net voor die if-else-stellings uitgevoer word binne die "setSLASHresetGUI" -metode. Die veranderlike "GameOverDETECTOR" is gelyk aan die heelgetal wat gevind word met behulp van 'n algoritme wat bepaal hoeveel indekse binne die "rooster" is Die lys is weer toegewys aan die heelgetal nege en negentig (hoe die knoppies nutteloos gemaak word). Op grond waarvan aan die voorwaardes van die if-else-stelling voldoen word, sal 'n ooreenstemmende hertoewysing na die skerm plaasvind.

Stap 7: maak die herstartknoppie funksioneel

Maak die herstartknoppie funksioneel
Maak die herstartknoppie funksioneel

VERDUIDELIKING:

Hierdie stap is toevallig die kortste. Die meeste werk vir hierdie stap is reeds gedoen. Al wat ons nou hoef te doen, is om die "herbegin" -metode uit te voer elke keer as die gebruiker op die herbegin -knoppie klik.

Eerstens en laastens voer ons die 'herbegin'-metode uit in die' proses'-metode met 'n if-else-verklaring. As die string "!" geregistreer is, word die 'herbegin' -metode uitgevoer. Ons sal ook 'n knoppie genaamd aan die einde van die "setSLASHresetGUI" -metode moet skep voordat die inhoud van die rooster saamgevoeg word. Hierdie herbegin -knoppie verwerk die string "!" (beveel lambda: self.process ("!")) en voer die ooreenstemmende "herlaai" -metode uit binne die "proses" -metode.

Aanbeveel: