Мазмұны:

Minesweeper-Raspberry-Pi-Edition: 7 қадам (суреттермен)
Minesweeper-Raspberry-Pi-Edition: 7 қадам (суреттермен)

Бейне: Minesweeper-Raspberry-Pi-Edition: 7 қадам (суреттермен)

Бейне: Minesweeper-Raspberry-Pi-Edition: 7 қадам (суреттермен)
Бейне: windows 7 End 😭😭😭 2024, Шілде
Anonim
Мина тазалаушы-таңқурай-Pi-шығарылымы
Мина тазалаушы-таңқурай-Pi-шығарылымы
Мина тазалаушы-таңқурай-Pi-шығарылымы
Мина тазалаушы-таңқурай-Pi-шығарылымы

Менің Луизиана Техникалық Университетіндегі CSC 130 сериясындағы соңғы жобам - Minesweeper Raspberry Pi Edition. Бұл жобада мен Python бағдарламалау тілінің Tkinter кітапханасын пайдалану арқылы классикалық мина іздеуші ойынын қайта құруға тырыстым. Шахталықтар ойынының торы ені сегіз плиткадан және биіктігі бес плиткадан тұрады. Жобаның пішімі Python 2.7 орнатылған Raspberry Pi пайдалану үшін қолайлы және жетілдірілген.

Minesweeper Raspberry Pi Edition соңғы жобасының коды мен суреттерін келесі сілтеме бойынша жүктеуге болады:

Мина тазалаушы-таңқурай-Pi-шығарылымы

Жабдықтар

x1 Raspberry Pi

Python 2.7 Raspberry Pi -де орнатылған

Microsoft Powerpoint (немесе түймелерге суреттер жасауға арналған басқа бағдарламалық жасақтама)

1 -қадам: Түймешік суреттерін жасаңыз

Түймешік суреттерін жасаңыз
Түймешік суреттерін жасаңыз

ТҮСІНІК:

GUI құрайтын әрбір түймені жасау қажет. Бұл тапсырманы орындау үшін мен Microsoft Powerpoint көмегімен түймелерде көрсетуге қажетті суреттерді жасадым.

Алдымен мен Microsoft Powerpoint көмегімен мина тазалаушы торды (бос, боб, нөл, бір, екі, үш, төрт, бес, алты, жеті және сегіз) жасауға қажетті он тақтайшаны жасадым.

Екіншіден, мен Microsoft Powerpoint көмегімен мәзір экранына қажетті төрт суретті (мәзірді көрсету, қиындықты жеңілдету түймешігі, орташа күрделілік түймесі және қиын қиындық түймесі) жасадым.

Үшіншіден, мен Microsoft Powerpoint көмегімен қайта іске қосу батырмасына қажетті суретті және басқа дисплей түймелеріне қажетті суреттерді («ойын аяқталды» дисплейі, «сен ұтасың» дисплейі және «ережелер» дисплейі) жасадым.

Төртіншіден, сіз суреттердің өлшемін экранға орналастыру үшін өзгертуіңіз керек. Rasberry Pi үшін мен терезенің келесі өлшемдерін қолдандым (ұзындығы мен ені бойынша пиксельдерге қатысты): 432x576.

2 -қадам: Бағдарламаны форматтау

Формат бағдарламасы
Формат бағдарламасы

ТҮСІНІК:

Кез келген нақты бағдарламалауды бастамас бұрын, біз қажет кітапханаларды импорттап, бағдарламамыздың негізгі бөлігін жазуымыз керек.

Біріншіден, біз Ткинтер кітапханасынан * импорттауымыз керек және кездейсоқ кітапханадан араластыруымыз керек. Екіншіден, біз бағдарламаның негізгі бөлігінде код бойынша келесі қадамдарды орындауымыз керек: терезені құру, тақырыптық терезені орнату, GUI генерациялау және GUI -ді көрсету және пайдаланушының өзара әрекеттесуін күту. Бұл код Tkinter кітапханасына қатысты дұрыс форматта жазылған (дұрыс пішімдеу үшін нұсқаулықта берілген кодты қараңыз).

3 -қадам: GUI құрыңыз (мәзір және мина тазалаушы тор)

GUI құру (мәзір және мина тазалаушы тор)
GUI құру (мәзір және мина тазалаушы тор)
GUI құру (мәзір және мина тазалаушы тор)
GUI құру (мәзір және мина тазалаушы тор)
GUI құру (мәзір және мина тазалаушы тор)
GUI құру (мәзір және мина тазалаушы тор)
GUI құру (мәзір және мина тазалаушы тор)
GUI құру (мәзір және мина тазалаушы тор)

ТҮСІНІК:

Бағдарлама іске қосылған кезде мәзір экраны ашылады. Қиындық таңдалғаннан кейін (мәзір экранындағы қиындық түймелерінің бірін басу арқылы) GUI мина тазалаушы тормен, дисплеймен және қайта іске қосу түймесімен жаңартылады. Сіз енді GUI -мен жұмыс жасай бастағаныңыз үшін, біз тек мәзірді іске қосуды, мәзірдің қиыншылық түймелерін іске қосуды және GUI -ді мина іздеуші торымен ойын экранына жаңартуды алуымыз керек.

Біріншіден, MainGUI класының конструкторындағы «setupMenu» әдісін шақыру арқылы бағдарлама іске қосылған кезде мәзір экранының өзін көрсетуге болады.

Екіншіден, біз мәзірдің қиындық түймелерінің әрқайсысы «процесс» әдісін қосу арқылы басылған кезде кодтың белгілі бір жолдарын орындай алады (сонымен қатар lambda: self.process («returnButtonName») командасының түймешіктер функциясының параметрлеріне қосылуы керек) әр қиындық түймесін құруда). «Процесс» әдісінде if-else деген үш мәлімдеме құрылады және батырманың тең болуына байланысты басқа кодтың басқа әдістері мен жолдарын орындайды (түйме соңғы рет тіркелген түйменің атауына тең).

Үшіншіден, мәзір экраны жоғары тұрғанда және егер пайдаланушы қиындық түймелерінің бірін шертсе, онда бағдарлама белгілі бір мәнді «қиындық» айнымалысына сақтайды (қиындық «оңай», «орташа» немесе «қатты» негізінде) Қандай қиындық түймесі басылады). Бұл батырманы басу қай түйменің атауы соңғы рет тіркелгеніне негізделген if-else операторының қайсысы орындалатынын біледі (қандай түйме тең). Сонымен қатар, «қиындық» айнымалысын қайта тағайындау үшін бізге алдымен іске қосу қажет болады. Бұл «қиындық» айнымалысын бос жол ретінде «MainGUI» класы құрылғанға дейін орнатамыз.

Төртіншіден, GUI -ді «setupMenu» әдісімен жасалған түймелерден тазартып, «clearMenu» әдісін жасаңыз (button.destroy () функциясын бірнеше жағдайда қолданыңыз) және «процесс» әдісінде «clearMenu» әдісін шақырыңыз (астында) қиындықтар түймесінің әрқайсысы қиындық ауыспалы тағайындаудан кейін тіркеледі).

Бесіншіден, «setSLASHresetGUI» әдісін жасау арқылы GUI жаңартыңыз (түймелер «setupMenu» әдісіндегідей орындалады) және «setSLASHresetGUI» әдісін «процесс» әдісінде шақыру арқылы (қиындық түймелерінің әрқайсысының астында тіркеуден кейін тіркеледі) қиындықты айнымалы тағайындау және «clearMenu» әдісін шақыру).

Сонымен қатар, барлық түймелер «setSLASHresetGUI» әдісінде тағайындалмас бұрын, біз тордағы жолдар мен бағандарды конфигурациялауымыз керек, ал барлық түймелер «setSLASHresetGUI» әдісінде тағайындалғаннан кейін біз тордағы барлық мазмұнды жинауымыз керек (қараңыз. дұрыс форматтауды көру үшін нұсқаулықта берілген код).

4-қадам: Ойын ішіндегі экрандағы түймелерді жұмыс істетіңіз

Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз
Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз
Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз
Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз
Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз
Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз
Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз
Ойын ішіндегі экрандағы түймелерді жұмыс жасайтын етіп жасаңыз

ТҮСІНІК:

Түймешіктер басылған кезде кодтың белгілі бір жолдарын орындауы үшін бізге «процесс» әдісіндегі әдістерді орындау қажет болады. Бұл тапсырманы орындау үшін бізге бірнеше жаңа әдістер, айнымалылар мен тізімдер жасау қажет болады.

Біріншіден, біз екі тізім жасаймыз. Онда «тор» деп аталатын тізім болады. Бұл «тор» тізімі тек 9 және 0 бүтін сандарынан тұрады. Бұл тізімде тоғыз бомбаны, ал нөлдер бомбасызды білдіреді. Бағдарлама тақтайшаның бомба екенін немесе болмайтынын осылайша ажыратады. Екінші тізім жасалады және ол «мәртебе» деп аталады. Бұл «күй» тізімі тек бір таңбадан тұрады («0», «1», «2», «3», «4», «5», «6», «7», «8», «b» «). Бұл тізімде әрбір таңба жолы белгілі бір суретке сәйкес келеді. Бағдарлама мина іздеуші торындағы әр түймеде қандай кескінді көрсету керектігін осылай біледі. Кеніштер торындағы әрбір түйменің торда орналасуына байланысты әр тізімде сәйкес индексі болады. Сәйкес индекс келесі процедурамен тағайындалады (түйме нөмірі - 1). Мысалы, әр тізімдегі сәйкес индекс түймешігі нөлге тең. Ақырында, бұл екі тізім «MainGUI» класы орындалмай тұрып орындалады және «MainGUI» класынан тыс құрылады. «Тор» класы бос тізім ретінде құрылады (тор = ), ал «күй» тізімі диапазон функциясы арқылы құрылады («күй» тізіміне «n» қырық бір таңбалы жолды қосу).

Екіншіден, біз оны қоршап тұрған миналардың санын анықтай алатын және түймені басқан кезде шақыруға болатын әр түрлі әдістерді жасаймыз (қай әдіс орындалатыны түйменің орналасуымен анықталады). Бұл әдістер біздің мина анализаторлары деп аталады. Бұл әдістер «NumOfMines» деп аталатын есептегішті көбейтеді және плитаны қоршап тұрған қанша бомбаны анықтау үшін «тор» тізіміндегі белгілі бір индекстерді қолданады. «NumOfMines» айнымалысы ішінде сақталатын жол «күй» тізіміндегі сәйкес индексті ауыстыру үшін пайдаланылады. Енді сіз бағдарламаның қандай индексті қолдану керектігін қалай білетініне таң қалуыңыз мүмкін. «Процесс» әдісінде түйме тіркелгенде, «индекс» айнымалысы құрылады/белгілі бір бүтін санға қайта тағайындалады (түйме тіркейтін жолдың негізінде). Жасалған әдістердің бірі тақтайшаның орналасуын және оны қоршап тұрған тақтайшалардың индекстерін білу үшін тағайындалған индексті қолданады (әдіс ішіндегі алгоритм мұны анықтайды). Сонымен қатар, «индекс» айнымалысын қайта тағайындау үшін алдымен оны сыныптан тыс уақытта енгізу қажет болады. Сонымен, біз «индекс» айнымалысын «MainGUI» класы құрылғанға дейін нөлдік бүтін сан ретінде алдын ала орнатамыз.

Үшіншіден, «операциялық» әдістер құрылады. Түйме тіркелген сайын «операция» әдісі орындалады. Бұл «операция» әдістері «процесс» әдісінде орындалады. «Процесс» әдісінде if-else бірнеше операторлары қай батырманың басылғанын анықтайды (түйме неге тең екеніне негізделген). Бұл жерде белгілі бір «операция» әдісі шақырылады (if-else операторларында).

Төртіншіден, біз батырмалардың қалай жұмыс істейтінін білеміз. Бұрын айтылғандай, if-else бірнеше операторлары «процесс» әдісінде орналасқан және түйменің тең болуына байланысты басқа кодтың басқа әдістері мен жолдарын орындайды (түйме соңғы тіркелген жолға тең). Егер if-else мәлімдемелерінің ішінде келесі тәртіп бойынша орын алады: индекс бүкіл әлем бойынша тағайындалады, «мәртебе» тізіміндегі сәйкес индекс «b» жолына қайта тағайындалады (егер «тор» тізімінің сәйкес индексі тең болса) бүтін тоғыз)) сәйкес «операция» әдісі орындалады (егер «тор» тізімінің сәйкес индексі нөлге тең болса), «мәртебе» тізіміндегі сәйкес индекс айнымалыға тең жолға қайта тағайындалады «NumOfMines» (егер «тор» тізімінің сәйкес индексі нөлге тең болса) және GUI «setSLASHresetGUI» әдісін шақыру арқылы жаңартылады.

5 -қадам: «setDifficulty» әдісі және «қайта бастау» әдісі

Кескін
Кескін
Кескін
Кескін

ТҮСІНІК:

Әрі қарай, «setDifficulty» әдісін жасау керек және ойын ішіндегі экранның төменгі жағында орналасқан қайта іске қосу түймесі жұмыс істеуі керек (оны пайдаланушы басқан кезде оны орындау үшін «қайта іске қосу» әдісін жасау керек).).

Біріншіден, «setDifficulty» әдісін «процесс» әдісіндегі қиындық түймелерінің if-else операторларында және «қайта бастау» әдісінде енгізу қажет болады. Бұл әдіспен орындалатын кодтар мен әдістердің жолдары өте қарапайым. «SetDifficulty» әдісінде біз нөлдердің (бомбасыз) және тоғыздың (бомбаның) белгілі бір санын «торлар» тізіміне қосамыз (әр if-else операторындағы екі диапазон функциясы арқылы), содан кейін біз «setDifficulty» әдісінің ішіндегі «grid» тізімі (кездейсоқ кітапхананың араласу функциясымен) (if-else операторлары орындалғаннан кейін). Нөлдердің тоғызға қатынасы «қиындық» айнымалысы қандай жолға орнатылғанына байланысты анықталады («жеңіл»: 34-6, «орта»: 28-12, «қатты»: 16-24).

Екіншіден, «қайта іске қосу» әдісінде біз «index» және «NumOfMinesLEFT» айнымалы мәндерін бүкіл әлем бойынша нөлге қоямыз, «статус» және «тор» тізімдерін жаһандық түрде босатамыз, «мәртебе» тізімін диапазон функциясымен қалпына келтіреміз (қосу «мәртебе» тізіміне «n» қырық бір таңбалы жол)) және «setDifficulty» әдісін шақырыңыз.

6-қадам: Ойынды аяқтайтын сценарийлер

Ойынның аяқталу сценарийлері
Ойынның аяқталу сценарийлері
Ойынның аяқталу сценарийлері
Ойынның аяқталу сценарийлері
Ойынның аяқталу сценарийлері
Ойынның аяқталу сценарийлері
Ойынның аяқталу сценарийлері
Ойынның аяқталу сценарийлері

ТҮСІНІК:

Әрбір мина іздеуші ойынында ойынның аяқталатын екі сценарийі бар: жеңіс пен жеңіліс. Бұл бағдарлама аясында біз ойынның екі сценарийін екі жаңа әдіспен жүзеге асырамыз: «You_A_Winner_Son» әдісі және «GameOver» әдісі. GUI «процесс» әдісінде жаңартылмас бұрын және ойынның екі сценарий әдісімен өзгертілген индекстерге негізделген, нәтижені дұрыс көрсету үшін көрсету түймесі өзгертіледі.

Біріншіден, қолданушы бомбасыз соңғы жасырылған тақтайшаны басқанда, «You_A_Winner_Son» әдісі орындалуы керек. Біз бұл тапсырманы «You_A_Winner_Son» әдісін шақыру арқылы аяқтаймыз, егер тақта басылған сайын және плитка бомбасыз плитка болып табылса («процесс» әдісінде орындалатын «операция» әдістерінің ішінде). Егер ұту шарттары орындалса, онда «You_A_Winner_Son» әдісіндегі if-else екі мәлімдемесі орындалады. Бірінші if-else операторы бұл әдіс шақырылған кезде ойыншы жеңді ме, жоқ па, әрқашан орындалады. «Қиындық» айнымалысы неге тең екеніне сүйене отырып, қанша мина/бомба жасырылғанын анықтайтын белгілі бір алгоритм. Бұл алгоритммен табылған бүтін сан «NumOfMinesLEFT» айнымалысында сақталады. Әрі қарай, if-else екі мәлімдемесінің арасында қалған тақтайшалар санын табу үшін басқа алгоритм орындалады (басылмаған тақтайшалар). Бұл алгоритммен табылған бүтін сан «NumOfStartingTilesLEFT» айнымалысында сақталады. Екінші if-else операторы бұл әдіс шақырылған кезде ойыншы жеңді ме, жоқ па, әрқашан орындалады. «Қиындық» айнымалысы неге тең болатынына байланысты, егер олардың шарттары орындалса, if-else үш операторының бірі орындалуы мүмкін. Шарттар «NumOfMinesLEFT» және «NumOfStartingTilesLEFT» екі айнымалысы неге тең болатынына негізделеді. Осы үш if-else операторының ішінде әр түймені жарамсыз ететін алгоритм орындалады (ойын аяқталды).

Екіншіден, пайдаланушы бомбаның жасырын тақтайшаларының бірін шертсе, онда «GameOver» әдісі орындалуы керек. Біз бұл тапсырманы «GameOver» әдісін шақыру арқылы аяқтаймыз, егер плитка басылған сайын және плитка бомба тақтайшасы болып табылса («процесс» әдісінде орындалатын «операция» әдістерінің ішінде). «GameOver» әдісі шақырылған кезде, әрбір бастапқы тақтайшаны жарамсыз ететін ойын алгоритмі орындалады (ойын аяқталды) және жасырын бомба тақтайшалары ашылады («тор» тізіміндегі сәйкес индекстер негізінде, белгілі бір индекстер) «күй» тізімінде «b» бір таңбалы жолға қайта тағайындалады).

Үшіншіден, GUI жаңартылған сайын ойын ішіндегі экранның дисплейі «setSLASHresetGUI» әдісіне аз ғана өңдеулер енгізу арқылы жаңартылады. GUI торы конфигурацияланғаннан кейін, ағымдағы дисплей түймесінің тағайындалуы орналастырылған үш if-else операторын орналастырамыз. If-else үш мәлімдемесінің бірі келесі айнымалыларға тең болатындығына байланысты орындалады: «GameOverDETECTOR», «қиындық», «NumOfMinesLEFT» және «NumOfStartingTilesLEFT». Сіз ойлайтын шығарсыз, «GameOverDETECTOR» айнымалысы жаңа Бұл айнымалы «setSLASHresetGUI» әдісінде if-else операторлары орындалмай тұрып жасалады. «GameOverDETECTOR» айнымалысы «торда» қанша индексті табатын алгоритм көмегімен табылған бүтін санға тең болады. тізім тоқсан тоғызға қайта тағайындалды (түймелер қалай жарамсыз болып қалады). If-else операторының шарттары орындалған кезде дисплейге сәйкес қайта тағайындау орын алады.

7 -қадам: Қайта іске қосу батырмасын жұмысқа қосу

Қайта іске қосу батырмасын жұмысқа қосу
Қайта іске қосу батырмасын жұмысқа қосу

ТҮСІНІК:

Бұл қадам ең қысқа болады. Бұл қадамның көп бөлігі қазірдің өзінде жасалды. Бізге енді тек қайта іске қосу түймесін пайдаланушы басқан сайын «қайта бастау» әдісін орындау қажет.

Біріншіден, біз «процесс» әдісінде «қайта бастау» әдісін if-else операторымен орындаймыз. Егер жол «!» тіркелген, содан кейін «қайта іске қосу» әдісі орындалады. Сондай -ақ, «setSLASHresetGUI» әдісінің соңында тордың мазмұны жиналмай тұрып, қайта іске қосу деп аталатын түймені жасау керек болады. Бұл қайта іске қосу түймесі «!» Жолын өңдейді. (lambda командасы: self.process («!»)) және «процесс» әдісінде сәйкес «қайта іске қосу» әдісін орындаңыз.

Ұсынылған: