在上一篇文章中,小编为您详细介绍了关于《新增禁止追踪功能?苹果Safari浏览器》相关知识。 本篇中小编将再为您讲解标题贪吃蛇代码?C语言课程设计。
#define N ②⓪⓪
#include graphics.h
#include stdlib.h
#include dos.h
#define LEFT ⓪x④b⓪⓪
#define RIGHT ⓪x④d⓪⓪
#define DOWN ⓪x⑤⓪⓪⓪
#define UP ⓪x④⑧⓪⓪
#define ESC ⓪x⓪①①b
int i,key;
int score=⓪;/*得分*/
int gamespeed=⑤⓪⓪⓪⓪;/*游戏速度自己调整*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,⓪活着,①死亡*/
}snake;
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DrawK(void);/*开始画面*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
/*主函数*/
void main(void)
{
Init();/*图形驱动*/
DrawK();/*开始画面*/
GamePlay();/*玩游戏具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(gd,gm,"c:\\tc");
cleardevice();
}
/*开始画面,左上角坐标为(⑤⓪ · ④⓪),右下角坐标为(⑥①⓪ · ④⑥⓪)的围墙*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(①①);
setlinestyle(SOLID_LINE,⓪ · THICK_WIDTH);/*设置线型*/
for(i=⑤⓪;i=⑥⓪⓪;i+=①⓪)/*画围墙*/
{
rectangle(i,④⓪ · i+①⓪ · ④⑨); /*上边*/
rectangle(i,④⑤① · i+①⓪ · ④⑥⓪);/*下边*/
}
for(i=④⓪;i=④⑤⓪;i+=①⓪)
{
rectangle(⑤⓪ · i,⑤⑨ · i+①⓪); /*左边*/
rectangle(⑥⓪① · i,⑥①⓪ · i+①⓪);/*右边*/
}
}
/*玩游戏具体过程*/
void GamePlay(void)
{
randomize();/*随机数发生器*/
food.yes=①;/*①表示需要出现新食物,⓪表示已经存在食物*/
snake.life=⓪;/*活着*/
snake.direction=①;/*方向往右*/
snake.x[⓪]=①⓪⓪;snake.y[⓪]=①⓪⓪;/*蛇头*/
snake.x[①]=①①⓪;snake.y[①]=①⓪⓪;
snake.node=②;/*节数*/
PrScore();/*输出得分*/
while(①)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==①)/*需要出现新食物*/
{
food.x=rand()%④⓪⓪+⑥⓪;
food.y=rand()%③⑤⓪+⑥⓪;
while(food.x%①⓪!=⓪)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%①⓪!=⓪)
food.y++;
food.yes=⓪;/*画面上有食物了*/
}
if(food.yes==⓪)/*画面上有食物了就要显示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+①⓪ · food.y-①⓪);
}
for(i=snake.node-①;i⓪;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
{
snake.x[i]=snake.x[i-①];
snake.y[i]=snake.y[i-①];
}
/*① · ② · ③ · ④表示右,左,上,下④个方向,通过这个判断来移动蛇头*/
switch(snake.direction)
{
case ①:snake.x[⓪]+=①⓪;break;
case ②: snake.x[⓪]-=①⓪;break;
case ③: snake.y[⓪]-=①⓪;break;
case ④: snake.y[⓪]+=①⓪;break;
}
for(i=③;isnake.node;i++)/*从蛇的第④节开始判断是否撞到自己了,因为蛇头为两节,第③节不可能拐过来*/
{
if(snake.x[i]==snake.x[⓪]snake.y[i]==snake.y[⓪])
{
GameOver();/*显示失败*/
snake.life=①;
break;
}
}
if(snake.x[⓪]⑤⑤||snake.x[⓪]⑤⑨⑤||snake.y[⓪]⑤⑤||
snake.y[⓪]④⑤⑤)/*蛇是否撞到墙壁*/
{
GameOver();/*本次游戏结束*/
snake.life=①; /*蛇死*/
}
if(snake.life==①)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
break;
if(snake.x[⓪]==food.xsnake.y[⓪]==food.y)/*吃到食物以后*/
{
setcolor(⓪);/*把画面上的食物东西去掉*/
rectangle(food.x,food.y,food.x+①⓪ · food.y-①⓪);
snake.x[snake.node]=-②⓪;snake.y[snake.node]=-②⓪;
/*新的①节先放在看不见的位置,下次循环就取前①节的位置*/
snake.node++;/*蛇的身体长①节*/
food.yes=①;/*画面上需要出现新的食物*/
score+=①⓪;
PrScore();/*输出新得分*/
}
setcolor(④);/*画出蛇*/
for(i=⓪;isnake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+①⓪ ·
snake.y[i]-①⓪);
delay(gamespeed);
setcolor(⓪);/*用黑色去除蛇的的最后①节*/
rectangle(snake.x[snake.node-①],snake.y[snake.node-①],
snake.x[snake.node-①]+①⓪ · snake.y[snake.node-①]-①⓪);
} /*endwhile(!kbhit)*/
if(snake.life==①)/*如果蛇死就跳出循环*/
break;
key=bioskey(⓪);/*接收按键*/
if(key==ESC)/*按ESC键退出*/
break;
else
if(key==UPsnake.direction!=④)
/*判断是否往相反的方向移动*/
snake.direction=③;
else
if(key==RIGHTsnake.direction!=②)
snake.direction=①;
else
if(key==LEFTsnake.direction!=①)
snake.direction=②;
else
if(key==DOWNsnake.direction!=③)
snake.direction=④;
}/*endwhile(①)*/
}
/*游戏结束*/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(⓪ · ⓪ · ④);
outtextxy(②⓪⓪ · ②⓪⓪ · "GAME OVER");
getch();
}
/*输出成绩*/
void PrScore(void)
{
char str[①⓪];
setfillstyle(SOLID_FILL,YELLOW);
bar(⑤⓪ · ①⑤ · ②②⓪ · ③⑤);
setcolor(⑥);
settextstyle(⓪ · ⓪ · ②);
sprintf(str,"score:%d",score);
outtextxy(⑤⑤ · ②⓪ · str);
}
/*图形结束*/
void Close(void)
{
getch();
closegraph();
编后语:关于《贪吃蛇代码?C语言课程设计》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《pre?Longhorn》,感兴趣的同学可以点击进去看看。