Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Lag knappebilder
- Trinn 2: Formater program
- Trinn 3: Lag GUI (Menu & Minesweeper Grid)
- Trinn 4: Gjør knappene på skjermen i spillet operative
- Trinn 5: "setDifblemy" -metode og "restart" -metode
- Trinn 6: Spillavslutningsscenarier
- Trinn 7: Gjør omstartsknappen operativ
Video: Minesveiper-Raspberry-Pi-utgave: 7 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Mitt siste prosjekt for CSC 130 -serien ved Louisiana Tech University er Minesweeper Raspberry Pi Edition. I dette prosjektet søkte jeg å gjenskape det klassiske spillet minesveiper ved å bruke Tkinter -biblioteket til Python -programmeringsspråket. Rutenettet som minesveiper -spillet omfatter er åtte fliser i bredden og fem fliser i høyden. Formateringen av prosjektet har blitt tilpasset og perfeksjonert for bruk av en Raspberry Pi installert med Python 2.7.
Koden og bildene for Minesweeper Raspberry Pi Edition -prosjektet kan lastes ned på følgende lenke:
Minesveiper-Bringebær-Pi-utgave
Rekvisita
x1 Raspberry Pi
Python 2.7 installert på Raspberry Pi
Microsoft Powerpoint (eller annen programvare for å lage bilder for knapper)
Trinn 1: Lag knappebilder
FORKLARING:
Hver knapp som utgjør GUI må opprettes. For denne oppgaven brukte jeg Microsoft Powerpoint til å lage bildene jeg trengte å vise på knappene.
Først opprettet jeg de ti flisknappene som trengs for å lage minesveiperutenettet (tomt, bob, null, en, to, tre, fire, fem, seks, syv og åtte) ved hjelp av Microsoft Powerpoint.
For det andre lagde jeg de fire bildene som trengs for menyskjermen (menydisplay, lett vanskelighets -knapp, knapp for middels vanskelighet og knapp for vanskelig vanskelighet) ved hjelp av Microsoft Powerpoint.
For det tredje opprettet jeg bildet som trengs for omstartsknappen og bildene som trengs for de andre forskjellige skjermknappene (en "game over" -skjerm, en "du vinner" -skjerm og en "regler" -visning) ved hjelp av Microsoft Powerpoint.
For det fjerde må du endre størrelsen på bildene slik at de passer inn på skjermen. For min Rasberry Pi brukte jeg følgende dimensjoner for vinduet (refererer til piksler i lengde og bredde): 432x576.
Trinn 2: Formater program
FORKLARING:
Før noen egentlig programmering kan finne sted, må vi importere bibliotekene vi trenger og skrive hoveddelen av programmet vårt.
Først må vi importere * fra Tkinter -biblioteket og blande fra tilfeldig bibliotek. For det andre må vi fullføre følgende trinn i kode i hoveddelen av programmet: lag vinduet, sett tittelvinduet, generer GUI, og vis GUI og vent på brukerinteraksjon. Denne koden er skrevet i riktig formatering i forhold til Tkinter -biblioteket (se på koden som er gitt i instruksjonene for å se riktig formatering).
Trinn 3: Lag GUI (Menu & Minesweeper Grid)
FORKLARING:
Ved oppstart av programmet skal menyskjermen startes. Etter at vanskeligheten er valgt (ved å klikke på en av vanskelighetsknappene på menyskjermen), skal GUI oppdateres med minesveiperutenettet, et display og en omstartsknapp. Siden du bare har begynt å jobbe med GUI, trenger vi bare å få menyen til å starte, få knappene for menyproblemer til å fungere, og få GUI til å oppdatere spillskjermen med minesveiperutenettet.
Først kan vi få menyskjermen til å vise seg selv ved oppstart av programmet ved å kalle "setupMenu" -metoden i konstruktøren av MainGUI -klassen.
For det andre kan vi få hver av menyens vanskelighets -knapper til å utføre visse kodelinjer når de klikkes ved å legge til en "prosess" -metode (må også legge til kommando lambda: self.process ("returnButtonName") innenfor parameterne til knappfunksjonen som brukes ved opprettelsen av hver vanskelighetsknapp). Tre if-else-setninger vil bli opprettet i "prosess" -metoden og utføre visse andre metoder og linjer med tilleggskode avhengig av hva knappen er lik (knappen er lik uansett hvilken knappnavn som sist ble registrert).
For det tredje, mens menyskjermen er oppe og hvis brukeren klikker på en av vanskelighetsknappene, vil programmet lagre en viss verdi i variabelen "vanskelighetsgrad" (vanskeligheten er lik "lett", "middels" eller "hard" basert av hvilken vanskelighetsgradsknapp det klikkes på). Dette klikket på en knapp vet hvilken if-else-setning som skal følges basert på hvilket knappnavn som sist ble registrert (hvilken knapp er lik). I tillegg må vi først tildele variabelen "vanskelighetsgrad" først den skal settes utenfor klassen. Så vi vil sette variabelen "vanskelighetsgrad" som en tom streng før "MainGUI" -klassen opprettes.
For det fjerde, fjern GUI for knappene som er laget av "setupMenu" -metoden ved å lage en "clearMenu" -metode (ved hjelp av funksjonen button.destroy () i flere forekomster) og kall "clearMenu" -metoden i "prosess" -metoden (under hver av vanskelighets -knappen registrerer seg etter vanskelighetsvariabeloppgaven).
For det femte, oppdater GUI -en ved å lage en "setSLASHresetGUI" -metode (knappene er laget på samme måte som i "setupMenu" -metoden) og ring "setSLASHresetGUI" -metoden i "prosess" -metoden (under hver av vanskelighetsknappene registreres etter vanskelighetsgrad variabel tildeling og kaller "clearMenu" -metoden).
I tillegg må vi pakke alt innholdet i rutenettet før alle knappene er tilordnet innenfor "setSLASHresetGUI" -metoden, og etter at alle knappene er tilordnet innenfor "setSLASHresetGUI" -metoden, må vi pakke alt innholdet i rutenettet (se på koden gitt i instruksjonsboken for å se riktig formatering).
Trinn 4: Gjør knappene på skjermen i spillet operative
FORKLARING:
For å få knappene til å utføre visse kodelinjer når de klikkes, må vi utføre metoder innenfor "prosess" -metoden. For denne oppgaven må vi lage flere nye metoder, variabler og lister.
Først skal vi lage to lister. Det vil være en liste som heter "grid". Denne "grid" -listen vil bare bestå av heltallene 9 og 0. I denne listen vil ni representere bomber, og nuller vil representere ikke-bomber. Slik vil programmet skille om en flis er en bombe eller ikke. En annen liste vil bli laget, og den vil bli kalt "status". Denne "status" -listen består av bare én tegnstrenge ("0", "1", "2", "3", "4", "5", "6", "7", "8", "b "). I denne listen vil hver tegnstreng svare til et bestemt bilde. Slik vet programmet hvilket bilde som skal vises på hver knapp i minesveiperutenettet. Hver knapp i minesveiperettet vil ha en tilsvarende indeks i hver liste basert på plasseringen i rutenettet. Den tilsvarende indeksen vil bli tilordnet ved følgende prosedyre (knappnummer - 1). For eksempel er knappens tilsvarende indeks i hver liste indeksnull. Til slutt vil disse to listene bli utført før "MainGUI" -klassen kjøres og vil bli opprettet utenfor "MainGUI" -klassen. "Rutenett" -klassen vil bli opprettet som en tom liste (rutenett = ) og "status" -listen vil bli opprettet av en rekkeviddefunksjon (legge til førti enkelt tegnstrenger med "n" til "status" -listen).
For det andre vil vi lage forskjellige metoder som kan oppdage antall miner som omgir den, og som kan kalles på når en knapp klikkes (avgjørelsen av hvilken metode som skal utføres, bestemmes av plasseringen av knappen). Nettopp disse metodene vil bli kalt våre gruve -analysatorer. Disse metodene vil øke en teller som kalles "NumOfMines" og vil bruke visse indekser i "rutenett" -listen for å bestemme hvor mange bomber som omgir flisen. Strengen som vil bli lagret i variabelen "NumOfMines" vil bli brukt til å erstatte den samme tilsvarende indeksen i "status" -listen. Nå kan du lure på hvordan programmet vet hvilken indeks du skal bruke. Når en knapp er registrert i "prosess" -metoden, vil en variabel "indeks" bli opprettet/tildelt til et bestemt heltall (basert på hvilken streng knappen registrerer). En av metodene som er opprettet, vil bruke den tildelte indeksen for å vite plasseringen av flisen og indeksene til flisene som omgir den (algoritmen i metoden vil finne ut dette). I tillegg, for å tilordne "indeks" -variabelen igjen, må vi først instansere den utenfor klassen. Så vi vil forhåndsinnstille "indeks" -variabelen som heltall null før "MainGUI" -klassen opprettes.
For det tredje vil "operasjons" metoder bli opprettet. En "operasjons" -metode vil bli utført hver gang en knapp registreres. Disse "operasjons" metodene vil bli utført i "prosess" metoden. I "prosess" -metoden vil flere if-else-setninger avgjøre hvilken knapp det ble klikket på (basert på hva knappen er lik). Det er her en bestemt "operasjons" -metode vil bli påkalt (i if-else-setningene).
For det fjerde vil vi faktisk komme inn på hvordan knappene blir operative. Som nevnt tidligere er flere if-else-setninger lokalisert i "prosess" -metoden og utfører visse andre metoder og linjer med tilleggskode avhengig av hva knappen er lik (knappen er lik uansett hvilken streng det var som sist ble registrert). Innen disse if-else-setningene vil følgende skje i rekkefølge: indeks vil bli tildelt globalt, den tilsvarende indeksen i "status" -listen vil bli tildelt strengen "b" på nytt (hvis den tilsvarende indeksen i "rutenett" -listen er lik heltallet ni), vil en tilsvarende "operasjons" -metode bli utført (hvis den tilsvarende indeksen i "rutenett" -listen er lik heltallet null), vil den tilsvarende indeksen i "status" -listen bli tildelt en streng som er lik variabelen "NumOfMines" (hvis den tilsvarende indeksen for "grid" -listen er lik heltallet null), og GUI -en vil bli oppdatert ved å kalle metoden "setSLASHresetGUI".
Trinn 5: "setDifblemy" -metode og "restart" -metode
FORKLARING:
Deretter må du opprette en "setDif vanskelighets" -metode, og omstartsknappen nederst på skjermen i spillet må bli operativ (ved å opprette en "omstart" -metode for å kjøre den når den klikkes av brukeren).
Først må metoden "setDifidity" implementeres i if-else-setningene til vanskelighets-knappene i "prosess" -metoden og i "omstart" -metoden. Kodelinjene og metodene som er utført i denne metoden er ganske enkle. I metoden "sett vanskeligheter" vil vi legge til en viss mengde nuller (ikke-bomber) og ni (bomber) til "rutenett" -listen (via to områdefunksjoner i hver if-else-setning), og deretter blander vi "grid" -liste (med det tilfeldige bibliotekets blandingsfunksjon) innenfor "setDif vanskelighets" -metoden (etter at if-else-setningene er utført). Forholdet mellom nuller og ni vil bli bestemt av hvilken streng variabelen "vanskelighetsgrad" er satt til ("lett": 34-6, "middels": 28-12, "hard": 16-24).
For det andre vil vi i "omstart" -metoden sette variablene "indeks" og "NumOfMinesLEFT" til null globalt, tømme både "status" og "rutenett" -listene globalt, tilbakestille "status" -listen med en rekkeviddefunksjon (legge til førti enkelttegnsstrenger med "n" til "status" -listen), og kaller på "sett med vanskelighetsgraden" -metoden.
Trinn 6: Spillavslutningsscenarier
FORKLARING:
Hvert minesveiper-spill har to scenarier som slutter på spillet: seier og tap. I dette programmet vil vi implementere disse to spillavslutningsscenariene med to nye metoder: en "You_A_Winner_Son" -metode og en "GameOver" -metode. Før GUI oppdateres i "prosess" -metoden og basert på indeksene som er endret av de to metodene som avsluttes med spillet, vil visningsknappen endres for å representere resultatet på riktig måte.
Først når brukeren klikker på den siste skjulte ikke-bombeflisen, må metoden "You_A_Winner_Son" utføres. Vi vil fullføre denne oppgaven ved å benytte "You_A_Winner_Son" -metoden hver gang det klikkes på en flis og det er funnet at flisen er en ikke-bombeflate (innenfor "operasjons" -metodene som utføres i "prosess" -metoden). Hvis vinnervilkårene er oppfylt, vil to if-else-utsagn i "You_A_Winner_Son" -metoden bli utført. Den første if-else-setningen vil alltid utføres uavhengig av om spilleren vant eller ikke når denne metoden ble benyttet. Basert på hva variabelen "vanskelighetsgrad" er lik, en viss algoritme som vil bestemme hvor mange gruver/bomber som er igjen skjult. Heltallet som blir funnet av denne algoritmen vil bli lagret i variabelen "NumOfMinesLEFT". Deretter vil en annen algoritme bli utført mellom de to if-else-setningene for å finne antall startfliser som er igjen (ubrikke). Heltallet som blir funnet av denne algoritmen vil bli lagret i variabelen "NumOfStartingTilesLEFT". Den andre if-else-setningen vil alltid utføres uavhengig av om spilleren vant eller ikke når denne metoden brukes. Basert på hva variabelen "vanskelighetsgrad" er lik, kan en av tre if-else-utsagn utføres hvis betingelsene er oppfylt. Betingelsene vil være basert på hva de to variablene "NumOfMinesLEFT" og "NumOfStartingTilesLEFT" er lik. Innen disse tre if-else-setningene vil det bli utført en algoritme som gjør hver knapp ubrukelig (spillet er over).
For det andre, når brukeren klikker på en av de skjulte bombeflisene, må "GameOver" -metoden utføres. Vi vil fullføre denne oppgaven ved å benytte "GameOver" -metoden hver gang det klikkes på en flis og det er funnet at flisen er en bombeflate (innenfor "operasjons" -metodene som utføres i "prosess" -metoden). Når "GameOver" -metoden brukes, vil en algoritme bli utført som vil gjøre hver startflis ubrukelig (spillet er over), og de skjulte bombeflisene vil bli avslørt (basert på de tilsvarende indeksene i "rutenettlisten, visse indekser i "status" -listen vil bli tilordnet entegnsstrengen "b") på nytt.
For det tredje vil visningen av skjermen i spillet oppdateres hver gang GUI-en oppdateres ved å gjøre svært få mindre endringer i metoden "setSLASHresetGUI". Etter at rutenettet til GUI er konfigurert, plasserer vi tre if-else-setninger der gjeldende displayknapptilordning er plassert. En av de tre if-else-setningene vil utføres basert på hva følgende variabler er lik: "GameOverDETECTOR", "vanskeligheter", "NumOfMinesLEFT" og "NumOfStartingTilesLEFT". Som du kanskje lurer på, er variabelen "GameOverDETECTOR" en ny variabel. Denne variabelen vil bli opprettet rett før if-else-setningene utføres i metoden "setSLASHresetGUI". Variabelen "GameOverDETECTOR" vil være lik heltallet som blir funnet ved hjelp av en algoritme som finner hvor mange indekser i "rutenettet" list har tilordnet nytt til heltallet nittini (hvordan knappene blir ubrukelige). Basert på om if-else-setningens betingelser er oppfylt, vil en tilsvarende tilordning til displayet skje.
Trinn 7: Gjør omstartsknappen operativ
FORKLARING:
Dette trinnet er tilfeldigvis det korteste. Det meste av arbeidet for dette trinnet er allerede utført. Alt vi trenger å gjøre nå er å utføre "restart" -metoden hver gang brukeren klikker på knappen restart.
Først og sist vil vi utføre metoden "omstart" i "prosess" -metoden med en if-else-setning. Hvis strengen "!" er registrert, skal "restart" -metoden utføres. Vi må også opprette en knapp som heter restart på slutten av "setSLASHresetGUI" -metoden før innholdet i rutenettet pakkes sammen. Denne omstartsknappen vil behandle strengen "!" (kommando lambda: self.process ("!")) og kjør den tilsvarende "restart" -metoden innenfor "prosess" -metoden.
Anbefalt:
Ta flotte bilder med en iPhone: 9 trinn (med bilder)
Ta flotte bilder med en iPhone: De fleste av oss har med oss en smarttelefon overalt i disse dager, så det er viktig å vite hvordan du bruker smarttelefonkameraet ditt til å ta flotte bilder! Jeg har bare hatt en smarttelefon i et par år, og jeg har elsket å ha et greit kamera for å dokumentere ting jeg
Slik demonterer du en datamaskin med enkle trinn og bilder: 13 trinn (med bilder)
Slik demonterer du en datamaskin med enkle trinn og bilder: Dette er en instruksjon om hvordan du demonterer en PC. De fleste grunnkomponentene er modulære og fjernes lett. Det er imidlertid viktig at du er organisert om det. Dette vil bidra til å hindre deg i å miste deler, og også i å gjøre monteringen igjen
PCB -design med enkle og enkle trinn: 30 trinn (med bilder)
PCB -design med enkle og enkle trinn: HELLO VENNER Den veldig nyttige og enkle opplæringen for de som ønsker å lære PCB -design, kan komme i gang
Hvordan lage en delt skjermvideo med fire trinn: 4 trinn (med bilder)
Hvordan lage en delt skjermvideo med fire trinn: Vi ser ofte en samme person vise i en scene to ganger i et TV -spill. Og så vidt vi vet har ikke skuespilleren en tvillingbror. Vi har også sett at to sangvideoer blir satt på en skjerm for å sammenligne sangferdighetene sine. Dette er kraften til spl
Minesveiper: 5 trinn (med bilder)
Minesveiper: For vårt siste prosjekt CPE 133 bestemte Chase og jeg oss for å lage en ‘ Minesveiper ’ spill som brukte knapp og bytteinngang fra et Basys-3-kort samt VHDL-kode. Et bedre navn på spillet kan meget vel være ‘ Russian Roulette & rsqu