Orodha ya maudhui:

Toleo la Minesweeper-Raspberry-Pi-Toleo: Hatua 7 (na Picha)
Toleo la Minesweeper-Raspberry-Pi-Toleo: Hatua 7 (na Picha)

Video: Toleo la Minesweeper-Raspberry-Pi-Toleo: Hatua 7 (na Picha)

Video: Toleo la Minesweeper-Raspberry-Pi-Toleo: Hatua 7 (na Picha)
Video: My Modded Colecovision Flashback 2024, Julai
Anonim
Toleo la Minesweeper-Raspberry-Pi-Edition
Toleo la Minesweeper-Raspberry-Pi-Edition
Toleo la Minesweeper-Raspberry-Pi-Edition
Toleo la Minesweeper-Raspberry-Pi-Edition

Mradi wangu wa mwisho wa safu ya CSC 130 katika Chuo Kikuu cha Louisiana Tech ni Toleo la Minesweeper Raspberry Pi. Katika mradi huu, nilitafuta kurudisha mchezo wa kawaida wa wachimba mines kwa kutumia maktaba ya Tkinter ya lugha ya programu ya Python. Gridi ya taifa ambayo mchezo wa minesweeper unajumuisha ni tiles nane kwa upana na tiles tano kwa urefu. Uundaji wa mradi umefaa na kukamilishwa kwa matumizi ya Raspberry Pi iliyowekwa na Python 2.7.

Nambari na picha za mradi wa mwisho wa Minesweeper Raspberry Pi Edition zinaweza kupakuliwa kwenye kiunga kifuatacho:

Toleo la Minesweeper-Raspberry-Pi-Edition

Vifaa

x1 Raspberry Pi

Python 2.7 Imewekwa kwenye Raspberry Pi

Microsoft Powerpoint (au programu nyingine ya kuunda picha za vifungo)

Hatua ya 1: Unda Picha za Kitufe

Unda Picha za Kitufe
Unda Picha za Kitufe

MAELEZO:

Kila kitufe kinachounda GUI kitahitaji kuundwa. Kwa kazi hii, nilitumia Microsoft Powerpoint kutengeneza picha ambazo nilihitaji kuonyesha kwenye vifungo.

Kwanza, niliunda vifungo kumi vya tile vinahitajika kutengeneza gridi ya minesweeper (tupu, bob, sifuri, moja, mbili, tatu, nne, tano, sita, saba, na nane) kwa kutumia Microsoft Powerpoint.

Pili, nilitengeneza picha nne zinazohitajika kwa skrini ya menyu (onyesho la menyu, kitufe cha ugumu rahisi, kitufe cha ugumu wa kati, na kitufe cha ugumu) kwa kutumia Microsoft Powerpoint.

Tatu, niliunda picha inayohitajika kwa kitufe cha kuanza upya na picha zinahitajika kwa vifungo vingine tofauti vya kuonyesha (onyesho la "mchezo juu", onyesho la "unashinda", na onyesho la "sheria") ukitumia Microsoft Powerpoint.

Nne, itabidi ubadilishe picha zako ili zitoshe ndani ya skrini yako. Kwa Rasberry yangu Pi, nilitumia vipimo vifuatavyo kwa dirisha (ikimaanisha saizi kwa urefu na upana): 432x576.

Hatua ya 2: Mpango wa Umbizo

Mpango wa Umbizo
Mpango wa Umbizo

MAELEZO:

Kabla programu yoyote halisi haijafanyika, lazima tuingize maktaba tunayohitaji na tuandike sehemu kuu ya programu yetu.

Kwanza, tutahitaji kuagiza * kutoka maktaba ya Tkinter na kuchanganya kutoka maktaba ya nasibu. Pili, tutahitaji kukamilisha hatua zifuatazo kwa msimbo ndani ya sehemu kuu ya programu: unda dirisha, weka kichwa cha kichwa, toa GUI, na uonyeshe GUI na subiri mwingiliano wa mtumiaji. Nambari hii imeandikwa kwa muundo sahihi kwa heshima na maktaba ya Tkinter (angalia nambari iliyopewa katika inayoweza kufundishwa ili uone muundo sahihi).

Hatua ya 3: Unda GUI (Menyu & Gridi ya Minesweeper)

Unda GUI (Menyu & Gridi ya Minesweeper)
Unda GUI (Menyu & Gridi ya Minesweeper)
Unda GUI (Menyu & Gridi ya Minesweeper)
Unda GUI (Menyu & Gridi ya Minesweeper)
Unda GUI (Menyu & Gridi ya Minesweeper)
Unda GUI (Menyu & Gridi ya Minesweeper)
Unda GUI (Menyu & Gridi ya Minesweeper)
Unda GUI (Menyu & Gridi ya Minesweeper)

MAELEZO:

Wakati wa kuanza kwa programu, skrini ya menyu itazinduliwa. Baada ya ugumu kuchaguliwa (kwa kubonyeza kitufe cha ugumu kwenye skrini ya menyu), GUI itaburudishwa na gridi ya minesweeper, onyesho, na kitufe cha kuanza upya. Kwa kuwa unaanza kufanya kazi kwenye GUI, tutahitaji tu kupata menyu ya kuzindua, kuwa na vifungo vya ugumu wa menyu kuanza kufanya kazi, na kuwa na GUI upya kwenye skrini ya mchezo na gridi ya minesweeper.

Kwanza, tunaweza kuwa na skrini ya menyu inayojionyesha wakati wa kuanza kwa programu kwa kupiga njia ya "setupMenu" ndani ya mjenzi wa darasa la MainGUI.

Pili, tunaweza kuwa na kila kitufe cha ugumu wa menyu kutekeleza mistari fulani ya nambari kila unapobofya kwa kuongeza njia ya "mchakato" (italazimika pia kuongeza amri lambda: katika uundaji wa kila kitufe cha ugumu). Taarifa tatu ikiwa-nyingine zitaundwa kwa njia ya "mchakato" na kutekeleza njia zingine zingine na mistari ya nambari ya ziada kulingana na kitufe sawa (kifungo ni sawa na jina la kitufe lililosajiliwa mwisho).

Tatu, wakati skrini ya menyu iko juu na ikiwa mtumiaji anabofya kwenye moja ya vifungo vya ugumu, basi programu itaokoa thamani fulani kwa "ugumu" wa kutofautisha (ugumu ni sawa na "rahisi", "kati", au "ngumu" bonyeza kitufe cha ugumu kilichobofya). Bonyeza hii ya kitufe inajua ni-ikiwa taarifa nyingine ya kufuata kulingana na jina gani la kitufe lilisajiliwa mara ya mwisho (kitufe gani ni sawa). kwa hivyo nje ya darasa. Kwa hivyo tutaweka ubadilishaji wa "ugumu" kama kamba tupu kabla ya darasa la "MainGUI" kuundwa.

Nne, futa GUI ya vifungo vilivyotengenezwa na njia ya "setupMenu" kwa kutengeneza njia ya "clearMenu" (kwa kutumia button.destroy () kazi katika visa vingi) na kuita njia ya "clearMenu" katika njia ya "mchakato" (chini kila kitufe cha ugumu husajili baada ya mgawanyo wa shida).

Tano, onyesha upya GUI kwa kutengeneza njia ya "setSLASHresetGUI" (vifungo vimeundwa kwa njia sawa na katika njia ya "setupMenu") na kuita njia ya "setSLASHresetGUI" kwa njia ya "mchakato" (chini ya kila sajili ya kitufe cha ugumu baada ya ugumu mgawo wa kutofautisha na kuita njia ya "clearMenu").

Kwa kuongezea, kabla ya vifungo vyote kutolewa kwa njia ya "setSLASHresetGUI" njia lazima tusanidi safu na nguzo ndani ya gridi na baada ya vifungo vyote kupewa katika njia ya "setSLASHresetGUI" lazima tupakie yaliyomo ndani ya gridi ya taifa (angalia nambari iliyopewa kwa kufundisha kuona muundo sahihi).

Hatua ya 4: Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo

Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo
Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo
Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo
Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo
Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo
Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo
Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo
Tengeneza Vifungo kwenye Uendeshaji wa Skrini ya Mchezo

MAELEZO:

Ili kufanya vifungo kutekeleza mistari fulani ya nambari wakati wa kubofya, tutalazimika kutekeleza njia ndani ya njia ya "mchakato". Kwa kazi hii, itabidi tutengeneze njia mpya nyingi, vigeuzi, na orodha.

Kwanza, tutafanya orodha mbili. Kutakuwa na orodha inayoitwa "gridi ya taifa". Orodha hii ya "gridi ya taifa" itakuwa na nambari 9 na 0. tu Katika orodha hii, watawa watawakilisha mabomu, na zero watawakilisha mabomu yasiyo. Hivi ndivyo programu itakavyotofautisha ikiwa tile ni bomu au la. Orodha ya pili itafanywa, na itaitwa "hadhi". Orodha hii ya "hadhi" ina masharti ya mhusika mmoja tu ("0", "1", "2", "3", "4", "5", "6", "7", "8", "b "). Katika orodha hii, kila kamba ya mhusika italingana na picha fulani. Hivi ndivyo mpango utajua picha gani ya kuonyesha kwenye kila kitufe kwenye gridi ya minesweeper. Kila kitufe kwenye gridi ya minesweeper kitakuwa na faharisi inayolingana katika kila orodha kulingana na kuwekwa kwake kwenye gridi ya taifa. Fahirisi inayofanana itapewa na utaratibu ufuatao (nambari ya kifungo - 1). Kwa mfano, bonyeza kitufe kinachofanana cha orodha katika kila orodha ni fahirisi sifuri. Mwishowe, orodha hizi mbili zitatekelezwa kabla ya darasa la "MainGUI" kutekelezwa na itaundwa nje ya darasa la "MainGUI". Darasa la "gridi" litaundwa kama orodha tupu (gridi = ) na orodha ya "hadhi" itaundwa na kazi anuwai (ikiongeza kamba arobaini za herufi moja ya "n" kwenye orodha ya "hadhi").

Pili, tutafanya njia anuwai ambazo zinaweza kugundua idadi ya migodi inayoizunguka na inayoweza kuitwa kitufe kinapobofya (uamuzi wa njia ipi inayofaa kutekelezwa itaamuliwa na kuwekwa kwa kitufe). Njia hizi zitaitwa wachambuzi wetu wa mgodi. Njia hizi zitaongeza kaunta inayoitwa "NumOfMines" na itatumia faharisi fulani ndani ya orodha ya "gridi" kuamua ni mabomu ngapi yanayozunguka tile. Kamba ambayo itahifadhiwa ndani ya "NumOfMines" inayobadilika itatumika kuchukua nafasi ya faharisi sawa inayofanana katika orodha ya "hadhi". Sasa, unaweza kujiuliza ni vipi mpango utajua ni faharisi gani ya kutumia. Wakati kitufe kinasajiliwa katika njia ya "mchakato", basi "faharisi" inayobadilika itaundwa / kutolewa kwa nambari fulani (kulingana na kitufe gani kitufe kinasajili). Njia moja iliyoundwa itatumia faharisi iliyopewa ili kujua uwekaji wa tile na fahirisi za vigae vinavyoizunguka (algorithm ndani ya njia itajua hii). Kwa kuongezea, ili kupeana tena "index" inayobadilika tutahitaji kwanza kuisisitiza nje ya darasa. Kwa hivyo tutaweka upendeleo wa "index" kama nambari kamili kabla ya darasa la "MainGUI" kuundwa.

Tatu, njia za "operesheni" zitaundwa. Njia ya "operesheni" itatekelezwa kila wakati kitufe kinasajiliwa. Njia hizi za "operesheni" zitatekelezwa kwa njia ya "mchakato". Katika njia ya "mchakato", taarifa nyingi ikiwa-nyingine itaamua ni kitufe kipi kilichobofya (kulingana na kile kitufe ni sawa). Hapa ndipo njia fulani ya "operesheni" itakapoitwa (katika taarifa ikiwa -ngine).

Nne, kwa kweli tutaingia katika jinsi vifungo vitaanza kufanya kazi. Kama ilivyosemwa hapo awali, taarifa nyingi ikiwa-nyingine ziko katika njia ya "mchakato" na kutekeleza njia zingine zingine na mistari ya nambari ya ziada kulingana na kitufe sawa (kitufe ni sawa na kamba iliyosajiliwa mwisho). Ndani ya taarifa hizi ikiwa -ngine, zifuatazo zitatokea kwa mpangilio: index itapewa ulimwenguni, faharisi inayolingana katika orodha ya "hadhi" itapewa tena kwa kamba "b" (ikiwa faharisi inayolingana ya orodha ya "gridi" inalingana nambari tisa), njia inayofanana ya "operesheni" itatekelezwa (ikiwa fahirisi inayolingana ya orodha ya "gridi" ni sawa na nambari kamili), faharisi sawa katika orodha ya "hadhi" itapewa tena kwa kamba ambayo ni sawa na kutofautisha "NumOfMines" (ikiwa faharisi inayolingana ya orodha ya "gridi" ni sawa na sifuri kamili), na GUI itaburudishwa kwa kuita njia ya "setSLASHresetGUI".

Hatua ya 5: "setDifficulty" Method & "restart" Method

Picha
Picha
Picha
Picha

MAELEZO:

Ifuatayo, njia ya "setDifficulty" itahitaji kuundwa na kitufe cha kuanza upya kilicho chini ya skrini ya mchezo kitahitaji kuanza kufanya kazi (kwa kuunda njia ya "kuanzisha upya" ili itekeleze inapobofyewa na mtumiaji).

Kwanza, njia ya "setDifficulty" itahitaji kutekelezwa katika taarifa-ikiwa nyingine ya vifungo vya ugumu katika njia ya "mchakato" na kwa njia ya "kuanzisha upya". Mistari ya nambari na njia zilizotekelezwa kwa njia hii ni rahisi sana. Katika njia ya "setDifficulty", tutaongeza idadi fulani ya zero (zisizo za mabomu) na nines (mabomu) kwenye orodha ya "gridi" (kupitia kazi mbili anuwai ndani ya kila taarifa ya-ikiwa), na kisha tutachanganya orodha ya "gridi ya taifa" (pamoja na kazi ya kuchakachua maktaba bila mpangilio) ndani ya njia ya "setDifficulty" (baada ya taarifa za iwapo nyingine zitekelezwe). Uwiano wa ziro na nines utaamuliwa na "kamba" inayobadilika imewekwa kwa kamba gani ("rahisi": 34-6, "kati": 28-12, "ngumu": 16-24).

Pili, katika njia ya "kuanzisha upya", tutaweka vigeuzi "index" na "NumOfMinesLEFT" kuwa sifuri ulimwenguni, tupu orodha zote za "hadhi" na "gridi" ulimwenguni, weka upya orodha ya "hadhi" na kazi anuwai (na kuongeza masharti ya herufi arobaini ya "n" kwenye orodha ya "hadhi"), na wito kwa njia ya "setDifficulty".

Hatua ya 6: Matukio ya Kukomesha Mchezo

Matukio ya Kukomesha Mchezo
Matukio ya Kukomesha Mchezo
Matukio ya Kukomesha Mchezo
Matukio ya Kukomesha Mchezo
Matukio ya Kukomesha Mchezo
Matukio ya Kukomesha Mchezo
Matukio ya Kukomesha Mchezo
Matukio ya Kukomesha Mchezo

MAELEZO:

Kila mchezo wa minesweeper una matukio mawili ya kumaliza mchezo: kushinda na kupoteza. Ndani ya programu hii, tutatekeleza visa hivi viwili vya kumaliza mchezo na njia mbili mpya: njia ya "You_A_Winner_Son" na njia ya "GameOver". Kabla ya GUI kuburudishwa ndani ya njia ya "mchakato" na kulingana na faharasa zilizobadilishwa na njia mbili za kumaliza mchezo, kitufe cha kuonyesha kitabadilishwa ili kuwakilisha matokeo.

Kwanza, mtumiaji anapobofya kwenye tile ya mwisho isiyo ya bomu iliyofichwa, basi njia ya "You_A_Winner_Son" lazima itekelezwe. Tutakamilisha kazi hii kwa kuita njia ya "You_A_Winner_Son" kila wakati tile inabofya na tile inapatikana kuwa tile isiyo ya bomu (ndani ya njia za "operesheni" zilizotekelezwa kwa njia ya "mchakato"). Ikiwa hali za kushinda zimetimizwa, basi taarifa mbili ikiwa -ngine ndani ya njia ya "Wewe_A_Winner_Son" zitatekelezwa. Kauli ya kwanza ikiwa-nyingine itatekelezwa kila wakati bila kujali ikiwa mchezaji alishinda au la wakati njia hii inaitwa. Kulingana na "shida" inayobadilika ni sawa, algorithm fulani ambayo itaamua ni wangapi mabomu / mabomu yameachwa yamefichwa. Nambari kamili inayopatikana na hesabu hii itahifadhiwa katika "NumOfMinesLEFT" inayobadilika. Ifuatayo, kati ya taarifa mbili ikiwa -ngine algorithm nyingine itatekelezwa ili kupata idadi ya vigae vya kuanzia vilivyobaki (vigae visivyofungwa). Nambari kamili inayopatikana na algorithm hii itahifadhiwa katika "NumOfStartingTilesLEFT" inayobadilika. Kauli ya pili ikiwa-nyingine itatekelezwa kila wakati bila kujali ikiwa mchezaji alishinda au la wakati njia hii inaitwa. Kulingana na kile "shida" inayobadilika ni sawa, mojawapo ya taarifa tatu ikiwa-nyingine zinaweza kutekelezwa ikiwa hali zao zimetimizwa. Masharti yatategemea kile vigeuzi viwili "NumOfMinesLEFT" na "NumOfStartingTilesLEFT" sawa na. Ndani ya taarifa hizi tatu ikiwa -ngine, algorithm itatekelezwa ambayo itatoa kila kifungo kuwa bure (mchezo umekwisha).

Pili, mtumiaji anapobofya kwenye moja ya tiles zilizofichwa za bomu, basi njia ya "GameOver" inapaswa kutekelezwa. Tutakamilisha kazi hii kwa kuita njia ya "GameOver" kila wakati tile inabofya na tile inapatikana kuwa tile ya bomu (ndani ya njia za "operesheni" zilizotekelezwa kwa njia ya "mchakato"). Wakati njia ya "GameOver" inapoombwa, algorithm itatekelezwa ambayo itafanya kila tile ya kuanzia haina maana (mchezo umekwisha) na vigae vya bomu vilivyofichwa vitafunuliwa (kulingana na faharisi zinazolingana ndani ya "orodha ya gridi ya taifa, faharisi fulani katika orodha ya "hadhi" itapewa kamba ya herufi moja "b").

Tatu, onyesho la skrini ya ndani ya mchezo litasasishwa kila wakati GUI inapoburudishwa kwa kufanya mabadiliko machache sana kwa njia ya "setSLASHresetGUI". Baada ya gridi ya GUI kusanidiwa, tutaweka taarifa tatu ikiwa-nyingine ambapo kifungu cha kifungo cha kuonyesha cha sasa kimewekwa. Mojawapo ya taarifa tatu ikiwa-nyingine itatekelezwa kulingana na vile vigeuzi vifuatavyo ni sawa na: "GameOverDETECTOR", "ugumu," NumOfMinesLEFT ", na" NumOfStartingTilesLEFT ". Kama unaweza kujiuliza," GameOverDETECTOR "ni mpya kutofautisha. Mabadiliko haya yataundwa kabla ya taarifa-ikiwa nyingine kutekelezwa ndani ya njia ya "setSLASHresetGUI". Tofauti ya "GameOverDETECTOR" itakuwa sawa na nambari ambayo inapatikana kwa kutumia algorithm ambayo hupata faharisi ngapi ndani ya "gridi" orodha wamepeana idadi kamili ya tisini na tisa (jinsi vifungo vimefanywa kuwa visivyo na faida). Kulingana na ambayo ikiwa masharti ya taarifa nyingine yatatimizwa, upeanaji unaofanana wa onyesho utatokea.

Hatua ya 7: Kufanya Kitufe cha Kuanza Upya kiutendaji

Kufanya Kitufe cha Kuanzisha upya kiutendaji
Kufanya Kitufe cha Kuanzisha upya kiutendaji

MAELEZO:

Hatua hii hufanyika kuwa fupi zaidi. Kazi nyingi kwa hatua hii tayari imefanywa. Tunachohitaji kufanya sasa ni kutekeleza njia ya "kuanzisha upya" kila wakati kitufe cha kuanza upya kinabofya na mtumiaji.

Kwanza na mwishowe, tutafanya njia ya "kuanzisha upya" katika njia ya "mchakato" na taarifa ya-ikiwa. Ikiwa kamba "!" imesajiliwa, basi njia ya "kuanzisha upya" itatekelezwa. Tutalazimika pia kuunda kitufe kinachoitwa kuanzisha upya mwishoni mwa njia ya "setSLASHresetGUI" kabla ya yaliyomo kwenye gridi ya taifa kujazwa pamoja. Kitufe hiki cha kuanza upya kitashughulikia kamba "!" (amri lambda: self.process ("!")) na fanya njia inayofanana ya "kuanzisha upya" ndani ya njia ya "mchakato".

Ilipendekeza: