设为首页 加入收藏

TOP

简易贪吃蛇
2019-03-13 12:08:02 】 浏览:54
Tags:简易

基于infinitor的AI贪吃蛇项目,发布简化版贪吃蛇游戏,去除了原来版本的AI功能,简化了部分代码,实现了更为简单的贪吃蛇游戏。

贪吃蛇游戏实际上是控制台的打印程序,电脑并不知道这个游戏叫作“贪吃蛇”,其本质是通过对数组vector进行元素的坐标变换,实现视觉效果上贪吃蛇位置的移动。

主要分为:食物模块、信息打印模块、运动模块、键盘监听模块、蛇蛇生死模块和画蛇模块。

流程大致如右侧所示:按下键盘->改变方向->判断是否吃到食物(撞墙)->打印蛇蛇

反复循环,之后考虑进一步改进,把蛇的运行动作改为线程操作,不断实现自动前进。

效果如下图

关键代码在此:

void move_snake()
{
//监听键盘
listen_key_borad();
//蛇头
COORDINATE head = m_coordinate[0];
//direction方向:1 上 2 下 3 左 4 右
switch (this->m_direction)
{
case UP:
head.y--;
break;
case DOWN:
head.y++;
break;
case LEFT:
head.x--;
break;
case RIGHT:
head.x++;
break;
}
//插入移动后新的蛇头
m_coordinate.insert(m_coordinate.begin(), head);
}
//判断是否吃到食物
bool is_eat_food(Food & f)
{
//获取食物坐标
COORDINATE food_coordinate = f.GetFoodCoordinate();
//吃到食物,食物重新生成,不删除蛇尾
if (m_coordinate[HEAD].x == food_coordinate.x && m_coordinate[HEAD].y == food_coordinate.y)
{
f.RandomXY(m_coordinate);
return true;
}
else
{
//没有吃到食物,删除蛇尾
m_coordinate.erase(m_coordinate.end() - 1);
return false;
}
}
//判断贪吃蛇死了没
bool snake_is_alive()
{
if (m_coordinate[HEAD].x <= 0 ||
m_coordinate[HEAD].x >= GameSetting::window_width - 29 ||
m_coordinate[HEAD].y <= 0 ||
m_coordinate[HEAD].y >= GameSetting::window_height - 1)
{
//超出边界
m_is_alive = false;
return m_is_alive;
}
//和自己碰到一起
for (unsigned int i = 1; i < m_coordinate.size(); i++)
{
if (m_coordinate[i].x == m_coordinate[HEAD].x && m_coordinate[i].y == m_coordinate[HEAD].y)
{
m_is_alive = false;
return m_is_alive;
}
}
m_is_alive = true;

return m_is_alive;
}
//画出贪吃蛇
void draw_snake()
{
//设置颜色为浅绿色
setColor(10, 0);
for (unsigned int i = 0; i < this->m_coordinate.size(); i++)
{
gotoxy(m_coordinate[i].x, m_coordinate[i].y);
cout << "*";
}
//恢复原来的颜色
setColor(7, 0);
}
//清除屏幕上的贪吃蛇
void ClearSnake()
{
gotoxy(m_coordinate[this->m_coordinate.size()-1].x, m_coordinate[this->m_coordinate.size() - 1].y);
cout << " ";

}
//获取贪吃蛇的长度
int GetSnakeSize()
{
return m_coordinate.size();
}
//获取当前游戏模式
bool GetModel()
{
return m_model;
}
};

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Linux CentOS 7 下的C++ 学习笔记.. 下一篇POJ3734 Blocks(生成函数)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目