Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Opret knapbilleder
- Trin 2: Formater program
- Trin 3: Opret GUI (Menu & Minesweeper Grid)
- Trin 4: Gør knapperne på skærmen i spillet operationelle
- Trin 5: "setDif vanskeligheds" metode og "genstart" metode
- Trin 6: Scenarier, der afslutter spil
- Trin 7: Gør genstartsknappen operationel
Video: Minesweeper-Raspberry-Pi-Edition: 7 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
Mit sidste projekt for CSC 130 -serien ved Louisiana Tech University er Minesweeper Raspberry Pi Edition. I dette projekt forsøgte jeg at genskabe det klassiske minesweeper -spil ved at bruge Tkinter -biblioteket i Python -programmeringssproget. Gitteret, som minestryger -spillet omfatter, er otte brikker i bredden og fem fliser i højden. Formateringen af projektet er blevet tilpasset og perfektioneret til brug af en Raspberry Pi installeret med Python 2.7.
Koden og billederne til Minesweeper Raspberry Pi Edition sidste projekt kan downloades på følgende link:
Minestryger-Hindbær-Pi-udgave
Forbrugsvarer
x1 Raspberry Pi
Python 2.7 installeret på Raspberry Pi
Microsoft Powerpoint (eller anden software til at oprette billeder til knapper)
Trin 1: Opret knapbilleder
FORKLARING:
Hver knap, der udgør GUI, skal oprettes. Til denne opgave brugte jeg Microsoft Powerpoint til at lave de billeder, jeg skulle vise på knapperne.
Først oprettede jeg de ti fliseknapper, der var nødvendige for at lave minestrygerens gitter (tomt, bob, nul, en, to, tre, fire, fem, seks, syv og otte) ved hjælp af Microsoft Powerpoint.
For det andet lavede jeg de fire billeder, der var nødvendige til menuskærmen (menudisplay, knap til let sværhedsgrad, knap til middel sværhedsgrad og knap til sværhedsgrad) ved hjælp af Microsoft Powerpoint.
For det tredje oprettede jeg det billede, der er nødvendigt til genstartsknappen, og de billeder, der er nødvendige til de andre forskellige displayknapper (et "game over" display, et "du vinder" display og et "regler" display) ved hjælp af Microsoft Powerpoint.
For det fjerde skal du ændre størrelsen på dine billeder, så de passer ind i din skærm. Til min Rasberry Pi brugte jeg følgende dimensioner for vinduet (henviser til pixel i længde og bredde): 432x576.
Trin 2: Formater program
FORKLARING:
Inden en egentlig programmering kan finde sted, skal vi importere de biblioteker, vi har brug for, og skrive hoveddelen af vores program.
Først skal vi importere * fra Tkinter -biblioteket og blande fra det tilfældige bibliotek. For det andet skal vi fuldføre følgende trin i kode inden for programmets hoveddel: opret vinduet, indstil titelvinduet, generer GUI, og vis GUI og vent på brugerinteraktion. Denne kode er skrevet i korrekt formatering i forhold til Tkinter -biblioteket (se på koden, der er angivet i instruktionsbogen, for at se korrekt formatering).
Trin 3: Opret GUI (Menu & Minesweeper Grid)
FORKLARING:
Når programmet startes, startes menuskærmen. Efter at vanskeligheden er valgt (ved at klikke på en af vanskelighedsknapperne på menuskærmen), opdateres GUI'en med minestrygergitteret, et display og en genstartsknap. Da du lige er begyndt at arbejde på GUI'en, behøver vi kun at få menuen til at starte, få knapperne i menuens vanskeligheder til at fungere og få GUI til at opdatere til spilskærmen med minestryger -gitteret.
For det første kan vi få menuskærmen til at vise sig selv ved opstart af programmet ved at kalde "setupMenu" -metoden inden for konstruktøren af MainGUI -klassen.
For det andet kan vi få hver af menuens vanskelighedsknapper til at udføre bestemte kodelinjer, når der klikkes på dem ved at tilføje en "proces" -metode (skal også tilføje kommando lambda: self.process ("returnButtonName") inden for parametrene for den anvendte knapfunktion ved oprettelsen af hver vanskelighedsknap). Tre if-else-sætninger vil blive oprettet i "proces" -metoden og udføre visse andre metoder og linjer med ekstra kode afhængigt af, hvad knappen er lig med (knappen er lig med det knapnavn, der sidst blev registreret).
For det tredje, mens menuskærmen er oppe, og hvis brugeren klikker på en af vanskelighedsknapperne, gemmer programmet en vis værdi i variablen "vanskelighedsgrad" (sværhedsgrad er lig med "let", "medium" eller "hård" baseret fra hvilken vanskeligheds knap der klikkes på). Dette klik på en knap ved hvilken if-else-sætning der skal følges baseret på hvilket knapnavn der sidst blev registreret (hvilken knap er lig med). Desuden skal vi først tilskrive variablen "vanskelighedsgrad" først Det vil være uden for klassen. Så vi angiver variablen "vanskeligheder" som en tom streng, før "MainGUI" -klassen oprettes.
For det fjerde skal du rydde GUI'en for de knapper, der er lavet med "setupMenu" -metoden ved at lave en "clearMenu" -metode (ved hjælp af funktionen button.destroy () i flere tilfælde) og kalde "clearMenu" -metoden i "proces" -metoden (under hver af vanskelighedsknappen registreres efter vanskelighedsvariabeltildelingen).
For det femte skal du opdatere GUI'en ved at lave en "setSLASHresetGUI" -metode (knapper laves på samme måde som i "setupMenu" -metoden) og kalde metoden "setSLASHresetGUI" i "proces" -metoden (under hver af vanskeligheds -knapperne registreres efter vanskelighedsvariabel tildeling og kalder "clearMenu" -metoden).
Inden alle knapper tildeles inden for metoden "setSLASHresetGUI", skal vi konfigurere rækker og kolonner i gitteret, og når alle knapper er tildelt inden for "setSLASHresetGUI" -metoden, skal vi pakke alt indhold i gitteret (se på kode angivet i instruktionsbogen for at se korrekt formatering).
Trin 4: Gør knapperne på skærmen i spillet operationelle
FORKLARING:
For at få knapperne til at udføre bestemte kodelinjer, når der klikkes på dem, bliver vi nødt til at udføre metoder inden for "proces" -metoden. Til denne opgave bliver vi nødt til at lave flere nye metoder, variabler og lister.
Først laver vi to lister. Der vil være en liste kaldet "grid". Denne "grid" -liste vil kun bestå af heltalene 9 og 0. På denne liste vil ni repræsentere bomber, og nuller vil repræsentere ikke-bomber. Sådan vil programmet skelne mellem, om en flise er en bombe eller ej. En anden liste vil blive lavet, og den vil blive kaldt "status". Denne "status" -liste består kun af en tegnstreng ("0", "1", "2", "3", "4", "5", "6", "7", "8", "b "). På denne liste svarer hver enkelt tegnstreng til et bestemt billede. Sådan ved programmet, hvilket billede der skal vises på hver knap i minestrygerens gitter. Hver knap i minestrygergitteret vil have et tilsvarende indeks på hver liste baseret på dets placering i nettet. Det tilhørende indeks tildeles ved følgende procedure (knapnummer - 1). For eksempel er knappen ens tilsvarende indeks på hver liste indeksnul. Endelig vil disse to lister blive eksekveret før "MainGUI" klassen udføres og vil blive oprettet uden for "MainGUI" klassen. "Gitter" -klassen oprettes som en tom liste (grid = ), og "status" -listen oprettes af en rækkefunktion (tilføjelse af fyrre enkelt tegnstrenge "n" til "status" -listen).
For det andet vil vi lave forskellige metoder, der kan registrere antallet af miner, der omgiver det, og som kan kaldes på, når der klikkes på en knap (beslutningen om hvilken metode, der skal udføres, bestemmes af knappens placering). Netop disse metoder vil blive kaldt vores mineanalysatorer. Disse metoder øger en tæller kaldet "NumOfMines" og vil bruge visse indekser i "grid" -listen til at bestemme, hvor mange bomber der omgiver flisen. Strengen, der vil blive gemt i variablen "NumOfMines", bruges til at erstatte det samme tilsvarende indeks i listen "status". Nu kan du undre dig over, hvordan programmet ved, hvilket indeks der skal bruges. Når en knap er registreret i "proces" -metoden, vil der blive oprettet/tildelt et variabelt "indeks" til et bestemt heltal (baseret på hvilken streng knappen registrerer). En af de oprettede metoder vil bruge det tildelte indeks for at kende placeringen af flisen og indekserne for de fliser, der omgiver den (algoritme inden for metoden finder ud af dette). Derudover skal vi først tildele den uden for klassen for at tildele variablen "indeks" igen. Så vi vil forudindstille "indeks" -variablen som heltal nul, før "MainGUI" -klassen oprettes.
For det tredje vil "operation" -metoder blive oprettet. En "operation" -metode vil blive udført hver gang en knap registreres. Disse "operation" metoder vil blive udført i "proces" metoden. I "proces" -metoden vil flere if-else-sætninger afgøre, hvilken knap der blev klikket på (baseret på hvad knappen er lig med). Det er her, der skal bruges en bestemt "operation" -metode (i if-else-sætningerne).
For det fjerde vil vi faktisk komme ind på, hvordan knapperne bliver operationelle. Som nævnt tidligere er flere if-else-sætninger placeret i "proces" -metoden og udfører visse andre metoder og linjer med ekstra kode afhængigt af, hvad knappen er lig med (knappen er lig med uanset hvilken streng, der sidst blev registreret). Inden for disse if-else-sætninger vil følgende forekomme i rækkefølge: indeks vil blive tildelt globalt, det tilsvarende indeks i "status" -listen vil blive tildelt strengen "b" (hvis det tilsvarende indeks for "grid" -listen er lig med heltalet ni), vil en tilsvarende "operation" -metode blive udført (hvis det tilsvarende indeks for "grid" -listen er lig med heltalet nul), vil det tilsvarende indeks i "status" -listen blive tildelt en streng, der er lig med variablen "NumOfMines" (hvis det tilsvarende indeks for "grid" -listen er lig med heltalet nul), og GUI'en opdateres ved at kalde metoden "setSLASHresetGUI".
Trin 5: "setDif vanskeligheds" metode og "genstart" metode
FORKLARING:
Dernæst skal der oprettes en "setDif vanskeligheds" -metode, og genstartsknappen i bunden af skærmen i spillet skal fungere (ved at oprette en "genstart" -metode, så den kan udføres, når den klikkes af brugeren).
Først skal metoden "setDif vanskelighed" implementeres i if-else-udsagnene fra vanskelighedsknapperne i "proces" -metoden og i "genstart" -metoden. Kodelinjerne og metoderne udført i denne metode er ganske enkle. I metoden "setDificiency" tilføjer vi en vis mængde nuller (ikke-bomber) og ni (bomber) til "grid" -listen (via to områdefunktioner inden for hver if-else-sætning), og derefter vil vi blande "grid" -liste (med tilfældigt biblioteks blandingsfunktion) inden for metoden "setDif vanskelighed" (efter if-else-sætningerne er udført). Forholdet mellem nuller og ni bestemmes af, hvilken streng variablen "sværhedsgrad" er indstillet til ("let": 34-6, "medium": 28-12, "hård": 16-24).
For det andet sætter vi i metoden "genstart" variablerne "indeks" og "NumOfMinesLEFT" til nul globalt, tømmer både "status" og "gitter" -lister globalt, nulstiller "status" -listen med en rækkefunktion (tilføjer fyrre enkelt tegnstrenge "n" til "status" -listen), og kald på metoden "setDif vanskelighed".
Trin 6: Scenarier, der afslutter spil
FORKLARING:
Hvert minestryger-spil har to scenarier, der afslutter spillet: sejr og tab. Inden for dette program implementerer vi disse to game-ending scenarier med to nye metoder: en "You_A_Winner_Son" metode og en "GameOver" metode. Inden GUI'en opdateres inden for "proces" -metoden og baseret på de indekser, der er ændret af de to spilafslutende scenarimetoder, vil displayknappen blive ændret for korrekt at repræsentere resultatet.
Først når brugeren klikker på den sidste skjulte ikke-bombe flise, skal metoden "You_A_Winner_Son" udføres. Vi vil fuldføre denne opgave ved at benytte metoden "You_A_Winner_Son" hver gang der klikkes på en flise, og der er fundet en flise uden bombe (inden for "operation" -metoderne, der udføres i "proces" -metoden). Hvis vinderbetingelserne er opfyldt, udføres to if-else-udsagn inden for metoden "You_A_Winner_Son". Den første if-else-erklæring vil altid blive udført, uanset om spilleren vandt eller ej, når denne metode bruges. Baseret på hvad variablen "sværhedsgrad" er lig med, en bestemt algoritme, der bestemmer, hvor mange miner/bomber der er tilbage skjult. Heltallet, der findes af denne algoritme, gemmes i variablen "NumOfMinesLEFT". Dernæst vil der mellem de to if-else-sætninger blive eksekveret en anden algoritme for at finde antallet af resterende startfliser (ikke-markerede fliser). Heltallet, der findes af denne algoritme, gemmes i variablen "NumOfStartingTilesLEFT". Den anden if-else-erklæring vil altid blive udført, uanset om spilleren vandt eller ej, når denne metode bruges. Baseret på hvad variablen "vanskelighed" er lig med, kan en af tre if-else-sætninger eksekveres, hvis betingelserne er opfyldt. Betingelserne vil være baseret på, hvad de to variabler "NumOfMinesLEFT" og "NumOfStartingTilesLEFT" er lig med. Inden for disse tre if-else-udsagn vil der blive udført en algoritme, der gør hver knap ubrugelig (spillet er slut).
For det andet, når brugeren klikker på en af de skjulte bombefliser, skal "GameOver" -metoden udføres. Vi vil fuldføre denne opgave ved at benytte "GameOver" -metoden, hver gang der klikkes på en brik, og der er fundet en flise (inden for "operation" -metoderne, der udføres i "proces" -metoden). Når der benyttes "GameOver" -metoden, vil der blive udført en algoritme, der gør hver startflise ubrugelig (spillet er slut), og de skjulte bombefliser afsløres (baseret på de tilsvarende indekser i "gridlisten, visse indekser i "status" -listen vil blive tildelt en enkelttegns streng "b").
For det tredje opdateres visningen af skærmen i spillet hver gang GUI'en opdateres ved at foretage meget få mindre redigeringer af metoden "setSLASHresetGUI". Efter at netværket i GUI'en er konfigureret, placerer vi tre if-else-sætninger, hvor den aktuelle displayknap-tildeling er placeret. En af de tre if-else-sætninger vil blive udført baseret på, hvad følgende variabler er lig med: "GameOverDETECTOR", "vanskeligheder", NumOfMinesLEFT "og" NumOfStartingTilesLEFT ". Som du måske undrer dig over, er variablen" GameOverDETECTOR "en ny variabel. Denne variabel oprettes lige før if-else-sætningerne eksekveres inden for metoden "setSLASHresetGUI". Variablen "GameOverDETECTOR" vil være lig med heltalet, der findes ved hjælp af en algoritme, der finder hvor mange indekser i "nettet" liste er blevet tildelt til heltallet ni og halvtreds (hvordan knapperne gøres ubrugelige). Baseret på hvis if-else-sætningens betingelser er opfyldt, vil en tilsvarende omfordeling til displayet forekomme.
Trin 7: Gør genstartsknappen operationel
FORKLARING:
Dette trin er tilfældigvis det korteste. Det meste af arbejdet til dette trin er allerede udført. Alt, hvad vi skal gøre nu, er at udføre "genstart" -metoden, hver gang brugeren klikker på genstartsknappen.
Først og sidst vil vi udføre metoden "genstart" i "proces" -metoden med en if-else-sætning. Hvis strengen "!" er registreret, skal "genstart" -metoden udføres. Vi bliver også nødt til at oprette en knap, der kaldes genstart i slutningen af metoden "setSLASHresetGUI", før indholdet af gitteret pakkes sammen. Denne genstart -knap behandler strengen "!" (kommando lambda: self.process ("!")) og udfør den tilsvarende "genstart" -metode inden for "proces" -metoden.
Anbefalede:
Sådan adskilles en computer med nemme trin og billeder: 13 trin (med billeder)
Sådan adskilles en computer med nemme trin og billeder: Dette er en instruktion om, hvordan du adskiller en pc. De fleste af de grundlæggende komponenter er modulopbyggede og nemme at fjerne. Det er dog vigtigt, at du er organiseret omkring det. Dette hjælper med at forhindre dig i at miste dele og også ved at lave genmonteringen til
Ciclop 3d Scanner My Way Trin for trin: 16 trin (med billeder)
Ciclop 3d Scanner My Way Step by Step: Hej alle sammen, jeg kommer til at indse den berømte Ciclop 3D -scanner.Alle trin, der er godt forklaret på det originale projekt, er ikke til stede.Jeg lavede nogle rettelser for at forenkle processen, først Jeg udskriver basen, og end jeg genstarter printkortet, men fortsæt
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: 7 trin (med billeder)
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: Selv efter 25 års introduktion til forbrugermarkedet er infrarød kommunikation stadig meget relevant i de seneste dage. Uanset om det er dit 55 tommer 4K -fjernsyn eller dit billydsystem, har alt brug for en IR -fjernbetjening for at reagere på vores
PCB -design med enkle og lette trin: 30 trin (med billeder)
PCB -design med enkle og lette trin: HELLO VENNER Det er en meget nyttig og let tutorial for dem, der ønsker at lære PCB -design, lad os starte
Sådan laver du en delt skærmvideo med fire trin: 4 trin (med billeder)
Sådan laver du en delt skærmvideo med fire trin: Vi ser ofte en samme person vise sig i en scene to gange i et tv -afspilning. Og så vidt vi ved, har skuespilleren ikke en tvillingebror. Vi har også set, at to sangvideoer er sat på en skærm for at sammenligne deres sangevner. Dette er kraften i spl