大家好,感谢邀请,今天来为大家分享一下贪吃蛇从1到30关的问题,以及和贪吃的苹果蛇第30关怎么过 第30关通关攻略的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
一、c语言 贪吃蛇 程序
基本思路:
蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define BEG_X 2
#define BEG_Y 1
#define WID 20
#define HEI 20
HANDLE hout;
typedef enum{UP, DOWN, LEFT, RIGHT} DIR;
typedef struct Snake_body
{
COORD pos;//蛇身的位置
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; i< HEI;++i)
{
SetConsoleCursorPosition(hout, pos);
for(j= 0; j< WID;++j)
{
if(i== 0)//第一行
{
if(j== 0)
printf("┏");
else if(j== WID- 1)
printf("┓");
else
printf("━");
}
else if(i== HEI- 1)//最后一行
{
if(j== 0)
printf("┗");
else if(j== WID- 1)
printf("┛");
else
printf("━");
}
else if(j== 0|| j== WID- 1)//第一列或最后一列
printf("┃");
else
printf("");
}
++pos.Y;
}
}
//添加蛇身的函数
void AddBody(COORD pos)
{
PSNAKE pnew=(PSNAKE)calloc(1, sizeof(SNAKE));
pnew->pos= pos;
if(!head)
{
head= tail= pnew;
}
else
{
pnew->next= head;//新创建蛇身的next指向原先的蛇头
head->prev= pnew;//原先的蛇头的prev指向新创建的蛇身
head= pnew;//把新创建的蛇身作为新的蛇头
}
SetConsoleCursorPosition(hout, head->pos);
printf("◎");
}
//蛇身移动的函数
void MoveBody(DIR dir)
{
PSNAKE ptmp;
COORD pos= head->pos;
switch(dir)
{
case UP:
if(head->pos.Y> BEG_Y+ 1)
pos.Y;
else
return;
break;
case DOWN:
if(head->pos.Y< BEG_Y+ HEI- 2)
++pos.Y;
else
return;
break;
case LEFT:
if(head->pos.X> BEG_X+ 2)
pos.X-= 2;
else
return;
break;
case RIGHT:
if(head->pos.X< BEG_X+(WID- 2)* 2)
pos.X+= 2;
else
return;
break;
}
AddBody(pos);//添加了一个新的蛇头
ptmp= tail;//保存当前的蛇尾
tail= tail->prev;
if(tail)
tail->next= NULL;
SetConsoleCursorPosition(hout, ptmp->pos);
printf("");
free(ptmp);
}
int main()
{
int ctrl;
DIR dir= RIGHT;//初始蛇的方向是向右的
COORD pos={BEG_X+ 2, BEG_Y+ HEI/ 2};
system("color 0E");
system("mode con cols=90 lines=30");
hout= GetStdHandle(STD_OUTPUT_HANDLE);
printf("------------贪吃蛇的移动------------");
DrawBorder();
//自定义几个蛇的身体
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
//控制蛇的移动
while(ctrl= getch())
{
switch(ctrl)
{
case'w':
if(dir== DOWN)
continue;
dir= UP;
break;
case's':
if(dir== UP)
continue;
dir= DOWN;
break;
case'a':
if(dir== RIGHT)
continue;
dir= LEFT;
break;
case'd':
if(dir== LEFT)
continue;
dir= RIGHT;
break;
case'q':
return 0;
}
MoveBody(dir);
}
return 0;
}
扩展资料:
实现逻辑
1,可以设置光标,就能实现制定位置打印制定符号。
2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。
3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。
4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。
5,食物产生的位置判定,不能越界,也不能与蛇身体重合。
6,蛇的转向判定,一条规则,不允许倒退。
7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)
8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。
9,加速减速,设置刷新休眠时间实现。
参考资料来源:百度百科-C语言
二、c语言贪吃蛇代码
基本思路:
蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define BEG_X 2
#define BEG_Y 1

#define WID 20
#define HEI 20
HANDLE hout;
typedef enum{UP, DOWN, LEFT, RIGHT} DIR;
typedef struct Snake_body
{
COORD pos;//蛇身的位置
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; i< HEI;++i)
{
SetConsoleCursorPosition(hout, pos);
for(j= 0; j< WID;++j)
{
if(i== 0)//第一行
{
if(j== 0)
printf("┏");
else if(j== WID- 1)
printf("┓");
else
printf("━");
}
else if(i== HEI- 1)//最后一行
{
if(j== 0)
printf("┗");
else if(j== WID- 1)
printf("┛");
else
printf("━");
}
else if(j== 0|| j== WID- 1)//第一列或最后一列
printf("┃");
else
printf("");
}
++pos.Y;
}
}
//添加蛇身的函数
void AddBody(COORD pos)
{
PSNAKE pnew=(PSNAKE)calloc(1, sizeof(SNAKE));
pnew->pos= pos;
if(!head)
{
head= tail= pnew;
}
else
{
pnew->next= head;//新创建蛇身的next指向原先的蛇头
head->prev= pnew;//原先的蛇头的prev指向新创建的蛇身
head= pnew;//把新创建的蛇身作为新的蛇头
}
SetConsoleCursorPosition(hout, head->pos);
printf("◎");
}
//蛇身移动的函数
void MoveBody(DIR dir)
{
PSNAKE ptmp;
COORD pos= head->pos;
switch(dir)
{
case UP:
if(head->pos.Y> BEG_Y+ 1)
pos.Y;
else
return;
break;
case DOWN:
if(head->pos.Y< BEG_Y+ HEI- 2)
++pos.Y;
else
return;
break;
case LEFT:
if(head->pos.X> BEG_X+ 2)
pos.X-= 2;
else
return;
break;
case RIGHT:
if(head->pos.X< BEG_X+(WID- 2)* 2)
pos.X+= 2;
else
return;
break;
}
AddBody(pos);//添加了一个新的蛇头
ptmp= tail;//保存当前的蛇尾
tail= tail->prev;
if(tail)
tail->next= NULL;
SetConsoleCursorPosition(hout, ptmp->pos);
printf("");
free(ptmp);
}
int main()
{
int ctrl;
DIR dir= RIGHT;//初始蛇的方向是向右的
COORD pos={BEG_X+ 2, BEG_Y+ HEI/ 2};
system("color 0E");
system("mode con cols=90 lines=30");
hout= GetStdHandle(STD_OUTPUT_HANDLE);
printf("------------贪吃蛇的移动------------");
DrawBorder();
//自定义几个蛇的身体
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
pos.X+= 2;
AddBody(pos);
//控制蛇的移动
while(ctrl= getch())
{
switch(ctrl)
{
case'w':
if(dir== DOWN)
continue;
dir= UP;
break;
case's':
if(dir== UP)
continue;
dir= DOWN;
break;
case'a':
if(dir== RIGHT)
continue;
dir= LEFT;
break;
case'd':
if(dir== LEFT)
continue;
dir= RIGHT;
break;
case'q':
return 0;
}
MoveBody(dir);
}
return 0;
}
扩展资料:
实现逻辑
1,可以设置光标,就能实现制定位置打印制定符号。
2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。
3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。
4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。
5,食物产生的位置判定,不能越界,也不能与蛇身体重合。
6,蛇的转向判定,一条规则,不允许倒退。
7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)
8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。
9,加速减速,设置刷新休眠时间实现。
参考资料来源:百度百科-C语言
三、贪吃的苹果蛇第30关怎么过 第30关通关攻略
在《贪吃的苹果蛇》中很多玩家还不清楚第30关怎么过。接下来就让小编给大家带来《贪吃的苹果蛇》第30关通关攻略,感兴趣的小伙伴们一起来看看吧。
《贪吃的苹果蛇》第30关通关攻略
1、先把头上的石头向顶一格,然后吃掉左侧的苹果,
2、然后向中间移一格,吃掉上方的苹果后向右上移动吃掉最上边的苹果,
3、然后向左移动一格后左侧石头会掉落在苹果上方,我们移动到石头左侧把它顶到中间
4、然后我们从画面下方通过吃掉最后两个苹果
5、最后走右侧把右侧的石头也顶到中间,我们走到石头的上方直行就可以走到黑洞。
游戏玩法
1、玩家可以自由的进行控制,因为贪吃蛇是拥有机械的身体,所以是跟经典的贪吃蛇操作不一样的;
2、贪吃蛇只有几节身体,每节身体都会弯曲,将会带来非常有趣的折叠形状,带来更加趣味的控制玩法;
3、所有的难度都是越来越难,越到后续的游戏关卡,都将会带来更加困难的过程,玩家需要适应节奏;
4、拥有不同的平台,玩家需要控制贪吃蛇越过缝隙,才能安全的到达其中的大门位置,破解其中的关卡。
以上就是《贪吃的苹果蛇》第30关通关攻略,更多游戏攻略请持续关注游戏网!
OK,关于贪吃蛇从1到30关和贪吃的苹果蛇第30关怎么过 第30关通关攻略的内容到此结束了,希望对大家有所帮助。