陳新龍
我們已經(jīng)學(xué)習(xí)了不少掌控板的小實(shí)驗(yàn),學(xué)到了OLED顯示圖片、文字和簡單動畫的方法;通過給掌控板寫入程序,制作一些有趣的小游戲。
今天我們結(jié)合圖案顯示和邏輯判斷做一個(gè)猜拳小游戲。當(dāng)玩家按下A鍵和B鍵,OLED屏幕的兩邊會隨機(jī)出現(xiàn)石頭剪刀布,程序會進(jìn)行邏輯判斷顯示勝方。
通過這個(gè)實(shí)例,你可以學(xué)習(xí)掌控板的按鍵功能、OLED顯示圖片功能,以及利用邏輯自動判斷猜拳結(jié)果。這樣可以綜合利用我們學(xué)過的知識,制作一個(gè)完整的猜拳游戲。
首先設(shè)置圖像顯示,猜拳的石頭剪刀布圖片在mPython軟件中已內(nèi)置,不需要我們外部導(dǎo)入,直接“獲取內(nèi)部圖像”從圖片素材庫中選擇石頭(?。?、剪刀(?。?、布(小)。設(shè)置在屏幕不同的位置顯示圖片,注意OLED顯示清空和OLED顯示生效(如圖1)。
接下來我們需要設(shè)計(jì)一下游戲進(jìn)行的步驟。兩個(gè)玩家參與游戲,一個(gè)按下A鍵,屏幕顯示一個(gè)隨機(jī)圖案,另外一個(gè)玩家按下B鍵,顯示一個(gè)隨機(jī)圖案,程序來判斷輸贏。
這中間需要解決幾個(gè)問題,首先輸出隨機(jī)圖案;其次系統(tǒng)如何知道出拳情況并開始進(jìn)行判斷;各種出拳情況如何進(jìn)行正確的判斷。下面看看解決這三個(gè)問題的思路吧。
第一,是設(shè)置隨機(jī)圖案,引入一個(gè)隨機(jī)數(shù)變量用它來設(shè)置隨機(jī)圖案的顯示。當(dāng)按下一個(gè)鍵的時(shí)候(A或者B),設(shè)計(jì)一個(gè)變量為1到3之間的隨機(jī)數(shù),根據(jù)隨機(jī)數(shù)和規(guī)則來顯示圖片,A鍵設(shè)置變量為X,B鍵設(shè)置變量為Y,具體代碼如圖2。
第二, 什么時(shí)候才讓系統(tǒng)進(jìn)行勝負(fù)判斷呢?按照日常經(jīng)驗(yàn)來看,只有A鍵和B鍵都按下,并且兩方都正常顯示圖像后才可以進(jìn)行猜拳判斷。還記得為了設(shè)置隨機(jī)圖片時(shí)增加的變量X和Y嗎?出拳后X和Y都是1到3的隨機(jī)數(shù)(1是石頭2是剪刀3是布),這樣在程序開始時(shí),我們可以設(shè)置X和Y變量都是0,只有當(dāng)X和Y都不為0的時(shí)候才執(zhí)行判斷(如圖3)。
接著就引出第三個(gè)問題了,如何能夠進(jìn)行正確的判斷呢?不能單純比較X和Y的數(shù)字大小,我們需要根據(jù)數(shù)字對應(yīng)的猜拳結(jié)果,石頭剪刀布之間的循環(huán)勝負(fù)來判斷,一共有九種關(guān)系(如表)。
根據(jù)勝負(fù)關(guān)系表格需要多條判斷,程序如圖4。
在邏輯判斷中我們使用了直接的方法,每種情況單獨(dú)判斷,沒有使用判斷的嵌套,這樣代碼比較長,但不容易出錯(cuò)適合初學(xué)者。
我們做出來的游戲是給別人玩的,在實(shí)現(xiàn)基本功能后還需要從用戶的角度去優(yōu)化游戲體驗(yàn)。當(dāng)游戲開始時(shí),增加一個(gè)界面,簡單說明游戲名稱和操作方法(如圖5)。
增加按下P鍵表示游戲開始,當(dāng)觸摸P鍵后,游戲初始化,X和Y的值為0,OLED的內(nèi)容全部清空。自定義xianshi函數(shù)用于圖像的顯示,并且增加兩個(gè)有參變量J和K,J代表變量X的值,K代表坐標(biāo)X軸的位置,方便內(nèi)置圖像的顯示。
新增自定義函數(shù),將參數(shù)J和K傳入函數(shù)中,當(dāng)J=1的時(shí)候在K的位置上顯示石頭,當(dāng)J=2的時(shí)候在K的位置顯示剪刀,當(dāng)J=3的時(shí)候在K的位置顯示布。這里增加有參變量主要是為了能夠節(jié)約代碼總量,只需要傳入?yún)?shù)就可以把兩邊圖案都顯示出來,方便又輕松(如圖6)。
總的來說猜拳小游戲在程序設(shè)計(jì)上還是有點(diǎn)難度的,主要是將已經(jīng)學(xué)過的知識點(diǎn)綜合運(yùn)用在游戲編寫中。在完成基本功能后,盡可能地優(yōu)化流程并減少代碼量。這樣可以鍛煉自己的歸納整理能力,提高程序設(shè)計(jì)的能力。