贪吃蛇c加加代码_c语言贪吃蛇代码

贪吃蛇c加加代码_c语言贪吃蛇代码展开全部基本e69da5e6ba903231313335323631343130323136353331333366306462思路:蛇每吃一个食物蛇身子就增加一格,用UP,DOWN,LEFT,RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。#include#include#include#defineBEG_X2#defineB…

大家好,又见面了,我是你们的朋友全栈君。

展开全部

基本e69da5e6ba903231313335323631343130323136353331333366306462思路:

蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。

#include

#include

#include

#define BEG_X2

#define BEG_Y1

#define WID20

#define HEI20

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;

}

贪吃蛇c加加代码_c语言贪吃蛇代码

扩展资料:

实现逻辑

1,可以设置光标,就能实现制定位置打印制定符号。

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

3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。

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

5,食物产生的位置判定,不能越界,也不能与蛇身体重合。

6,蛇的转向判定,一条规则,不允许倒退。

7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)

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

9,加速减速,设置刷新休眠时间实现。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141318.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 浅谈WeakHashMap

    浅谈WeakHashMapJavaWeakHashMap到底Weak在哪里,它真的很弱吗?WeakHashMap的适用场景是什么,使用时需要注意些什么?弱引用和强引用对JavaGC有什么不同影响?本文将给出清晰而简洁

  • matlab有约束非线性规划_matlab 非线性规划

    matlab有约束非线性规划_matlab 非线性规划MATLAB非线性规划及非线性约束条件求解【题1】求非线性规划问题:221212121min262fxxxxxx=+—12121212222.23,0xxxxstxxxx+≤??-+≤??+≤??≥?clearallclcf=@(x)((1/2)*x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-6*x(2));A=[11;-12;…

  • 微信公众平台PHP开发

    微信公众平台PHP开发

  • 最新版本git下载安装&配置教程「建议收藏」

    最新版本git下载安装&配置教程「建议收藏」原文地址https://blog.csdn.net/zx1996119/article/details/80814752下载地址:https://git-scm.com/downloads如图:这里下载完成后是酱子的如图(windows64位的)1.双击打开后,点击Next2.再次点击Next(这里我改了安装的路径)3.下图方框…

  • Oracle Sequence Cache 参数说明[通俗易懂]

    Oracle Sequence Cache 参数说明[通俗易懂]之前整理的一篇文章:   ORACLESEQUENCE介绍http://blog.csdn.net/tianlesoftware/archive/2009/10/30/4745039.aspx 之前整理的一篇文章。那是还是写blog初期的作品。2009年10月份的。转眼一年,写Blog也比以前成熟了很多。 一.理论知识先看一个创建Sequence的语句:SQL>creates

  • java map是有序的吗_java中map遍历

    java map是有序的吗_java中map遍历|背景在调用接口A的时候,传给接口A的参数是通过调用接口B返回然后再重新封装的。接口A是需要验签,也就是说传给接口A的所有参数一定要是按照接口B返回的固有顺序。问题出现了!!!接口B返回的字段是数组类型ClassX[],传给接口A的字段是JSON字符串。我将数组ClassX[]遍历,然后把key,value重新传入了一个Map,而这个Map是newHashMap产生的。最后调……

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号