![Miinipilduja-Vaarika-Pi-väljaanne: 7 sammu (piltidega) Miinipilduja-Vaarika-Pi-väljaanne: 7 sammu (piltidega)](https://i.howwhatproduce.com/images/001/image-1893-9-j.webp)
Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-23 14:40
![Miinipilduja-Vaarika-Pi-väljaanne Miinipilduja-Vaarika-Pi-väljaanne](https://i.howwhatproduce.com/images/001/image-1893-10-j.webp)
![Miinipilduja-Vaarika-Pi-väljaanne Miinipilduja-Vaarika-Pi-väljaanne](https://i.howwhatproduce.com/images/001/image-1893-11-j.webp)
Minu viimane projekt CSC 130 seeria jaoks Louisiana tehnikaülikoolis on Minesweeper Raspberry Pi Edition. Selle projektiga püüdsin taasluua klassikalise miinipilduja mängu, kasutades programmeerimiskeele Pythoni Tkinter raamatukogu. Miinipildujamängu võrk on kaheksa plaadi laiune ja viie plaadi kõrgune. Projekti vormindus on sobinud ja täiustatud Python 2.7 -ga installitud Raspberry Pi kasutamiseks.
Minesweeper Raspberry Pi Edition lõpliku projekti koodi ja pilte saab alla laadida järgmiselt lingilt:
Miinipilduja-Vaarika-Pi-väljaanne
Tarvikud
x1 Rõivas
Python 2.7 installitud Raspberry Pi -le
Microsoft Powerpoint (või muu tarkvara nuppude jaoks piltide loomiseks)
Samm: looge nuppudega pilte
![Loo nuppudega pilte Loo nuppudega pilte](https://i.howwhatproduce.com/images/001/image-1893-12-j.webp)
SELGITUS:
Iga GUI moodustav nupp tuleb luua. Selle ülesande jaoks kasutasin nuppudel kuvamiseks vajalike piltide tegemiseks Microsoft Powerpointi.
Esiteks lõin Microsoft Powerpointi abil kümme paaninuppu, mis on vajalikud miinipildujavõrgu tegemiseks (tühi, bob, null, üks, kaks, kolm, neli, viis, kuus, seitse ja kaheksa).
Teiseks tegin menüükuva jaoks vajalikud neli pilti (menüükuva, lihtsate nuppude nupp, keskmise raskusega nupp ja raskete raskuste nupp), kasutades Microsoft Powerpointi.
Kolmandaks lõin ma taaskäivitusnupu jaoks vajaliku pildi ja teiste erinevate kuvamisnuppude („mäng üle”, „võidad” kuva ja „reeglite” kuva) jaoks vajalikud pildid, kasutades Microsoft Powerpointi.
Neljandaks peate oma piltide suurust muutma, et need ekraanile mahuksid. Kasutasin oma Rasberry Pi puhul akna jaoks järgmisi mõõtmeid (mis viitavad pikslitele pikkuses ja laiuses): 432x576.
Samm: vormindage programm
![Vormindusprogramm Vormindusprogramm](https://i.howwhatproduce.com/images/001/image-1893-13-j.webp)
SELGITUS:
Enne tegeliku programmeerimise alustamist peame importima vajalikud teegid ja kirjutama oma programmi põhiosa.
Esiteks peame importima * Tkinteri teegist ja juhuslikust teegist juhuslikult segama. Teiseks peame programmi põhiosas koodi abil täitma järgmised sammud: looma akna, seadistama tiitliakna, looma graafilise kasutajaliidese ja kuvama graafilise kasutajaliidese ning ootama kasutajate suhtlemist. See kood on kirjutatud Tkinteri raamatukogu suhtes õiges vormingus (õige vormindamise nägemiseks vaadake juhendis toodud koodi).
3. samm: looge GUI (menüü ja miinipildujavõrk)
![Loo GUI (menüü ja miinipildujavõrk) Loo GUI (menüü ja miinipildujavõrk)](https://i.howwhatproduce.com/images/001/image-1893-14-j.webp)
![Loo GUI (menüü ja miinipildujavõrk) Loo GUI (menüü ja miinipildujavõrk)](https://i.howwhatproduce.com/images/001/image-1893-15-j.webp)
![Loo GUI (menüü ja miinipildujavõrk) Loo GUI (menüü ja miinipildujavõrk)](https://i.howwhatproduce.com/images/001/image-1893-16-j.webp)
![Loo GUI (menüü ja miinipildujavõrk) Loo GUI (menüü ja miinipildujavõrk)](https://i.howwhatproduce.com/images/001/image-1893-17-j.webp)
SELGITUS:
Programmi käivitamisel avatakse menüükuva. Pärast raskuse valimist (klõpsates menüüekraanil ühte raskusnuppu) värskendatakse GUI -d miinipildujavõrgu, ekraani ja taaskäivitusnupu abil. Kuna te alles alustate GUI -ga töötamist, peame vaid käivitama menüü, laskma menüü raskusnupud tööle ja laskma GUI -l värskendada mänguekraani koos miinipildujavõrguga.
Esiteks saame programmi käivitamisel kuvada menüüekraani, kutsudes MainGUI klassi konstruktoris "setupMenu" meetodi.
Teiseks saame lasta iga menüü raskusnupul käivitada teatud koodirid, kui seda klõpsata, lisades "protsessi" meetodi (tuleb lisada ka käsk lambda: self.process ("returnButtonName") kasutatava nupu funktsiooni parameetrite piires iga raskusnupu loomisel). Meetodi "protsess" käigus luuakse kolm if-else lauset ja täidetakse teatud muid meetodeid ja lisakoodi ridu sõltuvalt nupu võrdsusest (nupp võrdub viimati registreeritud nupu nimega).
Kolmandaks, kui menüüekraan on üleval ja kui kasutaja klõpsab mõnel raskusnupul, salvestab programm teatud väärtuse muutujale „raskus” (raskusaste on „lihtne”, „keskmine” või „raske” selle nupu klõpsamisel teatakse, millist if-else lauset järgida, lähtudes sellest, mis nupu nimi viimati registreeriti (mis nupp võrdub). Lisaks peame muutuja "raskus" uuesti määramiseks esmalt aktiveerima see on väljaspool klassi. Seega määrame muutuja "raskused" tühjaks stringiks enne klassi "MainGUI" loomist.
Neljandaks tühjendage GUI "setupMenu" meetodil tehtud nuppudest, tehes meetodi "clearMenu" (kasutades mitmel juhul funktsiooni button.destroy ()) ja kutsudes "clearMenu" meetodi "process" (alt iga raskusnupp registreerub pärast raskusmuutuja määramist).
Viiendaks värskendage GUI -d, tehes meetodi "setSLASHresetGUI" (nupud on valmistatud samamoodi nagu "setupMenu" meetodis) ja helistades meetodi "process" meetodile "setSLASHresetGUI" (iga raskusnupuregistri all raskuste muutuja määramine ja "clearMenu" meetodi kutsumine).
Lisaks peame enne kõigi nuppude määramist meetodis "setSLASHresetGUI" konfigureerima ruudustiku read ja veerud ning pärast kõigi nuppude määramist meetodi "setSLASHresetGUI" raames peame pakkima kogu ruudustiku sisu (vaadake koodi, mis on antud juhendis, et näha õiget vormingut).
4. samm: muutke mängusisese ekraani nupud toimivaks
![Muutke mängusisese ekraani nupud toimivaks Muutke mängusisese ekraani nupud toimivaks](https://i.howwhatproduce.com/images/001/image-1893-18-j.webp)
![Muutke mängusisese ekraani nupud toimivaks Muutke mängusisese ekraani nupud toimivaks](https://i.howwhatproduce.com/images/001/image-1893-19-j.webp)
![Muutke mängusisese ekraani nupud toimivaks Muutke mängusisese ekraani nupud toimivaks](https://i.howwhatproduce.com/images/001/image-1893-20-j.webp)
![Muutke mängusisese ekraani nupud toimivaks Muutke mängusisese ekraani nupud toimivaks](https://i.howwhatproduce.com/images/001/image-1893-21-j.webp)
SELGITUS:
Selleks, et nupud saaksid klõpsamisel teatud koodiridasid täita, peame meetodi "protsess" raames täitma. Selle ülesande täitmiseks peame koostama mitu uut meetodit, muutujat ja loendit.
Esiteks teeme kaks nimekirja. Seal on nimekiri nimega "grid". See "ruudustiku" loend koosneb ainult täisarvudest 9 ja 0. Selles loendis tähistab üheksa pommi ja null mittepommi. Nii eristab programm, kas plaat on pomm või mitte. Tehakse teine nimekiri ja seda nimetatakse "olekuks". See "oleku" loend koosneb ainult ühest tähemärgist ("0", "1", "2", "3", "4", "5", "6", "7", "8", "b" "). Selles loendis vastab iga tähemärk teatud pildile. Nii saab programm teada, millist pilti miinipildujavõrgu igal nupul kuvada. Igal miinipildujavõrgu nupul on igas nimekirjas vastav indeks, mis põhineb selle paigutamisel võrku. Vastava indeksi määramiseks toimige järgmiselt (nupu number - 1). Näiteks iga loendi nuppude vastav indeks on nullindeks. Lõpuks täidetakse need kaks loendit enne klassi "MainGUI" täitmist ja luuakse väljaspool klassi "MainGUI". Klass "ruudustik" luuakse tühja loendina (ruudustik = ) ja loend "olek" luuakse vahemikfunktsiooniga (lisades loendile "olek" nelikümmend ühe tähemärgi stringi "n").
Teiseks valmistame erinevaid meetodeid, mis suudavad tuvastada seda ümbritsevate miinide arvu ja mida saab nupu klõpsamisel kasutada (otsuse, millist meetodit tuleks täita, määrab nupu paigutus). Just neid meetodeid nimetatakse meie miinianalüsaatoriteks. Need meetodid suurendavad loendurit nimega "NumOfMines" ja kasutavad ruudustiku loendis teatud indekseid, et teha kindlaks, kui palju pomme paani ümbritseb. Stringi, mis salvestatakse muutuja "NumOfMines", kasutatakse sama vastava indeksi asendamiseks loendis "olek". Nüüd võite küsida, kuidas programm teab, millist indeksit kasutada. Kui nupp on registreeritud meetodis "protsess", luuakse/määratakse muutuja "indeks" kindlale täisarvule (selle põhjal, millist stringi nupp registreerib). Üks loodud meetoditest kasutab seda määratud indeksit, et teada saada plaadi paigutust ja seda ümbritsevate plaatide indekseid (meetodi algoritm selgitab selle välja). Lisaks peame muutuja "indeks" uuesti määramiseks esmalt selle klassist välja näitama. Seega seadistame muutuja "index" täisarvuliseks nulliks enne klassi "MainGUI" loomist.
Kolmandaks luuakse "operatsioonimeetodid". Iga kord, kui nupp registreeritakse, käivitatakse meetod. Need "operatsiooni" meetodid täidetakse "protsessi" meetodis. Meetodi "protsess" puhul määravad mitu if-else lauset, millisele nupule klõpsati (selle alusel, mis nupuga võrdub). Siin kasutatakse teatud "operatsiooni" meetodit (lausetes if-else).
Neljandaks uurime tegelikult, kuidas nupud tööle hakkavad. Nagu varem öeldud, asuvad mitmed if-else laused meetodis "process" ja täidavad teatud muid meetodeid ja lisakoodi ridu sõltuvalt nupu võrdsusest (nupp võrdub viimati registreeritud stringiga). Nendes if-else lausetes ilmneb järgmine järjekord: indeks määratakse globaalselt, vastav nimekiri "staatus" määratakse uuesti stringile "b" (kui ruudustiku loendi vastav indeks on võrdne täisarv üheksa), käivitatakse vastav "operatsiooni" meetod (kui loendi "ruudustik" vastav indeks on täisarv null), määratakse vastav olekunimekirja indeks stringile, mis võrdub muutujaga "NumOfMines" (kui loendi "ruudustik" vastav indeks on täisarv null) ja GUI -d värskendatakse, kutsudes meetodit "setSLASHresetGUI".
Samm: meetod "setDifplicy" Meetod ja "restart" meetod
![Pilt Pilt](https://i.howwhatproduce.com/images/001/image-1893-22-j.webp)
![Pilt Pilt](https://i.howwhatproduce.com/images/001/image-1893-23-j.webp)
SELGITUS:
Järgmisena tuleb luua meetod "setDifplicy" ja mängusisese ekraani allosas asuv taaskäivitusnupp peab tööle hakkama (luues "taaskäivitamise" meetodi, mis käivitub, kui kasutaja seda klõpsab).
Esiteks tuleb "setDifplicy" meetod rakendada "protsessi" meetodi ja "restart" meetodi raskusnuppude if-else lausetes. Selle meetodiga täidetud koodiridad ja meetodid on üsna lihtsad. Meetodi "setDifplicy" korral lisame "grid" loendisse teatud koguse nulle (mittepommid) ja üheksa (pommid) (kahe vahemiku funktsiooni kaudu igas if-else lauses) ja seejärel segame "grid" loend (juhusliku teegi segamisfunktsiooniga) meetodi "setDifplicy" raames (pärast if-else lausete täitmist). Nullide ja üheksate suhe määratakse selle järgi, milliseks stringiks on määratud muutuja "raskus" ("lihtne": 34-6, "keskmine": 28-12, "raske": 16-24).
Teiseks seadistame "taaskäivitamise" meetodis muutujad "index" ja "NumOfMinesLEFT" globaalselt nulliks, tühjendame nii "status" kui ka "grid" loendid globaalselt, lähtestame "status" loendi vahemiku funktsiooniga (lisades nelikümmend ühe tähemärgi stringi "n" loendisse "olek") ja kasutage meetodit "setDifplicy".
6. samm: mängu lõpetamise stsenaariumid
![Mängu lõpetamise stsenaariumid Mängu lõpetamise stsenaariumid](https://i.howwhatproduce.com/images/001/image-1893-24-j.webp)
![Mängu lõpetamise stsenaariumid Mängu lõpetamise stsenaariumid](https://i.howwhatproduce.com/images/001/image-1893-25-j.webp)
![Mängu lõpetamise stsenaariumid Mängu lõpetamise stsenaariumid](https://i.howwhatproduce.com/images/001/image-1893-26-j.webp)
![Mängu lõpetamise stsenaariumid Mängu lõpetamise stsenaariumid](https://i.howwhatproduce.com/images/001/image-1893-27-j.webp)
SELGITUS:
Igal miinipilduja mängul on kaks mängu lõppemise stsenaariumi: võit ja kaotus. Selle programmi raames rakendame need kaks mängu lõpetamise stsenaariumi kahe uue meetodiga: meetodiga "You_A_Winner_Son" ja "GameOver". Enne GUI värskendamist "protsessi" meetodi raames ja kahe mängu lõppemise stsenaariumi meetodiga muudetud indeksite põhjal muudetakse kuvamisnuppu, et tulemus oleks õigesti esindatud.
Esiteks, kui kasutaja klõpsab viimasel peidetud mitte-pommipaanil, tuleb käivitada meetod "You_A_Winner_Son". Selle ülesande täitmiseks kutsume iga kord, kui klõpsame plaati ja leitakse, et plaat on mittepommiplaat (meetodite meetodil „toiming”), kasutades meetodit „You_A_Winner_Son”. Kui võidutingimused on täidetud, täidetakse meetodi "You_A_Winner_Son" raames kaks if-else lauset. Esimene if-else lause täidetakse alati olenemata sellest, kas mängija võitis või mitte, kui seda meetodit kasutatakse. Lähtuvalt sellest, millega muutuja "raskus" võrdub, on teatud algoritm, mis määrab kindlaks, kui palju miine/pomme on peidetud. Selle algoritmiga leitud täisarv salvestatakse muutuja "NumOfMinesLEFT". Järgmisena täidetakse kahe if-else avalduse vahel veel üks algoritm, et leida järelejäänud algusplaatide arv (klõpsamata plaadid). Selle algoritmiga leitud täisarv salvestatakse muutuja "NumOfStartingTilesLEFT". Teine if-else lause täidetakse alati olenemata sellest, kas mängija võitis või mitte, kui seda meetodit kasutatakse. Selle põhjal, millega muutuja "raskus" võrdub, võidakse nende tingimuste täitmisel täita üks kolmest if-else lausest. Tingimuste aluseks on see, millega võrduvad kaks muutujat "NumOfMinesLEFT" ja "NumOfStartingTilesLEFT". Nende kolme if-else avalduse raames täidetakse algoritm, mis muudab iga nupu kasutuks (mäng on lõppenud).
Teiseks, kui kasutaja klõpsab ühel peidetud pommiplaadil, tuleb käivitada meetod "GameOver". Selle ülesande täitmiseks kutsume iga kord, kui klõpsame plaadil ja leiame, et plaat on pommiplaat ("protsessi" meetodis täidetud "toimingute" raames), kasutades "GameOver" meetodit. "GameOver" meetodi kasutamisel käivitatakse algoritm, mis muudab iga alustava plaadi kasutuks (mäng on lõppenud) ja paljastatakse peidetud pommiplaadid (võrgunimekirja vastavate indeksite alusel, teatud indeksid) loendis "olek" määratakse uuesti ühekohalisele stringile "b").
Kolmandaks uuendatakse mängusisese ekraani kuva iga kord, kui GUI-d värskendatakse, tehes väga vähe väiksemaid muudatusi "setSLASHresetGUI" meetodis. Pärast GUI ruudustiku seadistamist paigutame kolm if-else lauset, kuhu praegune kuvamisnupp on paigutatud. Üks kolmest if-else lausest käivitub selle põhjal, millised on järgmised muutujad: "GameOverDETECTOR", "raskus", "NumOfMinesLEFT" ja "NumOfStartingTilesLEFT". Nagu võite mõelda, on muutuja "GameOverDETECTOR" uus muutuja. See muutuja luuakse vahetult enne if-else lausete täitmist meetodi "setSLASHresetGUI" raames. Muutuja "GameOverDETECTOR" on võrdne täisarvuga, mis leitakse algoritmi abil, mis leiab ruudustikus olevate indeksite arvu loend on määratud täisarvule üheksakümmend üheksa (kuidas nupud kasutuks muudetakse). Selle põhjal, millise avalduse if-else tingimused on täidetud, toimub ekraanile vastav ümberpaigutamine.
7. samm: taaskäivitusnupu töövõime muutmine
![Taaskäivitusnupu toimivaks muutmine Taaskäivitusnupu toimivaks muutmine](https://i.howwhatproduce.com/images/001/image-1893-28-j.webp)
SELGITUS:
See samm juhtub olema kõige lühem. Enamik selle sammu töö on juba tehtud. Kõik, mida peame nüüd tegema, on käivitada "taaskäivitamise" meetod iga kord, kui kasutaja klõpsab taaskäivitusnupul.
Esiteks ja lõpuks käivitame "protsessi" meetodi "restart" meetodi avaldusega if-else. Kui string "!" on registreeritud, käivitatakse "taaskäivitamise" meetod. Samuti peame enne võrgu sisu kokku pakkimist looma meetodi "setSLASHresetGUI" lõpus nupu nimega restart. See taaskäivitusnupp töötleb stringi "!" (käsk lambda: self.process ("!")) ja käivitage "process" meetodi raames vastav "restart" meetod.
Soovitan:
DIY 37 LED Arduino ruleti mäng: 3 sammu (piltidega)
![DIY 37 LED Arduino ruleti mäng: 3 sammu (piltidega) DIY 37 LED Arduino ruleti mäng: 3 sammu (piltidega)](https://i.howwhatproduce.com/images/001/image-12-j.webp)
DIY 37 Leds Arduino rulett Mäng: Rulett on kasiinomäng, mis on nime saanud prantsuse sõna järgi, mis tähendab väikest ratast
Kuidas: Raspberry PI 4 peata (VNC) installimine RPI-pildistaja ja piltidega: 7 sammu (koos piltidega)
![Kuidas: Raspberry PI 4 peata (VNC) installimine RPI-pildistaja ja piltidega: 7 sammu (koos piltidega) Kuidas: Raspberry PI 4 peata (VNC) installimine RPI-pildistaja ja piltidega: 7 sammu (koos piltidega)](https://i.howwhatproduce.com/images/001/image-1574-23-j.webp)
Kuidas: Raspberry PI 4 peata (VNC) installimine Rpi-pildistaja ja piltidega: kavatsen seda Rapsberry PI-d kasutada oma blogis hunniku lõbusate projektide jaoks. Vaadake seda julgelt. Tahtsin uuesti oma Raspberry PI kasutamist alustada, kuid mul polnud uues asukohas klaviatuuri ega hiirt. Vaarika seadistamisest oli tükk aega möödas
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
![Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega) Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)](https://i.howwhatproduce.com/images/005/image-14740-j.webp)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
![Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega) Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)](https://i.howwhatproduce.com/images/010/image-27211-j.webp)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
Arvuti demonteerimine lihtsate sammude ja piltidega: 13 sammu (piltidega)
![Arvuti demonteerimine lihtsate sammude ja piltidega: 13 sammu (piltidega) Arvuti demonteerimine lihtsate sammude ja piltidega: 13 sammu (piltidega)](https://i.howwhatproduce.com/images/006/image-15346-7-j.webp)
Arvuti demonteerimine lihtsate sammude ja piltidega: see on juhis arvuti demonteerimiseks. Enamik põhikomponente on modulaarsed ja kergesti eemaldatavad. Siiski on oluline, et oleksite selles osas organiseeritud. See aitab vältida osade kaotamist ja ka kokkupanekut