c语言snake程序

基本思路:?

蛇每吃一次食物,蛇身就会增加一格,蛇头的移动由上、下、左、右控制,而蛇身会跟着蛇头走,蛇身每走完最后一格就去上一格蛇身的位置,以此类推。

# include & ltstdio.h & gt

# include & ltconio.h & gt

# include & ltwindows.h & gt

#定义BEG _ X 2

# define BEG _ Y 1

#定义WID 20

#定义HEI 20

处理hout

typedef枚举{UP,DOWN,LEFT,RIGHT} DIR。

typedef结构Snake_body

{

坐标位置;//蛇身体的位置

struct Snake _ body * next//下一条蛇

struct Snake _ body * prev//上一个蛇身

}SNAKE,* PSNAKE

PSNAKE head = NULL//蛇头

PSNAKE tail = NULL//蛇尾

//绘制游戏边框函数

void DrawBorder()

{

int i,j;

COORD pos = {BEG_X,BEG _ Y };

for(I = 0;我& lt黑;++i)

{

SetConsoleCursorPosition(hout,pos);

for(j = 0;j & ltWID;++j)

{

If(i == 0)//第一行

{

如果(j == 0)

printf("┏”);

else if(j == WID - 1)

printf("┓”);

其他

printf("━");

}

Else if(i == HEI-1)//最后一行

{

如果(j == 0)

printf("┗”);

else if(j == WID - 1)

printf("┛”);

其他

printf("━");

}

Else if(j == 0 || j == WID-1)//第一列或最后一列

printf("┃”);

其他

printf("?);

}

++位置。y;

}

}

//添加蛇身功能

空添加体(坐标位置)

{

PSNAKE pnew =(PSNAKE)calloc(1,sizeof(SNAKE));

pnew-& gt;pos = pos

如果(!头)

{

head = tail = pnew

}

其他

{

pnew-& gt;下一个=头;//新创建的蛇身的next指向原来的蛇头。

head->;prev = pnew//原蛇头的prev指向新创建的蛇身。

head = pnew//将新创建的蛇身作为新的蛇头。

}

SetConsoleCursorPosition(hout,head-& gt;pos);

printf("◎;");

}

//蛇形运动的功能

void MoveBody(方向方向)

{

PSNAKE ptmp

COORD pos = head-& gt;pos

开关(方向)

{

案例向上:

if(head-& gt;位置。Y & gtBEG_Y + 1)

-位置。y;

其他

返回;

打破;

案例向下:

if(head-& gt;位置。Y & ltBEG_Y + HEI - 2)

++位置。y;

其他

返回;

打破;

案例左侧:

if(head-& gt;位置。X & gtBEG_X + 2)

位置。x-= 2;

其他

返回;

打破;

案例权利:

if(head-& gt;位置。X & ltBEG_X + (WID - 2) * 2)

位置。x+= 2;

不然呢?

返回;

打破;

}

AddBody(位置);//添加了新的蛇头。

ptmp = tail//保存当前的蛇尾。

tail = tail-& gt;prev

if(尾部)

尾巴-& gt;next = NULL

SetConsoleCursorPosition(hout,ptmp-& gt;pos);

printf("?);

免费(ptmp);

}

int main()

{

int ctrl

DIR dir =右;//初始蛇形方向是向右的。

COORD pos = {BEG_X + 2,BEG _ Y+HEI/2 };

system(" color 0E ");

系统("模式控制列=90行=30行");

hout = GetStdHandle(STD _ OUTPUT _ HANDLE);

Printf(" -蛇的运动);

draw border();

//自定义几条蛇的身体。

AddBody(位置);

位置。x+= 2;

AddBody(位置);

位置。x+= 2;

AddBody(位置);

位置。x+= 2;

AddBody(位置);

位置。x+= 2;

AddBody(位置);

位置。x+= 2;

AddBody(位置);

位置。x+= 2;

AddBody(位置);

//控制蛇的移动

while(ctrl = getch())

{

开关(ctrl)

{

案例“w”:

if(dir == DOWN)

继续;

dir = UP

打破;

案例:

if(dir == UP)

继续;

dir = DOWN

打破;

案例“a”:

if(dir == RIGHT)

继续;

dir = LEFT

打破;

案例“d”:

if(dir == LEFT)

继续;

dir = RIGHT

打破;

案例“q”:

返回0;

}

move body(dir);

}

返回0;

}

扩展数据:

实现逻辑

1,可以设置光标,可以在配方位置打印配方符号。

2、涉及一个结构,包括两个元素坐标元素和一个结构指针。

3.将结构串联起来形成链表,遍历得到成员的坐标,打印符号得到蛇体。

4,不断加头,去尾,重新遍历坐标,然后打印形成蛇的运动。

5、食品生产的地点,不能越界,不能与蛇身重合。

6、蛇的转弯判断,一个规则,不允许倒退。

7、实现转向,用行进方向来确定新的关节坐标(当前头部上下、左右)

8、死亡检测,头部节点坐标是否与墙壁重合,是否与身体其他关节重合。

9.加速和减速,并设置刷新睡眠时间。

百度百科-C语言