《贪吃蛇游戏课程设计》报告 联系客服

发布时间 : 星期日 文章《贪吃蛇游戏课程设计》报告更新完毕开始阅读2e9d6e708e9951e79b8927f1

#define RIGHT 100//D #define DOWN 115//S #define UP 119//W #define Esc 0x011b int i,key; int score=0;

int gamespeed=250;//游戏速度可根据实际情况自行调整 struct Food {

int x;//食物的横坐标 int y;//食物的纵坐标

int yes;//判断是否要出现食物的变量

void PrScore();//输出成绩 void main()//主函数 { }

void Init()//图形驱动 {

int gd=DETECT,gm;

initgraph(&gd,&gm,\此处为turbocInit();//图形驱动 DrawK();//开始画面

GamePlay();//玩游戏的具体过程 Close();//图形结束

的路径,读者可以根据自己的电脑而改*/ }

void DrawK()//开始画面,左上角坐标为(50,

cleardevice();

}food;//食物的结构体 struct Snake {

int x[M]; int y[M];

int node;//蛇的节数

int direction;//蛇的移动方向

int life;//蛇的生命,0表示活着,1表示

40),右下角坐标为(610,460)的围墙 {

13

setbkcolor(GREEN); setcolor(LIGHTRED);

setlinestyle(0,0,5);//设置线型 for(i=50;i<=600;i+=10)//画围墙 { }

for(i=40;i<=450;i+=10) {

rectangle(i,40,i+10,49);//上边 rectangle(i,451,i+10,460);//下边

死亡 }snake;

void Init();//图形驱动 void Close();//图形结束 void DrawK();//开始画面

void GamePlay();//玩游戏的具体过程 void GameOver();//游戏结束

}

}

rectangle(50,i,59,i+10);//左边 rectangle(601,i,610,i+10);//右边

while(food.x!=0)//食物

随即出现后必须让食物能够在整格内,这样才能让蛇迟到

food.x++;

void GamePlay()//玩游戏的具体过程 {

rand();//随机数发生器

food.yes=1;//1表示需要出现新食物,0表

while(food.y!=0)

food.y++;

food.yes=0;//画面上有食物

示已经存在食物 标

snake.x[1]=110;snake.y[1]=100 ; snake.node=2;//蛇的节数 PrScore();//输出分数

while(1)//可重复玩游戏,按ESC键结束 {

while(!kbhit())//在没有按键的情况snake.life=0;//蛇活着 snake.direction=1;//方向往右

snake.x[0]=100;snake.y[0]=100;//舌头坐

}

if(food.yes==0)//画面上有食物

就要显示

{

setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food

.y-10);

}

for(i=snake.node-1;i>0;i--)//

蛇的每个环节往前移动,也就是贪吃蛇的关键算法

switch(snake.direction)//1,2,3,4表示上

{ }

snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1];

下,蛇自己移动身体 物

{

food.x=rand()@0+60; food.y=rand()50+60;

{

if(food.yes==1)//需要出现新食

下左右四个方向,通过这个判断来移动蛇头

14

{

}

case 1:

snake.x[0]+=10;break;

}

if(snake.life==1)//以上两种判

case 2:

snake.x[0]-=10;break;

断以后,如果蛇死就跳出内循环,重新开始

if(snake.x[0]==food.x&&snake.y[0]==foo

break;

case 3:

snake.y[0]-=10;break;

case 4:

snake.y[0]+=10;break;

d.y)//吃到食物以后

{

setcolor(0);//把画面上的食

for(i=3;i

蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来

{

rectangle(food.x,food.y,food.x+10,food

.y-10);

snake.x[snake.node]=-20; snake.y[snake.node]=-20;//

if(snake.x[i]==snake.x[0]&&snake.y[i]=

=snake.y[0])

if(snake.x[0]<55||snake.x[0]>595||snak

}

{ }

GameOver();//显示失败 snake.life=1; break;

新的一节先放在看不见得位置,下次循环就取前一节的位置

snake.node++;//蛇的身体长

一节

}

setcolor(WHITE);//画出蛇 for(i=0;i

food.yes=1; score+=10;

PrScore();//输出新的得分

e.y[0]<55||snake.y[0]>455)//蛇是否撞到墙壁

{

GameOver();//本次游戏结束 snake.life=1;//蛇死

15

rectangle(snake.x[i],snake.y[i],snake.

x[i]+10,snake.y[i]-10);

Sleep(gamespeed);

setcolor(0);//用黑色去除蛇的最

void GameOver()//游戏结束 { }

void PrScore()//输出成绩 {

cleardevice(); PrScore(); setcolor(RED);

outtextxy(100,100,\我会回来的!!!!!\getch();

后一节

rectangle(snake.x[snake.node-1],snake.

y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

}

if(snake.life==1)//如果蛇死就跳出

循环

break;

}

char str[10];

setfillstyle(SOLID_FILL,YELLOW); bar(50,15,220,35); setcolor(6);

sprintf(str,\outtextxy(55,20,str);

key=getchar();//接受案件 if(key==Esc)//按ESC键退出

break;

else

if(key==UP&&snake.direction!=4)

snake.direction=3;

else void Close()//图形结束 { }

getch(); closegraph();

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) }

16

snake.direction=4;

}//endwhile(1)