贪吃蛇游戏代码程序
# include & ltstdlib.h & gt
# include & ltdos.h & gt
#定义左0x4b00
#定义右0x4d00
#向下定义0x5000
#定义高达0x4800
#定义ESC 0x011b
int i,key
int得分= 0;
int gamespeed = 32000
食物结构/*食物的结构*/
{
int x;/*食物横坐标*/
int y;/*食物的纵坐标*/
int yes/*食物是否出现的变量*/
}食物;
Structsnake/*蛇的结构*/
{
int x[N];
int y[N];
int节点;/*蛇的结数*/
int方向;/*蛇的方向*/
int life/*蛇的命,0是活的,1是死的*/
}蛇;
void Init(void);/*图形驱动程序*/
void Close(无效);/*关闭游戏功能*/
void DrawK(无效);/*绘图功能*/
void game over(void);/*输出故障功能*/
void玩法();/*游戏控制功能主程序*/
void PrScore(void);/*小数输出函数*/
DELAY(char ch)/*调整游戏速度*/
{
if(ch=='3 ')
{
延迟(gamespeed);/*delay是延迟函数*/
}
else if(ch=='2 ')
{
延迟(gamespeed);
}
}
Menu()/*游戏开始菜单*/
{
char ch
printf("请选择游戏速度:\ n ");
printf(" 1-快2-正常3-慢\ n ");
printf(" \ n请按数字..\ n ");
做
{ ch = getch();}
而(ch!= ' 1 ' & amp;& ampch!= ' 2 ' & amp& ampch!='3');
clr SCR();
返回(ch);
}
/*主函数*/
无效总管(无效)
{
int ch
ch = Menu();
init();
DrawK();
游戏性(ch);
close();
}
void初始化(void)
{
int gd=DETECT,GM;
init graph(& amp;gd,& ampgm," c:\ \ TC ");
clear device();
}
void DrawK(无效)
{
set color(11);
setlinestyle(SOLID_LINE,0,THICK _ WIDTH);
for(I = 50;我& lt=600;i+=10)
{
矩形(I,40,i+10,49);/*绘制上边框*/
矩形(I,451,i+10,460);/*绘制底部边框*/
}
for(I = 40;我& lt=450;i+=10)
{
矩形(50,I,59,I+10);/*绘制左边框*/
矩形(601,I,610,I+10);/*画右边的方框*/
}
}
无效游戏(char ch)
{
randomize();/*随机数生成器*/
food . yes = 1;/*1代表食物出现,0代表食物存在*/
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;
PrScore();
而(1) /*可以重复游戏*/
{
而(!Khit ())/*蛇没有按钮自己走*/
{
If(food.yes==1) /*需要食物*/
{
food . x = rand()% 400+60;
food . y = rand()% 350+60;/*使用rand函数随机生成食物坐标*/
而(food.x%10!=0)
food . x++;
而(food.y%10!=0)
food . y++;/*判断食物是否出现在整个单元格*/
food . yes = 0;/*现在有吃的了*/
}
If(food.yes==0) /*显示可用的食物*/
{
setcolor(绿色);
矩形(food.x,food.y,food.x+10,food . y-10);
}
for(I = snake . node-1;我& gt0;I-)/* Snake的移动算法*/
{
snake . x[I]= snake . x[I-1];
snake . y[I]= snake . y[I-1];/* Snake的身体运动算法*/
}
Switch(snake.direction) /* Snake的头部运动算法来控制运动*/
{
case 1:snake . x[0]+= 10;打破;
案例二:snake . x[0]-= 10;打破;
案例三:snake . y[0]-= 10;打破;
案例四:snake . y[0]+= 10;打破;
}
for(I = 3;我& ltsnake .节点;I++) /*判断头部是否与身体碰撞*/
{
if(snake . x[I]= = snake . x[0]& amp;& ampsnake.y[i]==snake.y[0])
{
game over();
snake . life = 1;
打破;
}
}
/*下面是如何判断自己是否碰壁*/
if(snake . x[0]& lt;55 | | snake . x[0]& gt;595 | | snake . y[0]& lt;55 | | snake . y[0]& gt;455)
{
game over();
snake . life = 1;
}
If(snake.life==1) /*死了就退出循环*/
打破;
if(snake . x[0]= = food . x & amp;& ampSnake.y[0]==food.y) /*判断蛇是否吃过食物*/
{
set color(0);
矩形(food.x,food.y,food.x+10,food . y-10);/*吃完后用黑色擦拭食物*/
snake . x[snake . node]=-20;snake . y[snake . node]=-20;/*现在将添加的部分隐藏起来*/
snake . node++;
food . yes = 1;
得分+= 10;
PrScore();
}
set color(4);/*每次运动后擦拭身体背部*/
for(I = 0;我& ltsnake .节点;i++)
矩形(snake.x[i],snake.y[i],snake.x[i]+10,snake . y[I]-10);
延迟(gamespeed);
延迟(ch);
set color(0);
矩形(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)
打破;
key = BIOS key(0);/*接受按钮*/
if(key==ESC)
打破;
其他
if(key = = UP & amp;& amp蛇,方向!=4)/*判断是否改变方向*/
snake . direction = 3;
其他
if(key = = RIGHT & amp;& amp蛇,方向!=2)
snake . direction = 1;
其他
if(key = = LEFT & amp;& amp蛇,方向!=1)
snake . direction = 2;
其他
if(key = = DOWN & amp;& amp蛇,方向!=3)
snake . direction = 4;
}
}
无效游戏结束(无效)
{
clear device();
setcolor(红色);
settextstyle(0,0,4);
outtextxy(200,200,“游戏结束”);
getch();
}
无效PrScore(无效)
{
char str[10];
setfillstyle(SOLID_FILL,黄色);
吧(50,15,220,35);
set color(6);
settextstyle(0,0,2);
sprintf(str," scord:%d ",score);
outtextxy(55,20,str);
}
无效关闭(无效)
{
getch();
closegraph();
}