計算機實習報告貪吃蛇游戲編程_第1頁
計算機實習報告貪吃蛇游戲編程_第2頁
計算機實習報告貪吃蛇游戲編程_第3頁
計算機實習報告貪吃蛇游戲編程_第4頁
計算機實習報告貪吃蛇游戲編程_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

計算機實習匯報題目:貪吃蛇試驗匯報郵箱:貪吃蛇試驗匯報一.功能闡明1.1總體功能闡明游戲分單人和雙人兩種。單人游戲中有一條小蛇,不停地在屏幕上游走,“吃”掉界面上隨即出現的果子,每吃一種果子,蛇的身體長度就增長一種單位。當吃下的果子積累到一定程度時,蛇的運動速度會對應地增長,等級也提高了。伴隨蛇的長度的增長,游戲界面會出現隨機產生的毒刺“★”,毒刺固定不動。只要蛇頭碰到屏幕四面,或者碰到自己的身子,或者碰到毒刺,活著小蛇就立即斃命,游戲結束。在雙人游戲中,有兩條蛇頭分別為紅色和黃色的小蛇,爭吃果子,比比誰吃的果子多。只要任意一條蛇的蛇頭碰到屏幕四面,或者碰到自己的身子(碰到對方的身體沒關系),或者任一條蛇碰到毒刺,游戲就會結束。該游戲的特色是:一、添加了障礙“毒刺”,同步增長游戲等級這一項,讓蛇的運動速度隨分數的增長而合適增長,相比老式的貪吃蛇游戲增長了難度;二、增長雙人游戲,使其具有競賽性,讓玩家在與他人競賽中獲得樂趣。三、游戲的背景畫面更為細膩。1.2顧客界面游戲開始和退出菜單選擇單人、雙人游戲的菜單1.3使用措施在單人游戲中,用小寫的w、s、a、d四個按鍵分別控制蛇頭上下左右四個方向的轉向。雙人游戲中,w、s、a、d按鍵控制紅蛇的方向,上下左右四個方向鍵控制黃蛇的方向。二.程序設計闡明2.1總體設計框架[包括程序執(zhí)行流程,模塊劃分等,需要有文字闡明和框圖表達]游戲開始游戲開始選擇開始或退出游戲退出游戲開始游戲開始單人游戲開始雙人游戲開始游戲程序播放背景音樂游戲程序播放背景音樂游戲程序顯示游戲界面、邊框、背景等蛇的移動、增長、獲取按鍵信息判斷與否產生毒刺計算并顯示分數和等級判斷游戲與否結束蛇頭移動若蛇頭吃下果子,則產生新的果子且增長蛇的長度。蛇的身體跟進若符合對應條件,在屏幕中顯示毒刺若符合條件,顯示結束畫面,退出游戲。2.2關鍵算法描述算法1:[算法輸入參數和輸出參數,算法功能,使用什么存儲構造,在主程序中起什么作用,可以使用框圖或偽代碼表達。算法1:蛇身運動函數算法1:if(snake.direct[0]==97) { textout(handle,--(--snake.s_x[0]),snake.s_y[0],wColors+10,1,"◆"); Sleep(speed); PRODUCT_FRUIT(snake.s_x,snake.s_y,&snake.length,&fruit.f_x,&fruit.f_y,wColors,handle); MOVE(snake.s_x,snake.s_y,snake.length,wColors+2,handle);這是蛇的運動算法,以單人游戲中的向上運動為例。當蛇的構造中的方向變量為97(即“w”)時,蛇頭的縱坐標增長一種單位,并延時一定期間。接著運行進行PRODUCT_FRUIT函數,該函數的作用是判斷蛇頭坐標與否與果子坐標重疊,若是,則生成新的果子,且蛇的長度加一。接著再運行move函數,該函數的作用為令蛇身最終一格處顯示背景顏色,蛇身的其他部分隨蛇頭向前移動一位,整體上看就像是蛇向前移動了一格。算法2:voidRE_POISON_FRUIT(intpfoodx[],intpfoody[],int*foodx,int*foody,int*length,intsnakex[],intsnakey[]){ while(1) { srand((unsigned)time(NULL)*(unsigned)time(NULL)); int poison_x=2*(rand()%28+2); intpoison_y=rand()%37; if(poison_x>=4&&poison_y>=2) { for(q=0;q<*length;q++) { if((snakex[q]==poison_x)&&(snakey[q]==poison_y)) break; } if(q==*length) { for(i=0;i<100;i++) { if(pfoodx[i]==*foodx&&pfoody[i]==*foody) break; } if(i==100) { pfoodx[num]=poison_x; pfoody[num]=poison_y; num++; break; } } } }}隨機產生毒果的函數。產生兩個隨機數,分別是毒刺的橫縱坐標,若該坐標不與蛇的身體的任一節(jié)重疊,也不與目前顯示的果子重疊,則該坐標符合規(guī)定。算法3:intDEAD(intsnakex[],intsnakey[],intlen,intpfoodx[],intpfoody[],HANDLEhandle){ inttemp; for(inti=2;i<=len;i++) { if((snakex[0]<4||snakex[0]>60||snakey[0]<2||snakey[0]>40)||(snakex[0]==snakex[i]&&snakey[0]==snakey[i])) { temp=1; break; } } for(intb=0;b<=num;b++) { if((snakex[0]==pfoodx[b])&&(snakey[0]==pfoody[b])) { temp=1; break; } } if(temp==1) return1; else return0;}判斷游戲與否結束的函數,以單人游戲為例。首先用for循環(huán)判斷蛇頭的橫縱坐標與否在規(guī)定的范圍內以及蛇頭與否碰到蛇身,接著再用一種for循環(huán)判斷與否碰到毒刺,以上條件符合一種,該函數就返回整數1,若兩者都不返回,則返回0。在主函數中,用一種if語句,用此函數返回的值作為判斷條件,若值為1,則執(zhí)行退出游戲,顯示結束畫面的語句。算法4:intstop(chardir){r=!r; s=!s;if(!s){so=dir;return98;}else {intr=int(so);returnr;}}暫停函數,以單人游戲為例。在主函數所在的源文獻設置一種bool類型的全局變量s,初始化為真。玩家在游戲中按下回車鍵時,執(zhí)行暫停函數,執(zhí)行語句s=!s,最終函數返回一種值。將暫停函數的返回值賦值給蛇的運動方向變量,使蛇不再運動。在雙人游戲中,設置了兩個暫停函數,分別控制兩條蛇的停止與運動。算法五: DIR=_getch(); switch(DIR) { case97: if(snake.direct[0]!=100) snake.direct[0]=97; break; case100: if(snake.direct[0]!=97) snake.direct[0]=100; break; case119: if(snake.direct[0]!=115) snake.direct[0]=119; break; case115: if(snake.direct[0]!=119) snake.direct[0]=115; break;case13:snake.direct[0]=stop(snake.direct[0]); break; default: break;換取按鍵信息,以單人游戲為例。用swith判斷語句對不一樣的按鍵信息,另設做出上移、下移、左移、右移、暫停/開始等動作。算法六: c=(score/10)%5; b=(score/10)/5; if(speed!=75) {if(c==0&&b==m+1) {speed-=25; level++; m++;} }charbu[10]; itoa(level,bu,10);textout(handle,72,8,wColors,1,bu);增長蛇的移動速度及顯示等級的算法,以單人游戲為例。類似毒刺產生的原理,設置兩個全局變量,當這兩個變量滿足一定條件時,游戲等級增長一種單位,對應地蛇的速度增長。等級的最高程度為五級,防止貪吃蛇運動過快。2.3程序設計的難點和要點一、在游戲運行的同步,播放背景音樂,運用到多線程的知識。二、在雙人游戲中,分別編寫兩條蛇的運動算法,但兩條蛇需要同步獲取按鍵信息,這樣兩者才能同步運動。三、設置蛇移動的算法時,讓后一種點跟隨前一種點的運動軌跡,本來最終一種點的位置就顯示背景顏色,使得蛇在整體上看上去一偶那個了一格。四、蛇的得分增長一定程度2.4調試的措施[過程中出現的問題和處理措施]在編該游戲的過程中,出現了多種問題和錯誤,后來都一一處理了。一、開始設置游戲等級時,當蛇滿足一種升級的條件時,蛇卻停止了運動,而不是像預想的那樣加緊運動速度。后來發(fā)現本來是由于我用的if判斷語句的判斷條件出現問題,導致蛇的速度會一直減小直到零。我借鑒產生毒刺的算法,設置判斷條件,使得蛇每次增長速度都都能繼續(xù)穩(wěn)定運行。二、開始加入背景音樂時,貪吃蛇死亡后,不顯示游戲結束的畫面,而是停留在原畫面中繼續(xù)播放音樂。后來我設置了一種bool類型的全局變量r,把本來背景音樂函數中的無限循環(huán)的判斷條件“1”換成r,當游戲結束時r變?yōu)榧?,使音樂不再播放。三、剛設置雙人游戲時,幾乎需要把單人游戲中的每一種功能對應的函數再設置一種新的,以適應雙人游戲的規(guī)定。若不仔細檢查,其中微小的錯誤在程序編譯時無法發(fā)現,但運行游戲卻會出現問題。因此將單人游戲改成雙人也需要極大的耐心和細致。四、在增長毒刺和游戲等級的算法中,采用了類似的程序,都是設置兩個變量,當這兩個變量分別滿足整除和取余的對應條件時,才執(zhí)行添加毒刺或增長等級的算法。2.5程序性能評價從運行效果上進行分析:長處:添加背景顏色和背景音樂,使游戲畫面更細膩絢麗。同步增長了規(guī)避毒刺、等級上升、雙人游戲等功能,更具娛樂性。局限性:背景音樂單一,雙人游戲的蛇頭部分閃爍不一樣步。從程序設計上進行分析:長處:運用多種功能函數,且單人游戲與雙人游戲分別對應,條例清晰。局限性:程序的設計沒有運用到類的知識。三.心得體會通過這次小學期的編程,使我很好地復習回憶了一遍C++的有關知識,同步對編程有了更為深刻的理解。編譯一種好的游戲,首先要考慮游戲的界面和操作與否友好以便,另一方面要盡量精簡程序,增長

溫馨提示

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

評論

0/150

提交評論