基于labview的貪吃蛇游戲程序設(shè)計(jì)基礎(chǔ).doc_第1頁(yè)
基于labview的貪吃蛇游戲程序設(shè)計(jì)基礎(chǔ).doc_第2頁(yè)
基于labview的貪吃蛇游戲程序設(shè)計(jì)基礎(chǔ).doc_第3頁(yè)
基于labview的貪吃蛇游戲程序設(shè)計(jì)基礎(chǔ).doc_第4頁(yè)
基于labview的貪吃蛇游戲程序設(shè)計(jì)基礎(chǔ).doc_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于labview的貪吃蛇游戲程序設(shè)計(jì)一、 程序設(shè)計(jì)背景本程序是基于??吹降囊豢钚∮螒蜇澇陨叨O(shè)計(jì)的,即有一條小蛇不停地在屏幕上游走,吃各個(gè)方向上出現(xiàn)的蘋果(姑且稱它為“蘋果”),越吃越長(zhǎng),只要蛇頭碰到屏幕四壁或者碰到自己的身子,游戲就立刻結(jié)束。本程序基于傳統(tǒng)貪吃蛇游戲的特點(diǎn)利用LabVIEW制作的一款完整的迷你貪吃蛇游戲。本程序的主要實(shí)現(xiàn)如下功能:1.小蛇在屏幕上不停的游走;2.用鍵盤方向鍵可控制小蛇的移動(dòng)方向;3.吃過(guò)一個(gè)蘋果后小蛇長(zhǎng)度增加并隨機(jī)產(chǎn)生另一個(gè)蛋;4.小蛇碰到四壁或者碰到自己的身體時(shí)游戲結(jié)束并給出得分和提示是否繼續(xù);5.游戲可以有多種難度選擇等。二、程序介紹 (一)前面板的設(shè)置采用LabVIEW中提供的“Express XY圖”作為游戲界面,顯示蛇和蘋果,這樣就可以通過(guò)方向鍵來(lái)移動(dòng)小蛇到想要去的地方。對(duì)XY圖的屬性做如下修改:1.去除標(biāo)尺及標(biāo)簽,設(shè)置標(biāo)尺為0:1000;2.去除兩個(gè)方向的網(wǎng)格,使最終屏幕全黑;3.修改各條曲線的寬度、顏色和點(diǎn)樣式,使小蛇蘋果能夠以不同樣式顯示。結(jié)果如右圖所示:方形紅色的為蘋果,圓形長(zhǎng)條的為小蛇。(二)程序框圖設(shè)計(jì)如何控制蛇移動(dòng)去吃蘋果同時(shí)避免碰到自己的身體或者撞墻是一個(gè)復(fù)雜的程序。特此將程序分成多個(gè)子程序來(lái)編寫使程序簡(jiǎn)單明了。下面分別介紹貪吃蛇程序中的各個(gè)子程序。1.XY坐標(biāo)子程序此程序的作用是把蛇的活動(dòng)按有無(wú)蛇身、蘋果賦值。通過(guò)XY坐標(biāo)來(lái)顯示蛇移動(dòng)的軌跡,同時(shí)刪除已走過(guò)的軌跡路徑,避免與新的路徑混淆使程序出錯(cuò)。程序框圖見(jiàn)下面:圖一 輸入XY坐標(biāo)圖二 刪除XY坐標(biāo)2.小蛇的移動(dòng)控制由于蛇本身是一個(gè)可增加元素的數(shù)組,所以用一個(gè)含兩個(gè)一維方向數(shù)組的簇來(lái)進(jìn)行操作。每次讀取坐標(biāo)或者增添完坐標(biāo)后都要用簇解綁及簇捆綁來(lái)處理,這樣也便于在XY圖中顯示??刂菩∩哂巫叩姆椒ㄊ墙o定一個(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)的子程序框圖如下:3.蘋果增減的控制對(duì)于蘋果的操作主要是判斷當(dāng)前蘋果的位置與蛇頭位置是否相同,在相同的情況下,需要將蘋果的位置重新賦值,這是處理一個(gè)蘋果的時(shí)候。如果要設(shè)計(jì)多個(gè)蘋果,只需判斷當(dāng)前蘋果的個(gè)數(shù)是否減少,并在減少后隨機(jī)產(chǎn)生一個(gè)新的蘋果。程序里一次性最多可以產(chǎn)生20個(gè)蘋果,用數(shù)組存儲(chǔ)。當(dāng)蘋果的數(shù)量明顯少于最大值時(shí)就隨機(jī)產(chǎn)生一個(gè)蘋果。當(dāng)蛇頭與蘋果的位置相同時(shí)消掉該蘋果,否則保留該蘋果。為了便于蘋果與蛇同時(shí)在屏幕上顯示,特將蘋果套用蛇數(shù)組的格式綁定為簇,然后與蛇數(shù)組合并為一個(gè)數(shù)組后同時(shí)顯示在XY圖上。程序框圖如下:4.撞墻事件把蛇當(dāng)前所在的位置的坐標(biāo)與圍墻的寬度作比較,如果超出了寬度范圍則視為撞墻事件游戲結(jié)束,否則游戲繼續(xù)。在設(shè)計(jì)程序中運(yùn)用了兩個(gè)、兩個(gè)和一個(gè)邏輯與運(yùn)算符號(hào)參與編輯,通過(guò)X、Y坐標(biāo)與World Size作比較,最后結(jié)果為真則游戲繼續(xù),否則游戲結(jié)束。程序框圖如下:5.自殺事件自殺事件比撞墻事件復(fù)雜,不過(guò)思路都一樣,都是通過(guò)坐標(biāo)的比較來(lái)判斷。不同是的自殺事件是通過(guò)判斷蛇頭的坐標(biāo)與蛇身的坐標(biāo)是否一致,如果一致則認(rèn)為發(fā)生了自殺事件,并跳出循環(huán)結(jié)束游戲,否則游戲繼續(xù)。再此VI中運(yùn)用了兩個(gè)條件結(jié)構(gòu)來(lái)判斷是否結(jié)束程序;運(yùn)用一個(gè)WHILE循環(huán)比較蛇頭與蛇身的坐標(biāo),當(dāng)蛇頭坐標(biāo)與蛇身坐標(biāo)一致時(shí)跳出循環(huán)游戲結(jié)束(只有當(dāng)蛇的位移坐標(biāo)有兩個(gè)以上時(shí)才開(kāi)始判斷是否發(fā)生自殺事件)。以下是本VI的程序框圖:6.主程序程序框圖主程序程序框圖運(yùn)用平鋪式順序結(jié)構(gòu),第一幀是游戲介紹,第二幀是程序主程序。在主程序的上半部分采用一個(gè)while循環(huán)、一個(gè)事件結(jié)構(gòu)和一個(gè)條件結(jié)構(gòu)來(lái)設(shè)置游戲的輸入循環(huán),根據(jù)按鍵以否來(lái)判斷游戲的下步動(dòng)作方向。在主程序的下半部分運(yùn)用while循環(huán)來(lái)控制游戲的循環(huán)。游戲結(jié)束時(shí)通過(guò)用戶的輸入指令來(lái)決定游戲是否循環(huán),輸入“Yes”指令時(shí)游戲繼續(xù),否則游戲結(jié)束跳出循環(huán)。在while循環(huán)里再運(yùn)用一個(gè)while循環(huán)來(lái)控制游戲的運(yùn)動(dòng)循環(huán),當(dāng)發(fā)生“自殺”事件或者“撞墻”事件時(shí)游戲結(jié)束跳出循環(huán),否則游戲繼續(xù)循環(huán)。程序框圖如下:三、程序改進(jìn)1.控制方向的改進(jìn)在整個(gè)程序運(yùn)行中我發(fā)現(xiàn)一個(gè)問(wèn)題,即在游戲運(yùn)行過(guò)程中想要準(zhǔn)確控制蛇的移動(dòng)方向不是很方便,因?yàn)樵绦騼H僅采用兩個(gè)方向鍵“l(fā)eft”鍵和“right”鍵來(lái)控制。他把方向按不同的象限分成八個(gè)部分,沿逆時(shí)針?lè)较蛞来畏植紴?、1、2、3、4、5、6、7,其中X軸正半軸是0負(fù)半軸是4,Y軸正半軸是2負(fù)半軸是6。根據(jù)這樣的劃分當(dāng)按下不同的鍵時(shí)有不同的反應(yīng)。當(dāng)按下“l(fā)eft”鍵時(shí),程序自動(dòng)把當(dāng)前蛇的方向值加1(設(shè)為X)后與程序允許的最大方向值Y做比較。如果XY則返回值“true”,蛇向X值所指向的方向移動(dòng);否則返回值“false”,蛇向0值所指向的方向移動(dòng)。程序框圖如下:當(dāng)按下“right”鍵時(shí),蛇移動(dòng)方向控制與“l(fā)eft”鍵相似,不同的是把蛇當(dāng)前的方向值減1后的值X與方向值0做比較。如果X0則返回值“true”,蛇向方向值為7的方向移動(dòng);否則返回值“false”,蛇向反向值為X的方向移動(dòng)。程序框圖如下:這樣的設(shè)置不是很理想,需要用戶在游戲過(guò)程中不斷的準(zhǔn)確計(jì)算好下一步的方向值。話說(shuō)這樣設(shè)計(jì)可以讓用戶在游戲過(guò)程中鍛煉思維的反應(yīng)力和腦計(jì)算力,但是同時(shí)給用戶在游戲過(guò)程中帶來(lái)很大的不便,不利于游戲的繼續(xù)進(jìn)行。我構(gòu)思著如果把方向鍵從復(fù)雜的左右兩鍵改成簡(jiǎn)單的上下左右四個(gè)鍵,不僅可以形象的描述各個(gè)方向的控制移動(dòng),而且可以提高用戶的玩游戲的速度,有一個(gè)好的心情。為此我經(jīng)過(guò)大量的實(shí)驗(yàn)和改進(jìn),最后終于把自己的構(gòu)想用程序表達(dá)出來(lái)了。下面簡(jiǎn)單介紹我修改的程序。我的構(gòu)思主要是得益于原作者的程序思路,是在他的基礎(chǔ)上修改的。即把方向按坐標(biāo)系中坐標(biāo)軸的方向分為“0-right”、“2-up”、“4-left”和“6-down”四個(gè)方向。在方向控制程序中運(yùn)用了一個(gè)while循環(huán)、事件結(jié)構(gòu)和條件結(jié)構(gòu)。運(yùn)用事件結(jié)構(gòu)是因?yàn)樾枰\(yùn)用事件結(jié)構(gòu)中事件數(shù)據(jù)節(jié)點(diǎn)的“V鍵”節(jié)點(diǎn)來(lái)控制方向的改變,而事件結(jié)構(gòu)是與while循環(huán)配套使用的。運(yùn)用條件結(jié)構(gòu)是便于不同方向鍵按下時(shí)激活不同的條件狀態(tài)控制蛇的移動(dòng)。下面僅就“down鍵”來(lái)說(shuō)明我的思路。當(dāng)按下“down鍵”時(shí),把當(dāng)前的方向值X與下方向值6做比較,如果結(jié)果為“true”時(shí)輸出方向?yàn)椤癲own”,如果結(jié)果為“false”時(shí)輸出方向?yàn)椤癲own”,即強(qiáng)制性的向下移動(dòng)。其他方向上的控制跟“down”方向的控制相同,中心思想是強(qiáng)制性實(shí)施動(dòng)作。2.添加了“游戲暫停”按鈕我覺(jué)得在原程序中沒(méi)有暫停按鈕是一個(gè)很大的缺憾,假設(shè)發(fā)生這種情況即用戶使用這個(gè)程序的過(guò)程中可能會(huì)有急事需要離開(kāi)可是又不想結(jié)束掉正在運(yùn)行的程序,這樣的設(shè)計(jì)就不夠人性化。如果添加一個(gè)“暫?!卑粹o這個(gè)問(wèn)題就可以迎刃而解了。為此我在“運(yùn)動(dòng)循環(huán)”中添加了一個(gè)“暫停”按鈕。即在一個(gè)while循環(huán)中添加一個(gè)“等待下一個(gè)整數(shù)倍毫秒”來(lái)控制等待時(shí)間,一個(gè)“非”來(lái)激活命令。程序框圖見(jiàn)圖:四、程序存在的一些不足(一)、可能是時(shí)間太過(guò)倉(cāng)促,本程序在設(shè)計(jì)上存在一些不足。我把自己看到的一些不足列舉如下:1.程序初始化時(shí)蛇身過(guò)長(zhǎng)。雖說(shuō)在設(shè)計(jì)程序時(shí)有專門控制蛇身長(zhǎng)度的控件,可是在修改初始化時(shí)蛇身長(zhǎng)度的數(shù)值后蛇身的長(zhǎng)度依然沒(méi)有太多的變化。2.蛇身長(zhǎng)度無(wú)節(jié)制的增長(zhǎng)。蛇在移動(dòng)過(guò)程中蛇身長(zhǎng)度會(huì)增長(zhǎng),即使是在沒(méi)有吃掉蘋果時(shí)蛇身的長(zhǎng)度也會(huì)增長(zhǎng),這些都有悖常理。3.感覺(jué)把collision_self.vi程序弄的復(fù)雜化了。(二)、我看不懂的部分程序由于程序很復(fù)雜,我有很多看不懂的地方,列舉如下:1.我不知道子VI是如何運(yùn)用的。在程序中常用子VI,這雖然便于簡(jiǎn)化程序框圖,卻給我讀程序造成很大的不便。不便的原因主要是在上課實(shí)踐過(guò)程中沒(méi)有運(yùn)用過(guò)子VI完成作業(yè)或者做練習(xí),雖然我在潛意識(shí)里知道子V I的用途很大。看著遍布程序框圖的子VI我不知道它怎么運(yùn)用、為什么這樣運(yùn)用,練習(xí)子VI的原程序框圖了解該子VI后我還是不知道如何運(yùn)用。2.我不知道兩個(gè)while循環(huán)是如何合作的。在主程序的第二幀中的那兩個(gè)子while循環(huán)沒(méi)有任何的聯(lián)系,我不知道它們是怎么合作的。3.我不知道“delete when we have not ate an apple in the last 5 moves”是如何運(yùn)行的。4.為什么要設(shè)置“l(fā)ast index ate apple at”這一步

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論