实验日志12.5-12.10
物联网一班-李林青-182210713120
源代码在Github:https://github.com/llq-007/Snake/tree/main
目录
-
实验任务
-
工作安排
-
具体实现
-
总结
一、实验任务
(1) 实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,
上下左右控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点。
(2)“蛇”碰到边界或蛇头与蛇身相撞,蛇死亡,游戏结束。
(3)为游戏设计友好的交互界面;例如欢迎界面,游戏界面,
游戏结束界面。要有开始键、暂停键和停止退出的选项。
(4)对蛇吃到豆子进行分值计算,可以设置游戏速度,游戏音乐
等拓展元素。
二、工作安排
- 理解并写出实现贪吃蛇功能的核心代码
- 继续完善贪吃蛇的相关功能及页面功能
- 学习Unity相关操作
- 查找BUG并进一步完善其功能
三、具体实现
(1)使用编辑器及语言
Visio Studio2019,Unity2020
(2)核心思想
建立结构体二维数组,用于对“空场地”,“墙壁”,“蛇头”,“蛇身”和“食物”的打印和定位。其中每一个数组元素包含蛇下一次移动方向和下一次该区域应该打印什么地图类型(“空场地”,“墙壁”,“蛇头”,“蛇身”和“食物”)。接着创建蛇头的相关函数包括移动、吃食物和碰撞,蛇身的移动和吃到食物后加1,蛇尾要单独分析,当然还包括食物的生成。
(3)关键代码
- 关于_kbhit()和_getch()函数的用法
_kbhit()是查看用户是否有输入字符,若有则返回一个非0值,否则返回0。而_getch()则是读取最近用户输入的字符 。
利用这两个函数就可以实现对贪吃蛇方向的控制。当没按方向键时,蛇朝着初始方向不停的移动直到按下方向键才改变方向
部分代码如下:
其中上下左右的键码值分别为72、80、75和77。
while (1)
{
while (!_kbhit())
{
switch (ch)
{
case 72:Move(8); break;
case 75:Move(4); break;
case 77:Move(6); break;
case 80:Move(2); break;
default:break;
}
...
...
...
do {
ch = _getch();
} while (ch != -32 && ch != 80 && ch != 72 && ch != 77 && ch != 75);
ch = _getch();
}
2.创建结构体snake其中goods_class表示显示物体类型(0代表活动区域(空格),1代表■(地图砖头),2代表*(食物),3代表@_@(蛇头) 3之后的数字代表()(蛇身),3+蛇长度-1表示◎(蛇尾)),direction表示蛇移动方向(上下左右分别用数字8、2、4和6来代替)。
定义snake变量Snake二维数组,初始化数组为0。
struct snake {
int goods_class;
int direction;
};
struct snake Snake[Map_high][Map_long] = {
{
0 } };
3.初始化地图和蛇
for (i = 0; i < Map_long; i++)
{
Snake[0][i].goods_class = 1;
Snake[Map_high - 1][i].goods_class = 1;
}
for (i = 0; i < Map_high; i++)
{
Snake[i][0].goods_class = 1;
Snake[i][Map_long - 1].goods_class = 1;
}
/*初始化蛇的位置*/
for (i = 0; i < snake_long; i++)
Snake[Map_high / 2][Map_long / 2 + i].goods_class = snake_long + i;
while (1)
{
while (!_kbhit())
{
switch (ch)
{
case 72:Move(8); break;
case 75:Move(4); break;