版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 目錄</b></p><p> 課程設計目的……………………………………………………………3</p><p> 課程設計任務與要求…………………………………………………3</p><p> 2.1課程設計內(nèi)容…………………………………………………………3</p><p> 2.2課程
2、設計要求…………………………………………………………3</p><p> 2.3課程設計環(huán)境…………………………………………………………3</p><p> 課程設計方案……………………………………………………………3</p><p> 3.1方案論證………………………………………………………………3</p><p> 3.2程序整體
3、設計說明………………………………………………………3</p><p> 3.3設計思路………………………………………………………………4</p><p> 3.4設計總體流程圖………………………………………………………4</p><p> 3.5設計的具體實現(xiàn)………………………………………………………5</p><p> 程序測試……
4、……………………………………………………………8</p><p> 4.1測試內(nèi)容與結(jié)果………………………………………………………8</p><p> 4.2程序運行效果圖………………………………………………………9</p><p> 課程設計總結(jié)…………………………………………………………10</p><p> 6.參考文獻…………
5、………………………………………………………11</p><p> 附錄 源程序…………………………………………………………………11</p><p><b> 課程設計目的:</b></p><p> 復習、鞏固才C、C++的基礎(chǔ)知識,進一步加深對VC技術(shù)的理解和掌握;</p><p> 課程設計為學生提供了一個
6、既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結(jié)合起來,鍛煉學生的分析解決實際問題的能力。</p><p> 培養(yǎng)學生在項目開發(fā)中團隊合作精神、創(chuàng)新意識及能力</p><p><b> 課程設計任務與要求</b></p><p> 2.1 課程設計內(nèi)容</p><p> 貪吃蛇游戲開發(fā),首先它可以為
7、大家提供一種當前比較流行的休閑小游戲。貪吃蛇是家喻戶曉的益智類小游戲,選擇這個題目一是為了將自己的所學知識加以運用,二是一直以來貪吃蛇這個游戲就深深地吸引著很多人,它的制作方法對于很多同學而言都是很神秘的。所以我們希望通過這學期所學知識把它剖析開來,真真正正的了解它的本質(zhì)和精髓。在這次學習中我們將從實踐和實際的項目中提高自己的編程能力。因此決定選擇這個題目作為VC的課程設計。</p><p> 最后一部分就是游
8、戲的模塊劃分,根據(jù)分析,貪吃蛇這個程序一共要實現(xiàn)如下幾個功能,包括游戲方面開始游戲、暫停游戲以及停止游戲,游戲設置(蛇的顏色、食物的顏色操作說明等)與積分。</p><p><b> 2.2課程設計要求</b></p><p> 對系統(tǒng)進行功能模塊分析、控制模塊分析正確,符合課題要求,實現(xiàn)相應功能;可以加以其他功能或修飾,使程序更加完善、合理;</p>
9、<p> 系統(tǒng)設計要實用,采用模塊化程序設計方法,編程簡練、可用,功能全面;</p><p> 說明書、流程圖要清楚;</p><p> 記錄設計情況(備查,也為編寫設計說明書作好準備);</p><p><b> 2.3課程設計環(huán)境</b></p><p> Windows7操作系統(tǒng),VC6.0
10、開發(fā)環(huán)境。</p><p><b> 課程設計方案</b></p><p><b> 3.1方案論證</b></p><p> 方案一:基于MFC設計</p><p> 該方案的好處是系統(tǒng)自動生成軟件框架,設計者只需填充編寫的代碼即可,程序設計比較復雜,對于編程能力不強的同學來說難度較大。&
11、lt;/p><p> 方案二:基于easyX設計</p><p> 該方案的好處是設計者只需編寫程序文件,完成后編譯即可生成可執(zhí)行文件,編程前需要先安裝easyX圖形庫。</p><p> 由于編程能力不強,方案二設計簡單,易于調(diào)試,故選擇方案二。</p><p> 3.2程序整體設計說明</p><p> 一個
12、游戲要有開始部分,運行部分,結(jié)束部分(實際上開始部分與運行部分是一體的)。</p><p><b> 游戲界面:</b></p><p> 1)開始游戲(加載并開始)</p><p> 2)暫停游戲(從當前進度結(jié)束)</p><p> 3)重新開始(在某一時刻暫停后可以繼續(xù)接著玩)</p><
13、p><b> 游戲設置:</b></p><p> 1)蛇的顏色(紅色)</p><p> 2)游戲幫助(游戲控制說明)</p><p> 3)積分(每次吃掉一個食物增加10分,并顯示出來)</p><p><b> 3.3設計思路</b></p><p&g
14、t; 這個程序的關(guān)鍵是表示蛇的圖形以及蛇的移動。用一個小矩形表示蛇的一節(jié)身體,身體每長一節(jié),增加一個矩形塊。移動時必須從蛇頭開始,所以蛇不能向相反方向移動,也就是蛇尾不能改作蛇頭。如果不按任何鍵,蛇自行在當前方向上前移,當游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動,一步移動一節(jié)身體,所以當按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動,圖形的實現(xiàn)是從蛇頭的新位置開始畫出蛇,這時原來蛇的位置和新蛇的位置差一個單位,所
15、以看起來蛇會多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)和消失也是畫矩形塊和覆蓋矩形塊。</p><p> 3.4設計總體流程圖</p><p> 3.5設計的具體實現(xiàn)</p><p><b> 食物類</b></p><p> struct Food/*食物的結(jié)構(gòu)體定義*/</p&g
16、t;<p><b> {</b></p><p> int x;/*食物的橫坐標*/</p><p> int y;/*食物的縱坐標*/</p><p> int addFood;/*判斷是否要出現(xiàn)食物的變量*/</p><p><b> };<
17、;/b></p><p><b> 2)蛇塊類</b></p><p> 把蛇分成一塊一塊,一個蛇相當于有若干個塊,蛇塊類就是用來描述每塊的信息。</p><p> struct Snake/*蛇的結(jié)構(gòu)體定義*/</p><p><b> {</b></p>
18、<p> int x[MAX_JOINTS]; /*保存蛇身每一節(jié)位于屏幕上的列坐標*/</p><p> int y[MAX_JOINTS]; /*保存蛇身每一節(jié)位于屏幕上的行坐標*/</p><p> int joint;/*蛇的節(jié)數(shù)*/</p><p> int direction;/*蛇移動方向*/&l
19、t;/p><p> int life;/*蛇的生命,0活著,1死亡*/</p><p><b> };</b></p><p><b> 初始化游戲</b></p><p> 游戲開始界面的初始化:</p><p> void InitGraph()<
20、/p><p><b> {</b></p><p> cleardevice();</p><p> setbkcolor(BLUE); /*設置背景顏色*/</p><p> setcolor(WHITE); /*設置前景顏色*/</p><p> cleardevice();
21、</p><p> setfont(25, 0, _T("微軟雅黑"));</p><p> outtextxy(170,150,"Greedy Snake"); /*在坐標(170,150)處輸出字符串*/</p><p> outtextxy(219,254,"Ready?");</p&
22、gt;<p><b> getch();</b></p><p> setbkcolor(0);</p><p> cleardevice();</p><p><b> }</b></p><p><b> 繪制游戲場景</b></p>
23、<p> setlinestyle(PS_SOLID, 5)用于繪制實心的寬度為5個像素的線型,bar(i,40,i+7,47);為畫一個左上角為(i,40),右下角為(i+7,47)的矩形條,rectangle(i, 40, i+10, 49)也用于畫矩形。</p><p> void DrawFence(){</p><p><b> int i;</
24、b></p><p> setbkcolor(LIGHTGREEN);</p><p> setlinestyle(PS_SOLID, 5);</p><p><b> //畫圍墻</b></p><p> setfillstyle(LIGHTBLUE);</p><p> for
25、 (i=50; i<=591; i+=10){</p><p> //rectangle(i, 40, i+10, 49);//上邊</p><p> bar(i,40,i+7,47);</p><p> bar(i, 551, i+7,558);//下邊</p><p><b> }</b><
26、;/p><p> for (i=40; i<=550; i+=10){</p><p> bar(50, i, 57, i+7);//左邊</p><p> bar(591, i, 598, i+7);//右邊</p><p><b> }</b></p><p><b>
27、; }</b></p><p><b> 結(jié)束游戲</b></p><p> PrScore(score)用于輸出分數(shù)。</p><p> void GameOver(int score)</p><p><b> {</b></p><p> cle
28、ardevice();</p><p> PrScore(score);</p><p> setcolor(RED);</p><p> setfont(80, 0, _T("微軟雅黑"));</p><p> outtextxy(100, 200, "GAME OVER");</p&g
29、t;<p> mciSendString("close mo.mp3", NULL, 0, NULL); //關(guān)閉音樂</p><p><b> getch();</b></p><p><b> exit(0);</b></p><p><b> }</b>
30、;</p><p> 判斷是否需要出現(xiàn)食物</p><p> if (food.addFood == 1) //需要出現(xiàn)新食物</p><p><b> {</b></p><p> food.x = rand() % 400 + 60;</p><p> food.y = ra
31、nd() % 350 + 60;</p><p> //食物出現(xiàn)后必須在整格內(nèi)才能讓蛇吃到</p><p> while (food.x%10 != 0)</p><p> {food.x++;}</p><p> while (food.y%10 !=0)</p><p> {food.y++; }<
32、/p><p> food.addFood=0;//畫面上有食物 </p><p><b> }</b></p><p> if (food.addFood==0) //畫面上有食物,則顯示 </p><p><b> {</b></p><p> setc
33、olor(GREEN);</p><p> rectangle(food.x, food.y, food.x+10, food.y-10);</p><p><b> }</b></p><p> 7)在沒有按鍵的情況下,蛇自己移動身體</p><p> for (i=snake.joint-1; i>0;
34、 i--)//蛇的每個節(jié)往前移動 </p><p> {snake.x[i] = snake.x[i-1];</p><p> snake.y[i] = snake.y[i-1];</p><p><b> }</b></p><p> //1,2,3,4 表示右,左,上,下四個方向,來決定蛇頭的移動 <
35、/p><p> switch(snake.direction)</p><p> {case MV_RIGHT: snake.x[0] += 10; break;</p><p> case MV_LEFT: snake.x[0] -= 10; break;</p><p> case MV_UP: snake.y[0] -= 1
36、0; break;</p><p> case MV_DOWN: snake.y[0] += 10; break;</p><p><b> }</b></p><p> 8)a.從蛇的第四節(jié)開始判斷是否撞到自己,因為蛇頭為兩節(jié),第三節(jié)不可能拐過來</p><p> for (i=3; i<snake.jo
37、int; i++)</p><p><b> {</b></p><p> if (snake.x[i]==snake.x[0] && snake.y[i]==snake.y[0])</p><p><b> {</b></p><p> GameOver(score);
38、//顯示失敗</p><p> snake.life = 1; //蛇死*/</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> b.判斷蛇是否撞到墻
39、壁</p><p> if (snake.x[0]<55 || snake.x[0]>595 || snake.y[0]<55 || snake.y[0]>455)</p><p><b> {</b></p><p> GameOver(score);//本次游戲結(jié)束</p><p>
40、; snake.life = 1; //蛇死</p><p><b> }</b></p><p> c.判斷是否撞到障礙物</p><p> for(int obs_i = 0; obs_i<vox.size(); obs_i++)</p><p><b> {</b>&
41、lt;/p><p> if(vox[obs_i]==snake.x[0] && voy[obs_i]==snake.y[0]) GameOver(score);</p><p><b> }</b></p><p> 以上三種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始。</p><p><b>
42、; 吃到食物后畫蛇</b></p><p> if (snake.x[0]==food.x && snake.y[0]==food.y) //吃到食物后</p><p> {//把畫面上的食物清除</p><p> setcolor(0);</p><p> rectangle(food.x, foo
43、d.y, food.x+10, food.y-10);</p><p> //新的一節(jié)先放在看不見的位置,下次循環(huán)就取前一節(jié)的位置</p><p> snake.x[snake.joint] =-20; snake.y[snake.joint] =-20;</p><p> snake.joint++;//蛇的身體長一節(jié)</p><
44、p> food.addFood = 1;//畫面上需要出現(xiàn)新食物</p><p> score += 10;</p><p> //-------------------------</p><p> PrScore(score);//輸出新得分</p><p><b> }</b><
45、/p><p><b> //畫蛇</b></p><p> setcolor(RED);</p><p> for (i=0; i<snake.joint; i++)</p><p><b> {</b></p><p> rectangle(snake.x[i]
46、, snake.y[i],snake.x[i]+10, snake.y[i]-10);</p><p><b> }</b></p><p> Sleep(gamespeed); //延時控制蛇的速度</p><p> //去除蛇的最后一節(jié)</p><p> setcolor(0);</p>
47、<p> rectangle(snake.x[snake.joint-1], snake.y[snake.joint-1],</p><p> snake.x[snake.joint-1]+10,snake.y[snake.joint-1]-10);</p><p><b> 10)按鍵操作</b></p><p> key
48、=getch();//接收按鍵</p><p> switch(key)</p><p> {//判斷按鍵,是否往相反方向移動</p><p> case 'w':case 'W':{if(snake.direction!=MV_DOWN) snake.direction = MV_UP;}break;</p>&
49、lt;p> case 'd':case 'D':{if(snake.direction!=MV_LEFT) snake.direction = MV_RIGHT;}break;</p><p> case 'a':case 'A':{if(snake.direction!=MV_RIGHT) snake.direction = MV_LEF
50、T;}break;</p><p> case 's':case 'S':{if(snake.direction!=MV_UP) snake.direction = MV_DOWN;}break;</p><p> case 'p':case 'P':fun_pause();break;</p><p&
51、gt; case 'r':case 'R':fun_reset();break;</p><p><b> }</b></p><p> 編好程序后進行編譯、運行,生成可執(zhí)行文件,就可以玩貪吃蛇游戲了。</p><p><b> 4.程序測試</b></p><p
52、> 4.1測試內(nèi)容與結(jié)果</p><p> 1)開始:程序運行后,會出來藍色背景界面和提示語Ready?,按任意鍵開始,注意不要在中文輸入法下玩。開始后只有兩節(jié)的紅色蛇和一個綠色的食物,并且蛇是運動的。</p><p> 2)方向鍵和WSAD鍵:蛇開始運行之后,當點擊上下左右鍵(或WSAD)蛇就會按相應的方向運動,蛇不能180度轉(zhuǎn)彎,只能進行90度的轉(zhuǎn)彎。程序檢測時蛇確實會
53、按點擊方向運動且不會向相反方向運動,所有方向鍵使用正確。</p><p> 3)暫停/繼續(xù):當程序正在運行時,點擊暫停/繼續(xù)按鈕“P”,蛇停在當前的位置,再次點擊“P”蛇又從當前位置繼續(xù)運動。此按鈕符合要求,所以暫停/繼續(xù)按鈕使用正確,功能能夠?qū)崿F(xiàn)。</p><p> 4)重新開始:當游戲結(jié)束或想重新開始一局時,點擊按鈕“R”,游戲又回到最初的狀態(tài),一個食物,一個運動著的紅色蛇塊,
54、且游戲積分清零。所以重新開始功能能夠?qū)崿F(xiàn)。</p><p> 5)界面右側(cè)能夠出現(xiàn)按鍵提示和分數(shù)顯示等有關(guān)信息。</p><p> 4.2程序運行效果圖</p><p><b> 5.課程設計總結(jié)</b></p><p> 在設計這個程序中我主要學會了如何運用以下有關(guān)C語言和C++的知識:</p>
55、<p> 1)函數(shù)定義是要做到顧名思義是很重要的,它對讀程序的人正確認識程序十分重要,在修改這個程序的過程中也能很快找到程序各模塊的作用,大大增加了程序的可讀性。</p><p> 2)分析函數(shù)先從main()函數(shù)入手。Main()函數(shù)是C++源程序編譯時的開始,從main()函數(shù)開始讀函數(shù)可將其他函數(shù)的功能理解得更透徹。</p><p> 3)在做程序的時候先列框架,將
56、這個程序所要達到的目的(功能)分析出來,選擇正確的數(shù)據(jù)結(jié)構(gòu)然后在將程序模塊化,按照模塊編寫函數(shù)更加簡單合理。</p><p> 4)我還了解了很多的庫函數(shù)的作用,如字符串函數(shù)中有很多對字符串進行處理的函數(shù),其功能我都有所了解。</p><p> 5)學會了有關(guān)頭文件的使用方法,及系統(tǒng)調(diào)配問題的解決方法等。</p><p> 6)了解到了注釋的重要性。</
57、p><p> 通過這次試驗,讓我學到很多這個學期沒有接觸過的很多知識,完成一個貪吃蛇的項目;第一步就是先理清思路,設計主界面,主界面是以一塊封閉的畫布,并在畫布內(nèi)設計蛇體和食物。蛇頭如果碰到墻或者與蛇身的某一部分碰到就會死亡;如果蛇頭碰到食物,就會自動增加一節(jié)蛇身,并更改得分。</p><p> 想要寫出好的程序,還是要有扎實的基礎(chǔ),這樣遇到問題就不會一籌莫展來。在編程時我們要有想象力,不
58、要拘泥于現(xiàn)有的貪吃蛇游戲,而是要把自己想到的再加上所學的知識,遇到問題不能怕,而是要專心找出問題的原因,再回來看看書本的知識,不懂的還可以問問老師。編程過程還要養(yǎng)成良好的編程習慣,這樣不僅自己能夠很好看懂自己的代碼,也讓人家容易看懂自己的代碼,而不至于代碼知識自己會看,出來問題只有自己會解決而其他人都不會解決;遇到問題時要考慮最簡單的解決方案,只有簡單的方案不能滿足要求時再考慮復雜的方案。最主要編程還是要多與人溝通,不會的不能立即問別人
59、,但是一段時間后解決不了時還是應該向別人請教請教,“三人行必有我?guī)煛闭沁@個意思。</p><p> 通過這次實驗,我深刻地體會到了面向?qū)ο笈c面向過程的區(qū)別。程序在最初設計時由于面向?qū)ο蟮乃枷氩粔虺墒?,導致在最后想要增加一些新的功能時,出現(xiàn)了一些麻煩。總之,我們還需要進一步提升自己的能力。</p><p><b> 6.參考文獻</b></p>&l
60、t;p> 《C語言程序設計》 武雅麗 清華大學出版社</p><p> 《C++面向?qū)ο蟪绦蛟O計》 譚浩強 清華大學出版社</p><p> 《C語言課程設計案例精編》 李麗娟 中國水利水電出版社</p><p> 附錄:源程序 </p><p> //////////////////////////////
61、/////////////////</p><p> // 程序名稱:貪吃蛇</p><p><b> // 制作:莫新存</b></p><p> // 編譯環(huán)境:Visual C++ 6.0 ,EasyX</p><p> ///////////////////////////////////////////
62、///</p><p> #include <iostream></p><p> #include <graphics.h></p><p> #include <stdlib.h></p><p> #include <conio.h></p><p> #
63、include <dos.h></p><p> #include <time.h></p><p> #include <stdio.h></p><p> #include <vector></p><p> #define random(a,b) (rand()%((b)-(a))
64、)+(a)</p><p> #pragma comment(lib,"Winmm.lib") //加入背景音樂時使用</p><p> using namespace std;</p><p> #define MAX_JOINTS200</p><p> #define MV_RIGHT
65、 1</p><p> #define MV_LEFT 2</p><p> #define MV_UP 3</p><p> #define MV_DOWN 4</p><p> int rnd1,rnd2;</p><p> vector<int>
66、;vox;</p><p> vector<int>voy;</p><p> void InitGraph(void);/*圖形界面初始化函數(shù)*/</p><p> void DrawFence(void);/*繪制游戲場景*/</p><p> void GameOver(int score);/
67、*結(jié)束游戲*/</p><p> void GamePlay(void);/*玩游戲具體過程*/</p><p> void PrScore(int score); /*顯示分數(shù)*/</p><p> void fun_pause(); /*暫停游戲*/</p><p>
68、 void fun_reset(); /*重置游戲*/</p><p> void fun_obstacle(); /*設置障礙物*/</p><p> struct Food{/*食物的結(jié)構(gòu)體定義*/</p><p> int x;/*食物的橫坐標*/</p&
69、gt;<p> int y;/*食物的縱坐標*/</p><p> int addFood;/*判斷是否要出現(xiàn)食物的變量*/</p><p><b> };</b></p><p> struct Snake{/*蛇的結(jié)構(gòu)體定義*/</p><p> int x
70、[MAX_JOINTS]; /*保存蛇身每一節(jié)位于屏幕上的列坐標*/</p><p> int y[MAX_JOINTS]; /*保存蛇身每一節(jié)位于屏幕上的行坐標*/</p><p> int joint;/*蛇的節(jié)數(shù)*/</p><p> int direction;/*蛇移動方向*/</p><p&
71、gt; int life;/*蛇的生命,0活著,1死亡*/</p><p><b> };</b></p><p> void play()</p><p><b> {</b></p><p> initgraph(800,600);</p><p>
72、 InitGraph();</p><p> DrawFence();</p><p> GamePlay();</p><p><b> getch();</b></p><p><b> }</b></p><p> int main ()</p&g
73、t;<p> { mciSendString("play mo.mp3", NULL, 0, NULL); //播放音樂</p><p><b> play();</b></p><p><b> return 0;</b></p><p><b> }</b
74、></p><p><b> //初始化 </b></p><p> void InitGraph(){</p><p> cleardevice();</p><p> setbkcolor(BLUE);</p><p> setcolor(WHITE);</p>
75、<p> cleardevice();</p><p> setfont(25, 0, _T("微軟雅黑"));</p><p> outtextxy(170,150,"Greedy Snake");</p><p> outtextxy(219,254,"Ready?");</p
76、><p><b> getch();</b></p><p> setbkcolor(0);</p><p> cleardevice();</p><p><b> }</b></p><p><b> //繪制游戲場景</b></p&g
77、t;<p> void DrawFence(){</p><p><b> int i;</b></p><p> setbkcolor(LIGHTGREEN);</p><p> setlinestyle(PS_SOLID, 5);</p><p><b> //畫圍墻</b&g
78、t;</p><p> setfillstyle(LIGHTBLUE);</p><p> for (i=50; i<=591; i+=10){</p><p> //rectangle(i, 40, i+10, 49);//上邊</p><p> bar(i,40,i+7,47);</p><p>
79、; bar(i, 551, i+7,558);//下邊</p><p><b> }</b></p><p> for (i=40; i<=550; i+=10){</p><p> bar(50, i, 57, i+7);//左邊</p><p> bar(591, i, 598, i+7);/
80、/右邊</p><p><b> }</b></p><p><b> }</b></p><p><b> //結(jié)束游戲</b></p><p> void GameOver(int score){</p><p> cleardevice(
81、);</p><p> PrScore(score);</p><p> setcolor(RED);</p><p> setfont(80, 0, _T("微軟雅黑"));</p><p> outtextxy(100, 200, "GAME OVER");</p><p
82、> mciSendString("close mo.mp3", NULL, 0, NULL); //關(guān)閉音樂</p><p><b> getch();</b></p><p><b> exit(0);</b></p><p><b> }</b></p&g
83、t;<p><b> //輸出成績</b></p><p> void PrScore(int score)</p><p><b> {</b></p><p> char str_score[10];</p><p> //setfillstyle(YELLOW);<
84、;/p><p> //bar(50, 15, 220, 35);</p><p> //setcolor(6);</p><p> //setfont(25, 0, _T("微軟雅黑"));</p><p> //setfillstyle(BLACK);</p><p> setbkmode(
85、TRANSPARENT);//---new---</p><p> BeginBatchDraw();</p><p> setfillstyle(BLACK);</p><p> bar(601,0,800,600);</p><p> setfont(60, 0, _T("微軟雅黑"));</p>
86、;<p> setcolor(YELLOW);</p><p> outtextxy(625, 30, _T("貪吃蛇"));</p><p> setfont(30, 0, _T("微軟雅黑"));</p><p> setcolor(LIGHTGREEN);</p><p>
87、 outtextxy(625, 140, _T("制作:莫新存"));</p><p> outtextxy(625, 170, _T("班級:24041001"));</p><p> outtextxy(625, 200, _T("學號:19"));</p><p> setfont(25, 0,
88、 _T("微軟雅黑"));</p><p> setcolor(CYAN);</p><p> outtextxy(625, 380, _T("上:W"));</p><p> outtextxy(625, 400, _T("下:S"));</p><p> outtextx
89、y(625, 420, _T("左:A"));</p><p> outtextxy(625, 440, _T("右:D"));</p><p> outtextxy(625, 460, _T("分數(shù):"));</p><p> outtextxy(625, 490, _T("暫停(P鍵)&
90、quot;));</p><p> outtextxy(625, 520, _T("重新游戲(R鍵)"));</p><p> setcolor(LIGHTBLUE);</p><p> sprintf(str_score,"%i",score);</p><p> outtextxy(680,
91、 460, str_score);</p><p> EndBatchDraw();</p><p> if(score>0 && score%50==0) fun_obstacle();</p><p><b> }</b></p><p> void GamePlay(){</p&
92、gt;<p> int i, key;</p><p> int gamespeed =200;//控制游戲速度*</p><p> int score = 0;//記錄游戲得分</p><p> struct Food food;//食物結(jié)構(gòu)體變量</p><p> struct
93、Snake snake;//蛇結(jié)構(gòu)體變量</p><p> food.addFood = 1;//1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物</p><p> snake.life = 0;//置蛇的生命狀態(tài)為活著</p><p> snake.direction = MV_RIGHT;//置蛇頭方向往右</p>&
94、lt;p> snake.x[0] = 100; snake.y[0] = 100;//置蛇頭初始位置</p><p> snake.x[1] = 110; snake.y[1] = 100;</p><p> snake.joint = 2;//置蛇的初始節(jié)數(shù)為2</p><p> PrScore(score);//顯示游戲得分
95、</p><p> //重復玩游戲,直到按Esc鍵結(jié)束</p><p> srand(time(NULL));</p><p><b> while (1)</b></p><p><b> { </b></p><p> while (!kbhit())&l
96、t;/p><p> {mciSendString("play mo.mp3", NULL, 0, NULL); //播放音樂</p><p> if (food.addFood == 1){ //需要出現(xiàn)新食物</p><p> food.x = rand() % 400 + 60;</p><p>
97、 food.y = rand() % 350 + 60;</p><p> //食物出現(xiàn)后必須在整格內(nèi)才能讓蛇吃到</p><p> while (food.x%10 != 0)</p><p><b> {</b></p><p><b> food.x++;</b></p>
98、<p><b> }</b></p><p> while (food.y%10 !=0){</p><p><b> food.y++;</b></p><p><b> }</b></p><p> food.addFood=0;//畫面上有食物
99、 </p><p><b> }</b></p><p> if (food.addFood==0){ //畫面上有食物,則顯示 </p><p> setcolor(GREEN);</p><p> rectangle(food.x, food.y, food.x+10, food.y-10);<
100、/p><p><b> }</b></p><p> //在沒有按鍵的情況下,蛇自己移動身體</p><p> for (i=snake.joint-1; i>0; i--){//蛇的每個節(jié)往前移動 </p><p> snake.x[i] = snake.x[i-1];</p><p&
101、gt; snake.y[i] = snake.y[i-1];</p><p><b> }</b></p><p> //1,2,3,4 表示右,左,上,下四個方向,來決定蛇頭的移動 </p><p> switch(snake.direction){</p><p> case MV_RIGHT: snake
102、.x[0] += 10; break;</p><p> case MV_LEFT: snake.x[0] -= 10; break;</p><p> case MV_UP: snake.y[0] -= 10; break;</p><p> case MV_DOWN: snake.y[0] += 10; break;</p><
103、p><b> }</b></p><p> //從蛇的第四節(jié)開始判斷是否撞到自己,因為蛇頭為兩節(jié),第三節(jié)不可能拐過來</p><p> for (i=3; i<snake.joint; i++){</p><p> if (snake.x[i]==snake.x[0] && snake.y[i]==snake
104、.y[0]){</p><p> GameOver(score);//顯示失敗</p><p> snake.life = 1; //蛇死*/</p><p><b> break;</b></p><p><b> }</b></p><p><b&g
105、t; }</b></p><p> //判斷蛇是否撞到墻壁</p><p> if (snake.x[0]<55 || snake.x[0]>595 || snake.y[0]<55 || snake.y[0]>455){</p><p> GameOver(score);//本次游戲結(jié)束</p>&l
106、t;p> snake.life = 1; //蛇死</p><p><b> }</b></p><p> for(int obs_i = 0; obs_i<vox.size(); obs_i++){//-----判斷是否撞到障礙物----</p><p> if(vox[obs_i]==snake.x[0] &a
107、mp;& voy[obs_i]==snake.y[0]) GameOver(score);</p><p><b> }</b></p><p> //以上三種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開始</p><p> if (snake.life == 1)break;</p><p> if (sn
108、ake.x[0]==food.x && snake.y[0]==food.y){ //吃到食物后</p><p> //把畫面上的食物清除</p><p> setcolor(0);</p><p> rectangle(food.x, food.y, food.x+10, food.y-10);</p><p>
109、 //新的一節(jié)先放在看不見的位置,下次循環(huán)就取前一節(jié)的位置</p><p> snake.x[snake.joint] =-20; snake.y[snake.joint] =-20;</p><p> snake.joint++;//蛇的身體長一節(jié)</p><p> food.addFood = 1;//畫面上需要出現(xiàn)新食物</p>
110、<p> score += 10;</p><p> //-------------------------</p><p> PrScore(score);//輸出新得分</p><p><b> }</b></p><p><b> //畫蛇</b></p&
111、gt;<p> setcolor(RED);</p><p> for (i=0; i<snake.joint; i++)</p><p><b> {</b></p><p> rectangle(snake.x[i], snake.y[i],snake.x[i]+10, snake.y[i]-10);</p
112、><p><b> }</b></p><p> Sleep(gamespeed); //延時控制蛇的速度</p><p> //去除蛇的最后一節(jié)</p><p> setcolor(0);</p><p> rectangle(snake.x[snake.joint-1], sna
113、ke.y[snake.joint-1],</p><p> snake.x[snake.joint-1]+10,snake.y[snake.joint-1]-10);</p><p> } //end of while(!kbhit)</p><p> if (snake.life == 1) break;//如果蛇死,則跳出循環(huán)</
114、p><p> key=getch();//接收按鍵</p><p> switch(key){//判斷按鍵,是否往相反方向移動,按Esc鍵則退出</p><p> case 'w':case 'W':{if(snake.direction!=MV_DOWN) snake.direction = MV_UP;}break;</p
115、><p> case 'd':case 'D':{if(snake.direction!=MV_LEFT) snake.direction = MV_RIGHT;}break;</p><p> case 'a':case 'A':{if(snake.direction!=MV_RIGHT) snake.direction =
116、 MV_LEFT;}break;</p><p> case 's':case 'S':{if(snake.direction!=MV_UP) snake.direction = MV_DOWN;}break;</p><p> case 'p':case 'P':fun_pause();break;</p>
117、<p> case 'r':case 'R':fun_reset();break;</p><p><b> }</b></p><p> }//end of while(1)</p><p><b> }</b></p><p>
118、; void fun_pause()</p><p><b> {</b></p><p> while(true)</p><p><b> {</b></p><p> char c = getch();</p><p> if(c=='P'
119、|| c=='p')</p><p><b> {</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><
120、b> }</b></p><p> void fun_reset()</p><p><b> {</b></p><p><b> play();</b></p><p><b> }</b></p><p> void
121、fun_obstacle(){</p><p> rnd1 = random(50,580);</p><p> rnd2 = random(60,550);</p><p> while(rnd1%10 != 0)</p><p><b> rnd1++;</b></p><p> w
122、hile(rnd2%10 != 0) </p><p><b> rnd2++;</b></p><p> vox.push_back(rnd1);</p><p> voy.push_back(rnd2);</p><p> setfillstyle(RGB(255,204,51));</p>&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論