本程序是基于常看到的一款小游戲貪吃蛇而設(shè)計(jì)的,即有一條小蛇不停地在屏幕上游走,吃各個(gè)方向上出現(xiàn)的食物(姑且稱它為“食物”),越吃越長(zhǎng),只要蛇頭碰到屏幕四壁或者碰到自己的身子,游戲就立刻結(jié)束。本程序基于傳統(tǒng)貪吃蛇游戲的特點(diǎn)利用LabVIEW制作的一款完整的迷你貪吃蛇游戲。 2.1系統(tǒng)功能 (1)小蛇在屏幕上不停的游走; (2)用鍵盤左右方向鍵可控制小蛇的移動(dòng)方向; (3)吃過(guò)一個(gè)食物后小蛇長(zhǎng)度增加并隨機(jī)產(chǎn)生另一個(gè)食物; (4)小蛇碰到四壁或者碰到自己的身體時(shí)游戲結(jié)束并給出得分和提示是否繼續(xù); (5)游戲可以有多種難度選擇等。 2.2系統(tǒng)軟件組成 整個(gè)系統(tǒng)由前面板和程序控制框圖兩部分,其中程序控制框圖又分為XY坐標(biāo)子程序,小蛇的移動(dòng)控制模塊,食物增減的控制,.撞墻事件和自殺事件模塊,還有最為重要的主程序程序框圖。 2.3主程序組 主程序的組成:包含了一個(gè)主要while循環(huán)結(jié)構(gòu)及分支while循環(huán)、順序結(jié)構(gòu)、條件結(jié)構(gòu)、初始化局部變量分?jǐn)?shù)、初始化變量模塊子VI、按鍵值賦值模塊子VI、根據(jù)按鍵值定義蛇動(dòng)作模塊子VI、顯示二維數(shù)組賦值模塊子VI、判斷能否繼續(xù)游戲判定子VI、食物隨機(jī)生成子VI、蛇吃到食物處理子VI、蛇移動(dòng)子VI。分?jǐn)?shù)顯示模塊:放在吃掉食物為真的情況下,不斷加1達(dá)到分?jǐn)?shù)累計(jì)的作用。
2.4 軟件設(shè)計(jì)思想 進(jìn)入游戲界面之后可選擇游戲難度。程序隨機(jī)定位貪吃蛇初始位置,當(dāng)然也可以選擇退出游戲。開(kāi)始之后便進(jìn)入游戲。其流程圖如下。
圖2-1主程序流程圖 第三章 系統(tǒng)軟件部分設(shè)計(jì)3.1系統(tǒng)整體程序框圖 系統(tǒng)整體程序框圖就是用戶所編寫的主程序,也就是用戶界所對(duì)應(yīng)的底層程序,其中包括整個(gè)程序的運(yùn)行控制,事件結(jié)構(gòu)的設(shè)置,調(diào)用各種子程序的命令。
圖3-1 貪吃蛇小游戲系統(tǒng)程序框圖 3.2.系統(tǒng)前面板界面 圖3-2為用戶界面,用戶界面的實(shí)現(xiàn)主要依靠 LabVIEW 提供的各種顯示控件,包括波形顯示控件、數(shù)據(jù)顯示控件,指示燈顯示報(bào)警控件等。程序運(yùn)行時(shí),用戶可以在前面板進(jìn)行控制,同時(shí)后面板也在運(yùn)行,只是用戶只需要控制前面板就可以了,如果需要更改程序時(shí),就可以在后面板更改程序功能[41]。
圖3-2貪吃蛇小游戲系統(tǒng)前面板 下面將詳細(xì)介紹各個(gè)模塊的設(shè)計(jì)原理。3.3各部分模塊子程序設(shè)計(jì)原理 本系統(tǒng)的軟件測(cè)試部分主要包括以下幾個(gè)模塊:XY坐標(biāo)模塊、小蛇的移動(dòng)控制模塊、食物增減的控制模、自殺事件模塊和撞墻事件處理模塊。 圖3-3系統(tǒng)軟件設(shè)計(jì)部分組成框圖 3.4 XY坐標(biāo)模塊 此程序的作用是把蛇的活動(dòng)按有無(wú)蛇身、蘋果賦值。通過(guò)XY坐標(biāo)來(lái)顯示蛇移動(dòng)的軌跡,同時(shí)刪除已走過(guò)的軌跡路徑,避免與新的路徑混淆使程序出錯(cuò)。是這樣實(shí)現(xiàn)的:先把原來(lái)的x,y數(shù)組簇按名稱解除捆綁,然后用兩個(gè)替換數(shù)組子集,這樣就可以用新的x,y坐標(biāo)替換原本的x,y坐標(biāo),新的x,y坐標(biāo)按名稱捆綁,然后輸出新的x,y坐標(biāo)簇。同時(shí)把原來(lái)的x,y坐標(biāo)簇按名稱解除捆綁,用兩個(gè)刪除數(shù)組元素刪除原本的x,y坐標(biāo)簇,從而實(shí)現(xiàn)功能。程序框圖見(jiàn)下面:
圖3-4輸入XY程序框圖
圖3-5刪除XY坐標(biāo)模塊 圖3-6 XY坐標(biāo)前面板顯示 3.5小蛇的移動(dòng)控制模塊模塊 由于蛇本身是一個(gè)可增加元素的數(shù)組,所以用一個(gè)含兩個(gè)一維方向數(shù)組的簇來(lái)進(jìn)行操作。每次讀取坐標(biāo)或者增添完坐標(biāo)后都要用簇解綁及簇捆綁來(lái)處理,這樣也便于在XY圖中顯示。 控制小蛇游走的方法是給定一個(gè)方向direction,然后利用這個(gè)direction的值來(lái)控制當(dāng)前點(diǎn)與下一點(diǎn)的變換。小蛇不停的移動(dòng),為了使之與蘋果碰撞后能便捷的增加長(zhǎng)度,這里采用這樣的方法實(shí)現(xiàn):小蛇每按direction移動(dòng)一個(gè),就在小蛇數(shù)組的開(kāi)頭添加一個(gè)點(diǎn)(此時(shí)這兩個(gè)點(diǎn)是相鄰的),然后將添加的點(diǎn)與蘋果所在坐標(biāo)比較,如果不同,就將蛇數(shù)組的最后一個(gè)元素刪除,表示沒(méi)有吃到蘋果;如果相同,就保留這個(gè)元素(此時(shí),相對(duì)于前一個(gè)位置時(shí),小蛇的長(zhǎng)度增加了),并且刪除這個(gè)蘋果,重新隨機(jī)產(chǎn)生另一個(gè)蘋果。循環(huán)往復(fù)(在while循環(huán)上添加移位寄存器)直到游戲結(jié)束。插入蛇頭新坐標(biāo)的子程序框圖如下
|