Satura rādītājs:

Mīnu meklētājs-Raspberry-Pi-Edition: 7 soļi (ar attēliem)
Mīnu meklētājs-Raspberry-Pi-Edition: 7 soļi (ar attēliem)

Video: Mīnu meklētājs-Raspberry-Pi-Edition: 7 soļi (ar attēliem)

Video: Mīnu meklētājs-Raspberry-Pi-Edition: 7 soļi (ar attēliem)
Video: ES ESMU DEMONU APDOMĀTS 2024, Novembris
Anonim
Mīnu kuģis-Raspberry-Pi-Edition
Mīnu kuģis-Raspberry-Pi-Edition
Mīnu meklētājs-Raspberry-Pi-Edition
Mīnu meklētājs-Raspberry-Pi-Edition

Mans pēdējais projekts CSC 130 sērijai Luiziānas Tehniskajā universitātē ir Minesweeper Raspberry Pi Edition. Šajā projektā es centos atjaunot klasisko mīnu kuģa spēli, izmantojot Python programmēšanas valodas Tkinter bibliotēku. Režģis, ko ietver mīnu kuģa spēle, ir astoņas flīzes platumā un piecas flīzes augstumā. Projekta formatējums ir piemērots un pilnveidots Raspberry Pi lietošanai kopā ar Python 2.7.

Minesweeper Raspberry Pi Edition gala projekta kodu un attēlus var lejupielādēt, izmantojot šo saiti:

Mīnu meklētājs-Raspberry-Pi-Edition

Piegādes

x1 Rēzekne

Python 2.7 instalēts Raspberry Pi

Microsoft Powerpoint (vai cita programmatūra, lai izveidotu attēlus pogām)

1. darbība: izveidojiet pogu attēlus

Izveidojiet pogu attēlus
Izveidojiet pogu attēlus

PASKAIDROJUMS:

Katra poga, kas veido GUI, būs jāizveido. Šim uzdevumam es izmantoju Microsoft Powerpoint, lai izveidotu attēlus, kas vajadzīgi, lai tos parādītu uz pogām.

Pirmkārt, es izveidoju desmit flīžu pogas, kas vajadzīgas, lai izveidotu mīnu kuģa režģi (tukšs, bobs, nulle, viens, divi, trīs, četri, pieci, seši, septiņi un astoņi), izmantojot Microsoft Powerpoint.

Otrkārt, es izveidoju četrus attēlus, kas nepieciešami izvēlnes ekrānam (izvēlnes displejs, vienkāršas grūtības poga, vidējas grūtības poga un smagas grūtības poga), izmantojot Microsoft Powerpoint.

Treškārt, es izveidoju attēlu, kas nepieciešams restartēšanas pogai, un attēlus, kas vajadzīgi citām dažādām displeja pogām (displejs “spēle pār”, displejs “jūs uzvarējat” un “noteikumu” displejs), izmantojot Microsoft Powerpoint.

Ceturtkārt, jums būs jāmaina attēlu izmēri, lai tie ietilptu ekrānā. Savai Rasberry Pi es izmantoju šādus loga izmērus (atsaucoties uz pikseļiem garumā un platumā): 432x576.

2. darbība: formatējiet programmu

Programmas formāts
Programmas formāts

PASKAIDROJUMS:

Pirms faktiskās programmēšanas mums ir jāimportē nepieciešamās bibliotēkas un jāuzraksta mūsu programmas galvenā daļa.

Pirmkārt, mums būs jāimportē * no Tkintera bibliotēkas un jāmaisa nejaušā secībā. Otrkārt, mums programmas galvenajā daļā būs jāveic šādas koda darbības: jāizveido logs, jāiestata virsraksta logs, jāģenerē GUI un jāparāda GUI un jāgaida lietotāja mijiedarbība. Šis kods ir uzrakstīts pareizā formatējumā attiecībā uz Tkintera bibliotēku (skatiet pamācībā norādīto kodu, lai redzētu pareizu formatējumu).

3. darbība: izveidojiet GUI (izvēlne un mīnu meklētāja režģis)

Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)
Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)
Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)
Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)
Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)
Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)
Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)
Izveidojiet GUI (izvēlne un mīnu meklētāja režģis)

PASKAIDROJUMS:

Pēc programmas palaišanas tiek atvērts izvēlnes ekrāns. Kad grūtības ir atlasītas (izvēlnes ekrānā noklikšķinot uz vienas no grūtības pogām), GUI tiek atsvaidzināts ar mīnu kuģa režģi, displeju un restartēšanas pogu. Tā kā jūs tikko sākat darbu ar GUI, mums tikai jāsāk izvēlnes palaišana, jāsāk darboties izvēlnes grūtības pogām un jāatjaunina GUI spēles ekrānā ar mīnu kuģu režģi.

Pirmkārt, izvēlnes ekrāns var tikt parādīts pašas programmas palaišanas laikā, izsaucot "setupMenu" metodi MainGUI klases konstruktorā.

Otrkārt, mēs varam likt katrai izvēlnes grūtības pogai izpildīt noteiktas koda rindas ikreiz, kad uz tās tiek noklikšķināts, pievienojot "procesa" metodi (būs jāpievieno arī komanda lambda: self.process ("returnButtonName") izmantotās pogas funkcijas parametros katras grūtības pogas izveidē). Trīs paziņojumi ja-cits tiks izveidoti "procesa" metodē un izpildīs dažas citas metodes un papildu koda rindas atkarībā no pogas vienādības (poga ir vienāda ar pēdējās reģistrētās pogas nosaukumu).

Treškārt, kamēr izvēlnes ekrāns ir uz augšu un ja lietotājs noklikšķina uz vienas no grūtības pogām, programma saglabās noteiktu vērtību mainīgā "grūtības" (grūtības ir vienādas ar "viegli", "vidēji" vai "grūti") (noklikšķinot uz grūtības pogas). Šis klikšķis uz pogas zina, kurš paziņojums ja-cits ir jāievēro, pamatojoties uz pēdējās pogas nosaukumu (kāda poga ir vienāda). Turklāt, lai mainītu mainīgo "grūtības", mums vispirms būs jāizveido paraugs tas ir ārpus klases. Tātad mēs iestatīsim mainīgo "grūtības" kā tukšu virkni pirms klases "MainGUI" izveides.

Ceturtkārt, notīriet GUI no pogām, kas izveidotas ar metodi "setupMenu", izveidojot "clearMenu" metodi (vairākos gadījumos izmantojot funkciju button.destroy ()) un izsaucot "clearMenu" metodi "process" (sadaļā katra grūtības poga reģistrējas pēc grūtības mainīgā piešķiršanas).

Piektkārt, atsvaidziniet GUI, izveidojot metodi "setSLASHresetGUI" (pogas tiek veidotas tāpat kā "setupMenu" metodē) un izsaucot "setSLASHresetGUI" metodi "process" (zem katra grūtības pogu reģistra pēc mainīgo grūtību piešķiršana un metodes "clearMenu" izsaukšana).

Turklāt, pirms visas pogas tiek piešķirtas metodē "setSLASHresetGUI", mums ir jākonfigurē režģa rindas un kolonnas, un pēc tam, kad visas pogas ir piešķirtas "setSLASHresetGUI" metodē, mums ir jāiepako viss režģa saturs (skatiet kodu, kas norādīts instrukcijā, lai redzētu pareizu formatējumu).

4. darbība. Padariet spēles ekrānā esošās pogas funkcionālas

Padariet spēles ekrāna pogas funkcionālas
Padariet spēles ekrāna pogas funkcionālas
Padariet spēles ekrāna pogas funkcionālas
Padariet spēles ekrāna pogas funkcionālas
Padariet spēles ekrāna pogas funkcionālas
Padariet spēles ekrāna pogas funkcionālas
Padariet spēles ekrāna pogas funkcionālas
Padariet spēles ekrāna pogas funkcionālas

PASKAIDROJUMS:

Lai pogas noklikšķinot izpildītu noteiktas koda rindiņas, mums būs jāizpilda metodes "procesa" ietvaros. Lai veiktu šo uzdevumu, mums būs jāizveido vairākas jaunas metodes, mainīgie un saraksti.

Pirmkārt, mēs izveidosim divus sarakstus. Būs saraksts ar nosaukumu "režģis". Šajā "režģa" sarakstā būs tikai veseli skaitļi 9 un 0. Šajā sarakstā deviņi attēlo bumbas, bet nulles-bumbas, kas nav bumbas. Tādā veidā programma atšķirs, vai flīze ir bumba vai nē. Tiks izveidots otrs saraksts, un tas tiks saukts par "statusu". Šajā "statusa" sarakstā ir tikai viena rakstzīmju virkne ("0", "1", "2", "3", "4", "5", "6", "7", "8", "b" "). Šajā sarakstā katra rakstzīmju virkne atbilst noteiktam attēlam. Tādā veidā programma zinās, kādu attēlu parādīt uz katras pogas mīnu kuģa režģī. Katrai mīnu kuģu režģa pogai katrā sarakstā būs atbilstošs indekss, pamatojoties uz tās izvietojumu režģī. Atbilstošais indekss tiks piešķirts, veicot šādu procedūru (pogas numurs - 1). Piemēram, pogas atbilstošais indekss katrā sarakstā ir indekss nulle. Visbeidzot, šie divi saraksti tiks izpildīti pirms klases "MainGUI" izpildes un tiks izveidoti ārpus klases "MainGUI". Klase "režģis" tiks izveidota kā tukšs saraksts (režģis = ), un "statusa" sarakstu izveidos diapazona funkcija ("statusa" sarakstam pievienojot četrdesmit "n" rakstzīmju virknes).

Otrkārt, mēs veiksim dažādas metodes, kas var noteikt apkārtējo mīnu skaitu un kuras var izmantot, noklikšķinot uz pogas (lēmumu par to, kura metode jāizpilda, nosaka pogas izvietojums). Tieši šīs metodes tiks sauktas par mūsu mīnu analizatoriem. Šīs metodes palielinās skaitītāju ar nosaukumu "NumOfMines" un izmantos noteiktus indeksus "režģa" sarakstā, lai noteiktu, cik bumbas ieskauj flīzi. Virkne, kas tiks saglabāta mainīgajā "NumOfMines", tiks izmantota, lai aizstātu to pašu atbilstošo indeksu sarakstā "statuss". Tagad jums var rasties jautājums, kā programma zinās, kuru indeksu izmantot. Kad poga ir reģistrēta "procesa" metodē, tad mainīgais "indekss" tiks izveidots/pārdalīts noteiktam veselam skaitlim (pamatojoties uz to, kādu virkni poga reģistrē). Viena no izveidotajām metodēm izmantos šo piešķirto indeksu, lai uzzinātu flīzes izvietojumu un to apņemošo flīžu indeksus (metodes algoritms to izdomās). Turklāt, lai mainīgo "indekss" piešķirtu no jauna, mums tas vispirms būs jāizveido ārpus klases. Tātad mēs mainīgo "indekss" iepriekš iestatīsim kā veselu skaitli nulli pirms "MainGUI" klases izveides.

Treškārt, tiks izveidotas "darbības" metodes. Katru reizi, kad tiek reģistrēta poga, tiks izpildīta "darbības" metode. Šīs "darbības" metodes tiks izpildītas "procesa" metodē. Metodā "process" vairāki paziņojumi "ja-cits" noteiks, uz kuras pogas tika noklikšķināts (pamatojoties uz pogas vienādību). Tieši šeit tiks izmantota noteikta "darbības" metode (paziņojumos, ja citādi).

Ceturtkārt, mēs faktiski aplūkosim, kā pogas sāk darboties. Kā minēts iepriekš, vairāki "ja-cits" paziņojumi atrodas "procesa" metodē un izpilda dažas citas metodes un papildu koda rindas atkarībā no pogas vienādības (poga ir vienāda ar pēdējo reģistrēto virkni). Šajos paziņojumos “citādi” notiks sekojošais: indekss tiks piešķirts globāli, attiecīgais indekss sarakstā “statuss” tiks piešķirts virknei “b” (ja atbilstošais saraksta “režģis” indekss ir vienāds vesels skaitlis deviņi), tiks izpildīta atbilstoša "operācijas" metode (ja atbilstošais "režģa" saraksta indekss ir vienāds ar veselu skaitli nulli), tad atbilstošais indekss sarakstā "statuss" tiks piešķirts virknei, kas ir vienāda ar mainīgo "NumOfMines" (ja atbilstošais "režģa" saraksta indekss ir vienāds ar veselu skaitli nulli), un GUI tiks atsvaidzināts, izsaucot metodi "setSLASHresetGUI".

5. darbība: metode "setDifplicy" Metode un "restartēšanas" metode

Attēls
Attēls
Attēls
Attēls

PASKAIDROJUMS:

Pēc tam būs jāizveido metode "setDifplicy" un jāsāk darboties restartēšanas pogai, kas atrodas spēles ekrāna apakšdaļā (izveidojot "restartēšanas" metodi, lai tā tiktu izpildīta, kad lietotājs uz tās noklikšķina.).

Pirmkārt, metode "setDifplicy" būs jāīsteno grūtības pogu "process" metodes un "restart" metodes "if-else" paziņojumos. Šajā metodē izpildītās koda rindas un metodes ir diezgan vienkāršas. Izmantojot metodi "setDifplicy", mēs režģa sarakstam pievienosim noteiktu skaitu nulles (bez bumbas) un deviņus (bumbas) (izmantojot divas diapazona funkcijas katrā paziņojumā "ja-cits"), un pēc tam mēs sajauksim "režģa" saraksts (ar izlases bibliotēkas jaukšanas funkciju) metodes "setDifplicy" ietvaros (pēc tam, kad ir izpildīti paziņojumi, ja ir cits). Nulles un deviņu attiecību noteiks tas, kādai virknei ir iestatīts mainīgais "grūtības" ("viegls": 34-6, "vidējs": 28-12, "ciets": 16-24).

Otrkārt, "restartēšanas" metodē mēs mainīgos "index" un "NumOfMinesLEFT" globāli iestatīsim uz nulli, globāli iztukšosim gan "status", gan "grid" sarakstus, atiestatīsim "status" sarakstu ar diapazona funkciju (pievienojot četrdesmit "n" rakstzīmju virknes uz "statusa" sarakstu) un izmantojiet "setDifplicy" metodi.

6. darbība. Spēles beigu scenāriji

Spēles beigu scenāriji
Spēles beigu scenāriji
Spēles beigu scenāriji
Spēles beigu scenāriji
Spēles beigu scenāriji
Spēles beigu scenāriji
Spēles beigu scenāriji
Spēles beigu scenāriji

PASKAIDROJUMS:

Katrai mīnu kuģa spēlei ir divi spēles beigu scenāriji: uzvara un zaudējums. Šīs programmas ietvaros mēs īstenosim šos divus spēles beigu scenārijus ar divām jaunām metodēm: metodi "You_A_Winner_Son" un metodi "GameOver". Pirms GUI tiek atsvaidzināts "procesa" metodē un pamatojoties uz indeksiem, kas mainīti ar divām spēles beigu scenārija metodēm, displeja poga tiks mainīta, lai pareizi atspoguļotu rezultātu.

Pirmkārt, kad lietotājs noklikšķina uz pēdējās slēptās flīzes bez bumbas, tad jāizpilda metode "You_A_Winner_Son". Mēs pabeigsim šo uzdevumu, piesaucot metodi "You_A_Winner_Son" katru reizi, kad tiek noklikšķināts uz flīzes un tiek konstatēts, ka flīze nav bumba ("procesa" metodē izpildīto "darbības" metožu ietvaros). Ja laimesta nosacījumi ir izpildīti, tad tiks izpildīti divi paziņojumi ja-cits, izmantojot metodi "You_A_Winner_Son". Pirmais if-else paziņojums vienmēr tiks izpildīts neatkarīgi no tā, vai spēlētājs uzvarēja vai nē, kad tiek izmantota šī metode. Pamatojoties uz to, kam mainīgais "grūtības" ir vienāds, noteikts algoritms, kas noteiks, cik mīnu/bumbu ir palicis slēpts. Ar šo algoritmu atrastais vesels skaitlis tiks saglabāts mainīgajā "NumOfMinesLEFT". Tālāk, starp diviem ja-cits paziņojumiem, tiks izpildīts cits algoritms, lai atrastu atlikušo sākuma flīžu skaitu (nenoklikšķinātās flīzes). Ar šo algoritmu atrastais vesels skaitlis tiks saglabāts mainīgajā "NumOfStartingTilesLEFT". Otrais paziņojums “ja-cits” vienmēr tiks izpildīts neatkarīgi no tā, vai spēlētājs uzvarēja vai nē, kad tiek izmantota šī metode. Pamatojoties uz to, kam mainīgais "grūtības" ir vienāds, var izpildīt vienu no trim paziņojumiem "ja-cits", ja to nosacījumi ir izpildīti. Nosacījumu pamatā būs divi mainīgie "NumOfMinesLEFT" un "NumOfStartingTilesLEFT". Šajos trīs paziņojumos, ja citādi, tiks izpildīts algoritms, kas padarīs katru pogu bezjēdzīgu (spēle ir beigusies).

Otrkārt, kad lietotājs noklikšķina uz vienas no slēptajām bumbas flīzēm, tad jāizpilda metode "GameOver". Mēs pabeigsim šo uzdevumu, katru reizi pieskaroties „GameOver” metodei, noklikšķinot uz flīzes un konstatējot, ka flīze ir bumbas flīze („procesa” metodē izpildīto „darbības” metožu ietvaros). Kad tiek izsaukta metode "GameOver", tiks izpildīts algoritms, kas padarīs katru sākuma flīzi bezjēdzīgu (spēle ir beigusies), un tiks atklātas slēptās bumbas flīzes (pamatojoties uz atbilstošajiem indeksiem režģa sarakstā, daži indeksi sarakstā "statuss" tiks atkārtoti piešķirts vienas rakstzīmes virknei "b").

Treškārt, spēles ekrāna displejs tiks atjaunināts katru reizi, kad tiek atsvaidzināts GUI, veicot ļoti mazus nelielas izmaiņas "setSLASHresetGUI" metodē. Kad GUI režģis ir konfigurēts, mēs ievietojam trīs paziņojumus, ja ir cits, kur tiek ievietots pašreizējais displeja pogu piešķīrums. Viens no trim paziņojumiem ja-cits tiks izpildīts, pamatojoties uz šiem mainīgajiem lielumiem: "GameOverDETECTOR", "grūtības", "NumOfMinesLEFT" un "NumOfStartingTilesLEFT". Kā jums varētu rasties jautājums, mainīgais "GameOverDETECTOR" ir jauns mainīgais. Šis mainīgais tiks izveidots tieši pirms paziņojuma if-else izpildīšanas metodes "setSLASHresetGUI" ietvaros. Mainīgais "GameOverDETECTOR" būs vienāds ar veselu skaitli, kas tiek atrasts, izmantojot algoritmu, kas atrod, cik indeksu ir "režģī" saraksts ir piešķirts veselam skaitlim deviņdesmit deviņi (kā pogas tiek padarītas bezjēdzīgas). Pamatojoties uz to, vai ir izpildīti paziņojuma if-else nosacījumi, tiks veikta atbilstoša displeja piešķiršana.

7. darbība. Restartēšanas pogas darbības nodrošināšana

Pārstartēšanas pogas darbības nodrošināšana
Pārstartēšanas pogas darbības nodrošināšana

PASKAIDROJUMS:

Šis solis ir īsākais. Lielākā daļa darba šim solim jau ir paveikta. Viss, kas mums tagad jādara, ir izpildīt "restartēšanas" metodi katru reizi, kad lietotājs noklikšķina uz restartēšanas pogas.

Pirmkārt un visbeidzot, mēs izpildīsim "restartēšanas" metodi "procesa" metodē ar paziņojumu "if-else". Ja virkne "!" ir reģistrēts, tad jāizpilda "restartēšanas" metode. Metodes "setSLASHresetGUI" beigās mums būs jāizveido arī poga ar nosaukumu restart, pirms režģa saturs tiek iesaiņots kopā. Šī restartēšanas poga apstrādās virkni "!" (komanda lambda: self.process ("!")) un izpildiet atbilstošo "restart" metodi "process" metodes ietvaros.

Ieteicams: