Taula de continguts:

Minesweeper-Raspberry-Pi-Edition: 7 passos (amb imatges)
Minesweeper-Raspberry-Pi-Edition: 7 passos (amb imatges)

Vídeo: Minesweeper-Raspberry-Pi-Edition: 7 passos (amb imatges)

Vídeo: Minesweeper-Raspberry-Pi-Edition: 7 passos (amb imatges)
Vídeo: Вещи, которые мистеру Уэлчу больше не разрешается делать в сборнике для чтения RPG № 1-2450 2024, Juliol
Anonim
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition
Minesweeper-Raspberry-Pi-Edition

El meu projecte final per a la sèrie CSC 130 a la Louisiana Tech University és l’edició Minesweeper Raspberry Pi Edition. En aquest projecte, vaig intentar recrear el clàssic joc de minesweeper mitjançant la biblioteca Tkinter del llenguatge de programació Python. La quadrícula que engloba el joc de les mines és de vuit fitxes d’amplada i cinc fitxes d’alçada. El format del projecte s’ha adequat i perfeccionat per a l’ús d’un Raspberry Pi instal·lat amb Python 2.7.

El codi i les imatges del projecte final Minesweeper Raspberry Pi Edition es poden descarregar al següent enllaç:

Minesweeper-Raspberry-Pi-Edition

Subministraments

x1 Raspberry Pi

Python 2.7 Instal·lat al Raspberry Pi

Microsoft Powerpoint (o un altre programari per crear imatges per als botons)

Pas 1: Creeu imatges de botons

Crea imatges de botons
Crea imatges de botons

EXPLICACIÓ:

Caldrà crear cada botó que compon la interfície gràfica d’usuari. Per a aquesta tasca, he utilitzat Microsoft Powerpoint per fer les imatges que necessitava mostrar als botons.

En primer lloc, he creat els deu botons de rajoles necessaris per fer la quadrícula de la minesweep (en blanc, bob, zero, un, dos, tres, quatre, cinc, sis, set i vuit) mitjançant Microsoft Powerpoint.

En segon lloc, he creat les quatre imatges necessàries per a la pantalla del menú (visualització del menú, botó de dificultat fàcil, botó de dificultat mitjana i botó de dificultat) amb Microsoft Powerpoint.

En tercer lloc, he creat la imatge necessària per al botó de reinici i les imatges necessàries per a la resta de botons de visualització diferents (una pantalla "joc sobre", una pantalla "guanyes" i una pantalla "de regles") mitjançant Microsoft Powerpoint.

En quart lloc, haureu de canviar la mida de les imatges perquè s’adaptin a la pantalla. Per al meu Rasberry Pi, he utilitzat les dimensions següents per a la finestra (fent referència a píxels de llargada i amplada): 432x576.

Pas 2: format del programa

Programa de formats
Programa de formats

EXPLICACIÓ:

Abans que pugui tenir lloc una programació real, hem d’importar les biblioteques que necessitem i escriure la part principal del nostre programa.

Primer, haurem d’importar * de la biblioteca Tkinter i barrejar-ho des de la biblioteca aleatòria. En segon lloc, haurem de completar els següents passos de codi dins de la part principal del programa: crear la finestra, configurar la finestra del títol, generar la interfície gràfica d’usuari i mostrar-la i esperar la interacció de l’usuari. Aquest codi està escrit amb un format adequat respecte a la biblioteca Tkinter (mireu el codi donat a la instrucció per veure el format adequat).

Pas 3: creeu la interfície gràfica d’usuari (menú i quadrícula de mines)

Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)
Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)
Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)
Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)
Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)
Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)
Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)
Creeu la interfície gràfica d’usuari (menú i quadrícula de mines)

EXPLICACIÓ:

En iniciar el programa, s'iniciarà la pantalla del menú. Després de seleccionar la dificultat (fent clic en un dels botons de dificultat de la pantalla del menú), la GUI s'actualitzarà amb la quadrícula de la minesweeper, una pantalla i un botó de reinici. Com que tot just esteu començant a treballar a la interfície gràfica d’usuari, només caldrà que el menú s’iniciï, que els botons de dificultat del menú estiguin operatius i que la GUI s’actualitzi a la pantalla del joc amb la quadrícula del minesweeper.

En primer lloc, podem mostrar la pantalla del menú en iniciar-se el programa trucant al mètode "setupMenu" dins del constructor de la classe MainGUI.

En segon lloc, podem fer que cadascun dels botons de dificultat del menú executi certes línies de codi sempre que es faci clic afegint un mètode de "procés" (també s'haurà d'afegir l'ordre lambda: self.process ("returnButtonName") dins dels paràmetres de la funció de botó utilitzada en la creació de cada botó de dificultat). Es crearan tres sentències if-else en el mètode "procés" i executaran certs altres mètodes i línies de codi addicional segons el que el botó sigui igual (el botó és igual al nom del botó que es va registrar per última vegada).

En tercer lloc, mentre la pantalla del menú està activada i si l'usuari fa clic en un dels botons de dificultat, el programa guardarà un valor determinat a la variable "dificultat" (la dificultat és igual a "fàcil", "mitjana" o "dura") amb el botó de dificultat). Aquest clic d'un botó sap quina instrucció if-else s'ha de seguir en funció del nom del botó registrat per última vegada (quin botó és igual). A més, per reassignar la variable "dificultat" primer haurem de crear una instància per tant, establirem la variable "dificultat" com una cadena buida abans de crear la classe "MainGUI".

En quart lloc, esborreu la GUI dels botons fets pel mètode "setupMenu" fent un mètode "clearMenu" (utilitzant la funció button.destroy () en diverses instàncies) i cridant el mètode "clearMenu" al mètode "procés" (a sota). cadascun dels botons de dificultat es registra després de l’assignació de la variable de dificultat).

En cinquè lloc, actualitzeu la GUI fent un mètode "setSLASHresetGUI" (els botons es fabriquen de la mateixa manera que amb el mètode "setupMenu") i cridant el mètode "setSLASHresetGUI" al mètode "procés" (sota cadascun dels registres del botó de dificultat després del assignació de variables de dificultat i cridar al mètode "clearMenu").

A més, abans que s’assignin tots els botons dins del mètode "setSLASHresetGUI", hem de configurar les files i les columnes dins de la quadrícula i després d’haver assignat tots els botons dins del mètode "setSLASHresetGUI", hem d’empaquetar tot el contingut dins de la quadrícula (mireu a codi indicat a la instrucció per veure el format adequat).

Pas 4: feu que els botons de la pantalla del joc siguin operatius

Feu que els botons de la pantalla del joc siguin operatius
Feu que els botons de la pantalla del joc siguin operatius
Feu que els botons de la pantalla del joc siguin operatius
Feu que els botons de la pantalla del joc siguin operatius
Feu que els botons de la pantalla del joc siguin operatius
Feu que els botons de la pantalla del joc siguin operatius
Feu que els botons de la pantalla del joc siguin operatius
Feu que els botons de la pantalla del joc siguin operatius

EXPLICACIÓ:

Per fer que els botons executin certes línies de codi quan es fa clic, haurem d'executar mètodes dins del mètode "procés". Per a aquesta tasca, haurem de fer diversos mètodes, variables i llistes nous.

En primer lloc, farem dues llistes. Hi haurà una llista anomenada "quadrícula". Aquesta llista de "quadrícula" constarà només dels enters 9 i 0. En aquesta llista, nou representaran bombes i els zeros representaran no bombes. Així és com el programa distingirà si una rajola és una bomba o no. Es farà una segona llista, que es dirà "estat". Aquesta llista "estat" consta només de cadenes de caràcters ("0", "1", "2", "3", "4", "5", "6", "7", "8", "b "). En aquesta llista, cada cadena de caràcters correspondrà a una imatge determinada. Així és com el programa sabrà quina imatge mostrarà a cada botó de la graella de la minesweeper. Cada botó de la graella del barramines tindrà un índex corresponent a cada llista en funció de la seva ubicació a la graella. L'índex corresponent s'assignarà pel següent procediment (número de botó - 1). Per exemple, l'índex corresponent del botó a cada llista és l'índex zero. Finalment, aquestes dues llistes s'executaran abans que s'executi la classe "MainGUI" i es crearan fora de la classe "MainGUI". La classe "quadrícula" es crearà com a llista buida (quadrícula = ) i la llista "estat" es crearà mitjançant una funció d'interval (afegint quaranta cadenes de caràcters individuals de "n" a la llista "estat").

En segon lloc, farem diversos mètodes que puguin detectar el nombre de mines que l’envolten i que es pot accedir quan es fa clic a un botó (la decisió de quin mètode s’hauria d’executar es determinarà mitjançant la col·locació del botó). Aquests mateixos mètodes s’anomenaran els nostres analitzadors de mines. Aquests mètodes incrementaran un comptador anomenat "NumOfMines" i utilitzaran certs índexs de la llista "quadrícula" per determinar quantes bombes envolten la rajola. La cadena que s'emmagatzemarà dins de la variable "NumOfMines" s'utilitzarà per substituir el mateix índex corresponent a la llista "estat". Ara us podeu preguntar com el programa sabrà quin índex utilitzar. Quan es registra un botó al mètode "procés", es crearà / reassignarà una variable "índex" a un nombre enter determinat (segons quina cadena registri el botó). Un dels mètodes creats farà servir l’índex assignat per conèixer la ubicació de la rajola i els índexs de les rajoles que l’envolten (l’algorisme del mètode ho descobrirà). A més, per reassignar la variable "índex", primer haurem d'instanciar-la fora de la classe. Per tant, preestablirem la variable "índex" com a zero enter abans de crear la classe "MainGUI".

En tercer lloc, es crearan mètodes d '"operació". S’executarà un mètode d’operació cada vegada que es registri un botó. Aquests mètodes d '"operació" s'executaran en el mètode "procés". Al mètode "procés", diverses sentències if-else determinaran quin botó s'ha fet clic (en funció del que equival al botó). Aquí és on es demanarà un determinat mètode d '"operació" (a les sentències if-else).

En quart lloc, ens adonarem de com funcionen els botons. Com s'ha indicat anteriorment, diverses sentències if-else es troben al mètode "procés" i executen certs altres mètodes i línies de codi addicional segons el que el botó és igual (el botó és igual a la cadena que es va registrar per última vegada). Dins d’aquestes declaracions if-else, es produirà el següent en ordre: l’índex s’assignarà globalment, l’índex corresponent de la llista “estat” es reassignarà a la cadena “b” (si l’índex corresponent de la llista “quadrícula” és igual a l'enter nou), s'executarà el mètode corresponent "operació" (si l'índex corresponent de la llista "quadrícula" és igual al zero enter), aquest índex corresponent de la llista "estat" es reassignarà a una cadena que és igual a la variable "NumOfMines" (si l'índex corresponent de la llista "quadrícula" és igual al zero enter), i la GUI s'actualitzarà trucant al mètode "setSLASHresetGUI".

Pas 5: mètode "setDifficulty" i mètode "reinici"

Imatge
Imatge
Imatge
Imatge

EXPLICACIÓ:

A continuació, caldrà crear un mètode "setDifficulty" i el botó de reinici situat a la part inferior de la pantalla del joc haurà d'entrar en funcionament (creant un mètode de "reinici" perquè s'executi quan l'usuari faci clic a).

En primer lloc, caldrà implementar el mètode "setDifficulty" a les sentències if-else dels botons de dificultat del mètode "process" i al mètode "reiniciar". Les línies de codi i els mètodes executats en aquest mètode són bastant senzills. Al mètode "setDifficulty", afegirem una certa quantitat de zeros (no bombes) i nou (bombes) a la llista de "quadrícula" (mitjançant dues funcions de rang dins de cada sentència if-else) i, a continuació, barrejarem la Llista "quadrícula" (amb la funció de barreja aleatòria de la biblioteca) dins del mètode "setDifficulty" (després d'executar les sentències if-else). La proporció de zeros a nou es determinarà segons quina cadena s'estableixi la variable "dificultat" ("fàcil": 34-6, "mitjà": 28-12, "dur": 16-24).

En segon lloc, en el mètode "reiniciar", establirem les variables "índex" i "NumOfMinesLEFT" a zero globalment, buidarem les llistes "estat" i "quadrícula" globalment, restablirem la llista "estat" amb una funció d'interval (afegint quaranta cadenes de caràcters simples de "n" a la llista "estat") i demanen al mètode "setDifficulty".

Pas 6: escenaris finals del joc

Escenaris finals del joc
Escenaris finals del joc
Escenaris finals del joc
Escenaris finals del joc
Escenaris finals del joc
Escenaris finals del joc
Escenaris finals del joc
Escenaris finals del joc

EXPLICACIÓ:

Cada joc de barres de mines té dos escenaris de finalització del joc: la victòria i la derrota. Dins d’aquest programa, implementarem aquests dos escenaris de finalització de joc amb dos mètodes nous: un mètode "You_A_Winner_Son" i un mètode "GameOver". Abans que la GUI s'actualitzi dins del mètode "procés" i es basi en els índexs modificats pels dos mètodes d'escenari final del joc, es canviarà el botó de visualització per representar correctament el resultat.

En primer lloc, quan l’usuari fa clic a l’últim mosaic ocult sense bombes, s’ha d’executar el mètode "You_A_Winner_Son". Completarem aquesta tasca trucant al mètode "You_A_Winner_Son" cada vegada que es faci clic a un mosaic i es detecti que el mosaic no és un mosaic sense bomba (dins dels mètodes "operació" executats amb el mètode "procés"). Si es compleixen les condicions guanyadores, s'executaran dues sentències if-else dins del mètode "You_A_Winner_Son". La primera sentència if-else sempre s'executarà independentment de si el jugador ha guanyat o no quan es fa servir aquest mètode. Basant-nos en què és igual la variable "dificultat", un determinat algorisme que determinarà quantes mines / bombes queden ocultes. L'enter que es troba amb aquest algorisme es desarà a la variable "NumOfMinesLEFT". A continuació, entre la sentència if-else, s'executarà un altre algorisme per trobar el nombre de rajoles inicials que queden (rajoles no seleccionades). L'enter que es troba amb aquest algorisme es desarà a la variable "NumOfStartingTilesLEFT". La segona sentència if-else sempre s'executarà independentment de si el jugador ha guanyat o no quan es fa servir aquest mètode. Basant-se en què és igual la variable "dificultat", es pot executar una de les tres sentències if-else si es compleixen les seves condicions. Les condicions es basaran en què són iguals les dues variables "NumOfMinesLEFT" i "NumOfStartingTilesLEFT". Dins d’aquestes tres sentències if-else, s’executarà un algorisme que farà que cada botó sigui inútil (el joc s’ha acabat).

En segon lloc, quan l'usuari fa clic en una de les fitxes de la bomba oculta, s'ha d'executar el mètode "GameOver". Completarem aquesta tasca fent clic al mètode "GameOver" cada cop que es faci clic a un mosaic i es trobi que el mosaic és un mosaic bomba (dins dels mètodes "operació" executats amb el mètode "procés"). Quan es faci servir el mètode "GameOver", s'executarà un algoritme que farà inútils cada fitxa inicial (el joc s'ha acabat) i es revelaran les fitxes ocultes de la bomba (basades en els índexs corresponents de la "llista de quadrícules, determinats índexs a la llista "estat" es reassignarà a la cadena d'un sol caràcter "b").

En tercer lloc, la visualització de la pantalla del joc s'actualitzarà cada vegada que s'actualitzi la GUI fent poques modificacions menors al mètode "setSLASHresetGUI". Després de configurar la quadrícula de la GUI, col·locarem tres sentències if-else on es col·loca l'assignació actual del botó de visualització. Una de les tres sentències if-else s'executarà en funció de què són iguals les següents variables: "GameOverDETECTOR", "dificultat", "NumOfMinesLEFT" i "NumOfStartingTilesLEFT". Com us podeu preguntar, la variable "GameOverDETECTOR" és una nova variable. Aquesta variable es crearà just abans que les sentències if-else s'executin dins del mètode "setSLASHresetGUI". La variable "GameOverDETECTOR" serà igual a l'enter que es troba mitjançant un algorisme que troba quants índexs de la "quadrícula" llista s'ha reassignat al nombre enter noranta-nou (com es fan inútils els botons). En funció de les condicions de la declaració if-else, es produirà una reassignació corresponent a la pantalla.

Pas 7: fer que el botó de reinici funcioni

Fer operatiu el botó de reinici
Fer operatiu el botó de reinici

EXPLICACIÓ:

Aquest pas és el més curt. La major part del treball d’aquest pas ja s’ha realitzat. Tot el que haurem de fer ara és executar el mètode de "reinici" cada vegada que l'usuari fa clic al botó de reinici.

En primer lloc i, finalment, executarem el mètode "reinici" en el mètode "procés" amb una sentència if-else. Si la cadena "!" està registrat, llavors s'executarà el mètode "reinici". També haurem de crear un botó anomenat reiniciar al final del mètode "setSLASHresetGUI" abans que el contingut de la graella estigui empaquetat. Aquest botó de reinici processarà la cadena "!" (ordeneu lambda: self.process ("!")) i executeu el mètode corresponent "reinici" dins del mètode "procés".

Recomanat: