貪吃蛇游戲 C程序 報(bào)告_第1頁(yè)
貪吃蛇游戲 C程序 報(bào)告_第2頁(yè)
貪吃蛇游戲 C程序 報(bào)告_第3頁(yè)
貪吃蛇游戲 C程序 報(bào)告_第4頁(yè)
貪吃蛇游戲 C程序 報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

一、讀程序題部分(貪吃蛇)

1、程序的功能設(shè)計(jì)游戲界面,包括畫(huà)墻、畫(huà)蛇、畫(huà)食物,并且設(shè)置蛇和食物的屬性,編寫(xiě)蛇的運(yùn)動(dòng)方式和游戲方式。2、主函數(shù)分析主函數(shù)中前兩行與編寫(xiě)圖形程序有關(guān),第三行中調(diào)用Speed函數(shù),把Speed函數(shù)的返回值付給變量speed;第五行dwall函數(shù)的作用是畫(huà)墻,函數(shù)中又調(diào)用wall函數(shù)來(lái)畫(huà)墻上的磚塊3、函數(shù)的調(diào)用關(guān)系4、數(shù)據(jù)變量定義作用定義食物的橫坐標(biāo)food.x和食物的縱坐標(biāo)food.y可以有效的隨機(jī)設(shè)置食物出現(xiàn)在界面的任何地方;定義snake.life表示蛇的生死以否,好判斷是否結(jié)束游戲snake.dir=1;/*方向向右*/定義snake.x[0]和snake.y[0]表示蛇頭的坐標(biāo),在后面蛇撞墻死的問(wèn)題上用的到蛇頭的坐標(biāo);定義蛇的節(jié)數(shù)snake.node,方便蛇每吃到食物節(jié)數(shù)增加;定義snake.level,顯示蛇的闖關(guān)數(shù)5、主要函數(shù)的功能、流程圖dwall():畫(huà)墻wall():畫(huà)組成墻的磚Speed():選擇貪吃蛇的速度line():畫(huà)線(xiàn)函數(shù),畫(huà)磚的線(xiàn)條gotoxy():定位坐標(biāo)Play():調(diào)用各函數(shù),開(kāi)始完游戲GameOver():結(jié)束游戲6、程序的不足及改進(jìn)沒(méi)有障礙墻,游戲過(guò)于簡(jiǎn)單;沒(méi)有游戲獎(jiǎng)勵(lì),游戲趣味性不高;改進(jìn):設(shè)置障礙墻,蛇撞到墻也死;代碼:for(j=200;j<=300;j+=10){wall(j,300);/*畫(huà)橫的障礙墻*/}for(j=300;j<=350;j+=10){wall(300,j);/*畫(huà)豎的障礙墻*/}不足:沒(méi)有游戲獎(jiǎng)勵(lì),游戲趣味性不高;改進(jìn):增加生命值,蛇每吃到三顆食物,則增加一個(gè)生命值;代碼:定義food.level,在Play函授中初始化,在設(shè)置蛇每吃到一顆食物就增長(zhǎng)一節(jié)身體的代碼后加上if(snake.node%3==0){snake.level++;/*除第一關(guān)外,其余每吃3顆食物,就增加一個(gè)生命值*/gotoxy(5,2);printf("Thelevelis%d",snake.level);/*左上角顯示出生命值(級(jí)別)*/}7、加上注釋、改進(jìn)后的完整代碼#include<graphics.h>#include<stdlib.h>#include<dos.h>#include<conio.h>#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011b#defineN100/*貪吃蛇的最大長(zhǎng)度*/#defineP0x1970/*定義暫停功能鍵*/inti,key;intspeed;/*游戲速度*/structFOOD{intx;/*食物的橫坐標(biāo)*/inty;/*食物的縱坐標(biāo)*/intflag;/*標(biāo)志是否要出現(xiàn)食物*/}food;structSnake{intx[N];inty[N];intnode;/*蛇的節(jié)數(shù)*/intdir;/*蛇移動(dòng)方向*/intlife;/*標(biāo)志是死是活*/intlevel;/*定義生命值(級(jí)別)*/}snake;voidGameOver();/*結(jié)束游戲*/voidPlay();/*玩游戲過(guò)程*/voiddwall();/*畫(huà)墻*/voidwall(intx,inty);/*畫(huà)組成墻的磚*/intSpeed();/*選擇貪吃蛇的速度*/main(){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");speed=Speed();/*將函數(shù)返回值賦給speed*/cleardevice();/*清屏*/dwall();/*開(kāi)始畫(huà)墻*/Play();/*開(kāi)始完游戲*/getch();closegraph();/*退出圖形界面*/}voidwall(intx,inty){intsizx=9;intsizy=9;setcolor(15);/*白色畫(huà)磚的上邊和左邊*/line(x,y,x+sizx,y);line(x,y+1,x+sizx-1,y+1);line(x,y,x,y+sizy);line(x+1,y,x+1,y+sizy-1);setcolor(4);/*紅色畫(huà)磚的右面和下面*/line(x+1,y+sizy,x+sizx,y+sizy);line(x+2,y+sizy-1,x+sizx,y+sizy-1);line(x+sizx-1,y+2,x+sizx-1,y+sizy-1);line(x+sizx,y+1,x+sizx,y+sizy);setfillstyle(1,12);/*用淡紅色填充磚的中間部分*/bar(x+2,y+2,x+sizx-2,y+sizy-2);}voiddwall()/*用前面畫(huà)好的磚來(lái)畫(huà)墻*/{intj;for(j=50;j<=600;j+=10){wall(j,40);/*畫(huà)上面墻*/wall(j,451);/*畫(huà)下面墻*/}for(j=40;j<=450;j+=10){wall(50,j);/*畫(huà)左面墻*/wall(601,j);/*畫(huà)右面墻*/}for(j=200;j<=300;j+=10){wall(j,300);/*畫(huà)橫的障礙墻*/}for(j=300;j<=350;j+=10){wall(300,j);/*畫(huà)豎的障礙墻*/}}intSpeed()/*選擇貪吃蛇運(yùn)行的速度*/{intm;gotoxy(20,10);printf("level1\n");gotoxy(20,12);printf("level2\n");gotoxy(20,14);printf("level3\n");gotoxy(20,16);/*增加一個(gè)速度選項(xiàng)*/printf("level4\n\t\tpleasechoose:");scanf("%d",&m);switch(m){case1:return60000;case2:return40000;case3:return20000;case4:return10000;default:cleardevice();Speed();}}voidPlay(void)/*游戲?qū)崿F(xiàn)過(guò)程*/{srand((unsignedlong)time(0));food.flag=1;/*1表示需出現(xiàn)新食物,0表示食物已存在*/snake.life=0;/*標(biāo)志貪吃蛇活著*/snake.dir=1;/*方向向右*/snake.x[0]=300;snake.y[0]=240;/*定位蛇頭初始位置*/snake.x[1]=300;snake.y[1]=240;snake.node=2;/*貪食蛇節(jié)數(shù)*/snake.level=1;/*生命值(級(jí)別)初始化*/do{while(!kbhit())/*在沒(méi)有按鍵的情況下,蛇自己移動(dòng)身體*/{if(food.flag==1)/*需要出現(xiàn)新食物*/do{food.x=rand()%520+60;food.y=rand()%370+60;food.flag=0;/*標(biāo)志已有食物*/}while(food.x%10!=0||food.y%10!=0);if(food.flag==0)/*畫(huà)出食物*/{setcolor(WHITE);/*設(shè)置食物的顏色*/setlinestyle(3,0,3);rectangle(food.x,food.y,food.x+10,food.y+10);}for(i=snake.node-1;i>0;i--)/*實(shí)現(xiàn)蛇向前移動(dòng)*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}switch(snake.dir){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++){if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])/*判斷蛇是否吃到自己*/{GameOver();/*游戲結(jié)束*/snake.life=1;/*蛇死*/break;}}if(snake.x[0]<60||snake.x[0]>590||snake.y[0]<50||snake.y[0]>440)/*蛇是否撞到墻壁*/{GameOver();/*游戲結(jié)束*/snake.life=1;/*蛇死*/break;}if(snake.y[0]==300&&snake.x[0]>200&&snake.x[0]<=300)/*蛇是否撞到橫的障礙墻*/{GameOver();/*游戲結(jié)束*/snake.life=1;/*蛇死*/break;}if(snake.x[0]==300&&snake.y[0]>300&&snake.y[0]<=350)/*蛇是否撞到豎的障礙墻*/{GameOver();/*游戲結(jié)束*/snake.life=1;/*蛇死*/break;}if(snake.x[0]==food.x&&snake.y[0]==food.y)/*判斷是否吃到食物*/{setcolor(0);/*用背景色遮蓋調(diào)食物*/rectangle(food.x,food.y,food.x+10,food.y+10);snake.node++;/*蛇的身體長(zhǎng)一節(jié)*/if(snake.node%3==0){snake.level++;/*除第一關(guān)外,其余每吃3顆食物,就增加一個(gè)生命值*/gotoxy(5,2);printf("Thelevelis%d",snake.level);/*左上角顯示出生命值(級(jí)別)*/}food.flag=1;/*需要出現(xiàn)新的食物*/}setcolor(YELLOW);/*畫(huà)蛇(設(shè)置蛇的顏色)*/for(i=0;i<snake.node;i++){setlinestyle(0,0,1);rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]+10);}delay(speed);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)*

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論