十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容介绍了“C语言实现的贪吃蛇游戏代码分享”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联企业建站,十多年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于网站设计、网站建设中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。
方案设计
首先初始化背景,使用全局二维数组map[][]表示实体内容,设置边界条件,即数组边界设置为WALL:
//初始化墙 for (int i = 0; i < ROW; i++) { map[i][0] = map[i][COL - 1] =WALL; } for (int j = 0; j < COL; j++) { map[0][j] = map[ROW - 1][j] =WALL; }
游戏启动时设置蛇在map数组中的位置,用全局一维数组snake保存蛇位置信息。
食物设置
在map数组内找到一格空地放置食物。为了防止每次产生的随机数相同,初始化时种子设置为time,同时这里注意出现死循环。
voidcreate_food(){ int row, col; int cnt = 100; do { cnt--; row = rand() % (ROW - 1) + 1; col = rand() % (COL - 1) + 1; } while (map[row][col] != SPACE&& cnt); map[row][col] = FOOD;}
蛇移动方案
1、空地
移动方向前方为空地,删除蛇尾,空地置为蛇头:
case SPACE: map[snake[SnakeSize -1].X][snake[SnakeSize - 1].Y] = SPACE; //原蛇尾位置置空 for (int i = SnakeSize - 1; i >0; i--) //蛇尾到蛇头整体移动一位 { snake[i] = snake[i - 1]; } map[snake[0].X][snake[0].Y] =SNAKE; //原蛇头位置设置为蛇身 snake[0] = next; //下一个位置设置为蛇头 map[snake[0].X][snake[0].Y] =HEAD; //更新map break;
2、食物
更新分数及蛇尺寸信息,下一位置设置为蛇头,同时新生成食物。
case FOOD: for (int i = SnakeSize; i > 0;i--) //蛇尾到蛇头整体移动一位 { snake[i] = snake[i - 1]; } map[snake[0].X][snake[0].Y] =SNAKE; //蛇头置 蛇 snake[0] = next; //将下一个位置赋值给蛇头 score++; //分数加一 SnakeSize++; //蛇尺寸加一 map[snake[0].X][snake[0].Y] =HEAD; //更新map create_food(); break;
3、墙/蛇身/蛇头
下一位置非SPACE时游戏结束。
方向控制
读取键盘中断,忽略大小写,这里注意一点就是蛇往右运动的时候选择往左是无效操作,即忽略反向运动的命令。
主流程用while(1)死循环:
while (1)
{
t2 = GetTickCount();
DrawMap();
if (kbhit()) //获取键盘敲击事件
{
ChangeDir(); //根据输入字符设置运动方向
creep(); //根据下一位置做出决策
t2 = GetTickCount();
t1 = t2;
}
if (t2 - t1 > time_interval) //这里是为了保证即使用户不操作,time_interval超时后蛇同样能前进一个位置
{
creep();
t1 = t2;
}
}
“C语言实现的贪吃蛇游戏代码分享”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!