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语言