首页 > 分享 > 353 贪吃蛇

353 贪吃蛇

题目描述:
请你设计一个 贪吃蛇游戏,该游戏将会在一个 屏幕尺寸 = 宽度 x 高度 的屏幕上运行。如果你不熟悉这个游戏,可以 点击这里 在线试玩。
起初时,蛇在左上角的 (0, 0) 位置,身体长度为 1 个单位。
你将会被给出一个 (行, 列) 形式的食物位置序列。当蛇吃到食物时,身子的长度会增加 1 个单位,得分也会 +1。
食物不会同时出现,会按列表的顺序逐一显示在屏幕上。比方讲,第一个食物被蛇吃掉后,第二个食物才会出现。
当一个食物在屏幕上出现时,它被保证不能出现在被蛇身体占据的格子里。
对于每个 move() 操作,你需要返回当前得分或 -1(表示蛇与自己身体或墙相撞,意味游戏结束)。

示例:
给定 width = 3, height = 2, 食物序列为 food = [[1,2],[0,1]]。
Snake snake = new Snake(width, height, food);
初始时,蛇的位置在 (0,0) 且第一个食物在 (1,2)。
|S| | |
| | |F|
snake.move(“R”); -> 函数返回 0
| |S| |
| | |F|
snake.move(“D”); -> 函数返回 0
| | | |
| |S|F|
snake.move(“R”); -> 函数返回 1 (蛇吃掉了第一个食物,同时第二个食物出现在位置 (0,1))
| |F| |
| |S|S|
snake.move(“U”); -> 函数返回 1
| |F|S|
| | |S|
snake.move(“L”); -> 函数返回 2 (蛇吃掉了第二个食物)
| |S|S|
| | |S|
snake.move(“U”); -> 函数返回 -1 (蛇与边界相撞,游戏结束)

方法1:
主要思路:
(1)使用deque顺序存储蛇的身体所占的空间,使用set存储蛇的身体各个位置,便于判断是否会与自己碰撞的情形,使用变量index标识现在吃到第几个食物了,同时作为返回的当前分数值(已经吃过的食物的数量);
(2)随后,每次移动,根据输入的方向改变当前蛇的头结点的位置,判断新的位置是否与边界碰撞;
(3)若没有,则接着判断新的位置是否能够是当前食物的位置,若是,则增加分数(既索引),增加蛇的身体的长度,既将新的位置插入到deque和set中,若不是当前食物的位置,则调整蛇的身体,既删除最后一个位置,插入新的位置,并在插入前判断新的位置是否会和身体碰撞;

class SnakeGame { public: /** Initialize your data structure here. @param width - screen width @param height - screen height @param food - A list of food positions E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. */ int w,h;//边界 vector<vector<int>> f;//食物 deque<vector<int>> q;//顺序存储蛇的身体 set<vector<int>1234567891011

相关知识

353 贪吃蛇
贪吃蛇游戏程序设计实验报告
python+pygame 贪吃蛇游戏
贪吃蛇无尽大作战宠物培养攻略
可爱宠物竞技网游 贪吃蛇
单片机贪吃蛇 毕业设计.pdf
基于单片机的贪吃蛇游戏设计
玩家疯狂,蛇也疯狂,贪吃蛇和玩家一起忙
python 250行代码开发一个贪吃蛇
贪吃蛇大作战®的宠物技能升级建议!

网址: 353 贪吃蛇 https://m.mcbbbk.com/newsview657295.html

所属分类:萌宠日常
上一篇: C++贪吃蛇实现
下一篇: 用C语言实现贪吃蛇游戏