版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE10湖南文理學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:計(jì)算機(jī)軟件技術(shù)基礎(chǔ)學(xué)院:電氣與信息工程學(xué)院專業(yè)班級(jí):通信08101姓名:吳春香學(xué)號(hào):200816020110指導(dǎo)教師:曹玲玲完成時(shí)間:2010年12月27日?qǐng)?bào)告成績(jī):評(píng)閱意見(jiàn):
評(píng)閱老師:評(píng)閱時(shí)間:目錄TOC\o"1-2"\h\z\u一程序功能 3二設(shè)計(jì)目的 3三程序設(shè)計(jì) 33.1游戲界面 33.2設(shè)計(jì)思路 33.3源程序 53.4程序流程圖 11四上機(jī)測(cè)試 124.1用turboC運(yùn)行C程序步驟 12五運(yùn)行結(jié)果 135.1游戲界面圖 13六小結(jié) 146.1知識(shí)點(diǎn) 14七心得體會(huì) 15八參考文獻(xiàn) 15貪吃蛇游戲課程設(shè)計(jì)一程序功能貪吃蛇游戲是一個(gè)經(jīng)典小游戲,一條蛇在封閉圍墻里,圍墻里隨機(jī)出現(xiàn)一個(gè)食物,通過(guò)按鍵盤(pán)四個(gè)光標(biāo)鍵控制蛇向上下左右四個(gè)方向移動(dòng),蛇頭撞倒食物,則食物被吃掉,蛇身體長(zhǎng)一節(jié),同時(shí)記10分,接著又出現(xiàn)食物,等待蛇來(lái)吃,如果蛇在移動(dòng)中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。二設(shè)計(jì)目的本程序?qū)崿F(xiàn)主要技巧在于C程序二維數(shù)組的應(yīng)用。目的在于提高編程的水平。三程序設(shè)計(jì)3.1游戲界面在DOS環(huán)境下,邊框表示圍墻,紅色矩形表示蛇,綠色小方塊表示食物。3.2設(shè)計(jì)思路程序關(guān)鍵在于表示蛇的圖形及蛇的移動(dòng)。用一個(gè)小矩形快表示蛇的一節(jié)身體,身體每長(zhǎng)一節(jié),增加一個(gè)矩形塊,蛇頭用倆節(jié)表示。移動(dòng)時(shí)必須從蛇頭開(kāi)始,所以蛇不能向相反的方向移動(dòng),如果不按任意鍵,蛇自行在當(dāng)前方向上前移,但按下有效方向鍵后,蛇頭朝著該方向移動(dòng),一步移動(dòng)一節(jié)身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動(dòng),圖形的實(shí)現(xiàn)是從蛇頭新位置開(kāi)始畫(huà)出蛇,這時(shí),由于未清屏的原因,原來(lái)的蛇的位置和新蛇的位置差一個(gè)單位,所以看起來(lái)蛇多一節(jié)身體,所以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失也是畫(huà)矩形塊和覆蓋矩形塊。為了便于理解,定義兩個(gè)結(jié)構(gòu)體:食物與蛇數(shù)據(jù)結(jié)構(gòu)表示食物與蛇的矩形塊設(shè)計(jì)為10*10個(gè)像素單位,食物的基本數(shù)據(jù)域?yàn)樗霈F(xiàn)的位置,用x和y座標(biāo)表示,則矩形塊用函數(shù)rectangle(x,y,x+10,y+10)或rectangle(x,y,x+10,y-10)可以畫(huà)出。由于每次只出現(xiàn)一個(gè)食物,所以設(shè)定yes表示是否要出現(xiàn)食物。蛇的一節(jié)身體為一個(gè)矩形塊,表示矩形塊只需起點(diǎn)座標(biāo)x,y。身體不斷增長(zhǎng),用數(shù)組存放每節(jié)座標(biāo),最大設(shè)定為N=200,node表示當(dāng)前節(jié)數(shù)。保存蛇的移動(dòng)方向的變量direction和生命的變量life,一旦life為1,表示蛇死,結(jié)束。#defineN200structFood{intx;/*食物的橫坐標(biāo)*/inty;/*食物的縱坐標(biāo)*/intyes;/*判斷是否要出現(xiàn)食物的變量*/}food;/*食物的結(jié)構(gòu)體*/structSnake{intx[N];inty[N];intnode;/*蛇的節(jié)數(shù)*/intdirection;/*蛇移動(dòng)方向*/intlife;/*蛇的生命,0活著,1死亡*/}snake;2.main()函數(shù)主函數(shù)定義常數(shù),全局變量,函數(shù)原型說(shuō)明,初始化圖形系統(tǒng),調(diào)用drawk()畫(huà)開(kāi)始畫(huà)面,調(diào)用gameplay(),即玩游戲具體過(guò)程,結(jié)束后調(diào)用close()關(guān)閉圖形系統(tǒng),結(jié)束程序。3.畫(huà)界面函數(shù)drawk()主界面是一個(gè)封閉的圍墻,用兩循環(huán)語(yǔ)句分別在水平和垂直方向輸出連續(xù)的寬度和高度均為10單位的矩形方塊,圍成密閉圖形,表示圍墻,函數(shù)setlinestyle(solid_line,0,thick_width)設(shè)置線形寬度3像素。設(shè)置3像素圍墻線,蛇貼墻走時(shí),擦掉部分圍墻線,使線變細(xì),圖形變得不好看,不想這種情況發(fā)生,將線形寬度設(shè)置為1像素。4.游戲函數(shù)gameplay()每次移動(dòng)時(shí)候從最后一節(jié)開(kāi)始到倒數(shù)第二節(jié),將前一節(jié)坐標(biāo)賦給后一節(jié)坐標(biāo),移動(dòng)后把最后一節(jié)用背景色覆蓋,然后蛇頭按方向鍵更改位置。食物的出現(xiàn)要確保它的位置在10的倍數(shù)位置上,蛇吃到食物的判斷是蛇頭坐標(biāo)和食物坐標(biāo)相同。算法如下:(1)設(shè)置初始值。食物要設(shè)置隨機(jī)數(shù)發(fā)生器。初始時(shí),蛇只有蛇頭,設(shè)定一個(gè)開(kāi)始方向。(2)循環(huán)執(zhí)行,按esc退出。1)沒(méi)按鍵時(shí)循環(huán)執(zhí)行。若沒(méi)有食物,隨機(jī)出現(xiàn)食物;有食物,顯示食物,蛇移動(dòng)身體,根據(jù)蛇的方向改變坐標(biāo),并判斷蛇是否撞倒墻或自己,是則蛇死,調(diào)用結(jié)束函數(shù)gameover(),結(jié)束本游戲,重新開(kāi)始。若蛇吃到食物,蛇身體長(zhǎng)一節(jié),數(shù)組元素增加一個(gè),身體節(jié)數(shù),分?jǐn)?shù)都改變。在新位置畫(huà)出蛇。2)如果有按鍵,識(shí)別鍵值。按鍵esc結(jié)束游戲,按鍵為方向鍵,則根據(jù)該鍵改變代表蛇方向的變量direction的值,相反方向鍵無(wú)效。5.游戲結(jié)束函數(shù)gameover()游戲結(jié)束,清屏,輸出分?jǐn)?shù),顯示游戲結(jié)束信息。6.prscore()輸出分?jǐn)?shù)在指定位置用sprintf()將整數(shù)轉(zhuǎn)為字符串,用outtextxy()輸出,bar()函數(shù)的用處是覆蓋原來(lái)的值。7.close()圖形結(jié)束顯示游戲結(jié)束信息畫(huà)面時(shí),按任意鍵關(guān)閉圖形系統(tǒng),程序結(jié)束。3.3源程序#defineN200#include<graphics.h>#include<stdlib.h>#include<dos.h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011binti,key;intscore=0;/*得分*/intgamespeed=50000;/*游戲速度自己調(diào)整*/structFood{intx;/*食物的橫坐標(biāo)*/inty;/*食物的縱坐標(biāo)*/intyes;/*判斷是否要出現(xiàn)食物的變量*/}food;/*食物的結(jié)構(gòu)體*/structSnake{intx[N];inty[N];intnode;/*蛇的節(jié)數(shù)*/intdirection;/*蛇移動(dòng)方向*/intlife;/*蛇的生命,0活著,1死亡*/}snake;voidInit(void);/*圖形驅(qū)動(dòng)*/voidClose(void);/*圖形結(jié)束*/voidDrawK(void);/*開(kāi)始畫(huà)面*/voidGameOver(void);/*結(jié)束游戲*/voidGamePlay(void);/*玩游戲具體過(guò)程*/voidPrScore(void);/*輸出成績(jī)*//*主函數(shù)*/voidmain(void){Init();/*圖形驅(qū)動(dòng)*/DrawK();/*開(kāi)始畫(huà)面*/GamePlay();/*玩游戲具體過(guò)程*/Close();/*圖形結(jié)束*/}/*圖形驅(qū)動(dòng)*/voidInit(void){intgd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");cleardevice();}/*開(kāi)始畫(huà)面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/voidDrawK(void){/*setbkcolor(LIGHTGREEN);*/setcolor(11);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/for(i=50;i<=600;i+=10)/*畫(huà)圍墻*/{rectangle(i,40,i+10,49);/*上邊*/rectangle(i,451,i+10,460);/*下邊*/}for(i=40;i<=450;i+=10){rectangle(50,i,59,i+10);/*左邊*/rectangle(601,i,610,i+10);/*右邊*/}}/*玩游戲具體過(guò)程*/voidGamePlay(void){randomize();/*隨機(jī)數(shù)發(fā)生器*/food.yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/snake.life=0;/*活著*/snake.direction=1;/*方向往右*/snake.x[0]=100;snake.y[0]=100;/*蛇頭*/snake.x[1]=110;snake.y[1]=100;snake.node=2;/*節(jié)數(shù)*/PrScore();/*輸出得分*/while(1)/*可以重復(fù)玩游戲,壓ESC鍵結(jié)束*/{while(!kbhit())/*在沒(méi)有按鍵的情況下,蛇自己移動(dòng)身體*/{ if(food.yes==1)/*需要出現(xiàn)新食物*/ { food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才可以讓蛇吃到*/ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*畫(huà)面上有食物了*/ } if(food.yes==0)/*畫(huà)面上有食物了就要顯示*/ {setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10); }for(i=snake.node-1;i>0;i--)/*蛇的每個(gè)環(huán)節(jié)往前移動(dòng),也就是貪吃蛇的關(guān)鍵算法*/{snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; }/*1,2,3,4表示右,左,上,下四個(gè)方向,通過(guò)這個(gè)判斷來(lái)移動(dòng)蛇頭*/ switch(snake.direction) { case1:snake.x[0]+=10;break; case2:snake.x[0]-=10;break; case3:snake.y[0]-=10;break; case4:snake.y[0]+=10;break; } for(i=3;i<snake.node;i++)/*從蛇的第四節(jié)開(kāi)始判斷是否撞到自己了,因?yàn)樯哳^為兩節(jié),第三節(jié)不可能拐過(guò)來(lái)*/ { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) {GameOver();/*顯示失敗*/snake.life=1;break; }} if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55|| snake.y[0]>455)/*蛇是否撞到墻壁*/ { GameOver();/*本次游戲結(jié)束*/ snake.life=1;/*蛇死*/ } if(snake.life==1)/*以上兩種判斷以后,如果蛇死就跳出內(nèi)循環(huán),重新開(kāi)始*/break; if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ {setcolor(0);/*把畫(huà)面上的食物東西去掉*/rectangle(food.x,food.y,food.x+10,food.y-10); snake.x[snake.node]=-20;snake.y[snake.node]=-20;/*新的一節(jié)先放在看不見(jiàn)的位置,下次循環(huán)就取前一節(jié)的位置*/ snake.node++;/*蛇的身體長(zhǎng)一節(jié)*/ food.yes=1;/*畫(huà)面上需要出現(xiàn)新的食物*/ score+=10; PrScore();/*輸出新得分*/ } setcolor(4);/*畫(huà)出蛇*/ for(i=0;i<snake.node;i++) rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的的最后一節(jié)*/ rectangle(snake.x[snake.node-1],snake.y[snake.node-1], snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);}/*endwhile(!kbhit)*/if(snake.life==1)/*如果蛇死就跳出循環(huán)*/break;key=bioskey(0);/*接收按鍵*/if(key==ESC)/*按ESC鍵退出*/break;elseif(key==UP&&snake.direction!=4)/*判斷是否往相反的方向移動(dòng)*/ snake.direction=3;else if(key==RIGHT&&snake.direction!=2) snake.direction=1; else if(key==LEFT&&snake.direction!=1) snake.direction=2; else if(key==DOWN&&snake.direction!=3) snake.direction=4;}/*endwhile(1)*/}/*游戲結(jié)束*/voidGameOver(void){cleardevice();PrScore();setcolor(RED);settextstyle(0,0,4);outtextxy(200,200,"GAMEOVER");getch();}/*輸出成績(jī)*/voidPrScore(void){charstr[10];setfillstyle(SOLID_FILL,YELLOW);bar(50,15,220,35);setcolor(6);settextstyle(0,0,2);sprintf(str,"score:%d",score);outtextxy(55,20,str);}/*圖形結(jié)束*/voidClose(void){getch();closegraph();}3.4程序流程圖按鍵判斷:改變方向、退出、暫停。ESA?按鍵判斷:改變方向、退出、暫停。ESA?游戲結(jié)束計(jì)算出蛇的下一步位置坐標(biāo)(根據(jù)運(yùn)動(dòng)方向)下一坐標(biāo)是否撞到身體或障礙物?另“下一步位置”坐標(biāo)為新的蛇頭坐標(biāo),并將其坐標(biāo)值入隊(duì)列,繪制新的蛇頭食物蛇是否吃到食物?開(kāi)始,初始化,將蛇的尾、身、頭依次放入隊(duì)列隨機(jī)位置產(chǎn)生一個(gè)新的食物將蛇的尾出隊(duì),在相應(yīng)位置清空尾巴判斷長(zhǎng)度是否達(dá)到贏得游戲的標(biāo)準(zhǔn)?游戲結(jié)束游戲結(jié)束HP--HP==0???圖1貪吃蛇總流程圖四上機(jī)測(cè)試4.1用turboC運(yùn)行C程序步驟1.TurboC2.0英文版使用說(shuō)明(1)用WINZIP解壓在C:\TURBOC2中(運(yùn)行WINZIP,選上usefoldername連同目錄一起解壓,不用新建C:\TURBOC2)(2)若在純DOS環(huán)境下使用鍵入C:\TURBOC2\TC回車即可
若在WIN9X/2000下使用,先建立C:\TURBOC2\TC.EXE文件的DOS快捷方式,再用鼠標(biāo)右擊該快捷方式,在彈出的環(huán)境菜單中選屬性項(xiàng),在屬性對(duì)話框中程序項(xiàng)中可設(shè)置工作目錄,在屏幕項(xiàng)中可設(shè)置全屏或窗口方式。然后雙擊TC快捷方式即可運(yùn)行了。(3)是否安裝成功,運(yùn)行下面程序:
#include<stdio.h>
#include<conio.h>
main()
{
printf("Thisismytestprogram.Pressanykeytocontitue!");
getch();
}
這時(shí)應(yīng)注意輸出文件夾,建議建一個(gè)工作目錄如C:\TCWORK之類,這樣你的輸出文件就不會(huì)和TC2文件混在一起了。然后按Alt+Option在Directriest選項(xiàng)中更改Output項(xiàng)(如果你沒(méi)有解壓在C:\TURBOC2中,也要在這兒做相應(yīng)的更改)2.調(diào)用turboc程序。3.編輯源文件,這里是c1.c。4.編譯源程序。按ALT+C選擇“Compile”菜單并在其下拉菜單中選擇“CompiletoOBJ”,進(jìn)行編譯,得到后綴為.obj的目標(biāo)程序,這里是c1.obj。而后再選“Compile/LinkEXEfile”,進(jìn)行連接操作,得到一個(gè)后綴為.exe的可執(zhí)行文件,這里是c1.exe。5.執(zhí)行程序。將c1.exe放至turboc所在目錄下雙擊即可。五運(yùn)行結(jié)果5.1游戲界面圖1.
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度商鋪物業(yè)委托管理合同(含客戶服務(wù)標(biāo)準(zhǔn)化與滿意度提升)
- 2025年度年度文化旅游用地土地使用權(quán)互換協(xié)議
- 2025年度期貨代客交易賬戶資金使用規(guī)范協(xié)議4篇
- 2025年度醫(yī)療行業(yè)合同管理與財(cái)務(wù)管理規(guī)范3篇
- 二零二五年度商場(chǎng)與物流企業(yè)倉(cāng)儲(chǔ)配送合同
- 2025年度商鋪房屋租賃與智能家居系統(tǒng)集成合同
- 二零二五年度醫(yī)院新生兒科護(hù)理團(tuán)隊(duì)服務(wù)協(xié)議
- 二零二五年度政府項(xiàng)目合同封面圖片制作及審批協(xié)議
- 2025年四川二零二五年度離婚協(xié)議中離婚后共同生活安排協(xié)議
- 打造未來(lái)領(lǐng)導(dǎo)力學(xué)校課程設(shè)置與實(shí)踐案例分析
- 海南省申論真題2020年(縣級(jí)及以上)
- 裝配式部分包覆鋼-混凝土組合結(jié)構(gòu)技術(shù)規(guī)程
- 四川新農(nóng)村建設(shè)農(nóng)房設(shè)計(jì)方案圖集川東南部分
- 2024中國(guó)工業(yè)品電商采購(gòu)白皮書(shū)
- 公安機(jī)關(guān)保密協(xié)議
- 蛇年金蛇賀歲
- 人教版九年級(jí)數(shù)學(xué)上冊(cè)全冊(cè)同步練習(xí)
- 2024年中國(guó)社會(huì)科學(xué)院外國(guó)文學(xué)研究所專業(yè)技術(shù)人員招聘3人歷年高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 第8課《列夫-托爾斯泰》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 職業(yè)咖啡比賽方案策劃書(shū)
- 人教版2024-2025學(xué)年七年級(jí)數(shù)學(xué)上冊(cè)計(jì)算題專項(xiàng)訓(xùn)專題09運(yùn)用運(yùn)算律簡(jiǎn)便運(yùn)算(計(jì)算題專項(xiàng)訓(xùn)練)(學(xué)生版+解析)
評(píng)論
0/150
提交評(píng)論