贪吃蛇 set和deque使用

#include <vector> #include <string> #include <deque> #include <set> using namespace std; // 您提供的 Node 结构体 typedef struct Node{ int _x; int _y; Node(int x, int y) { _x = x; _y = y; } // 重载 < 运算符,方便放入 set 中进行去重/查找 bool operator<(const Node& other) const { if (_x != other._x) return _x < other._x; return _y < other._y; } // 重载 == 运算符 bool operator==(const Node& other) const { return _x == other._x && _y == other._y; } } Node; class SnakeGame { private: int width; int height; int score; vector<vector<int>> food; // 存储食物列表 int foodIndex; // 当前该吃第几个食物 deque<Node> snake; // 蛇身:front是头,back是尾 set<Node> snakeBodySet; // 快速查找碰撞(辅助结构) 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,2], [0,1]] */ SnakeGame(int width, int height, vector<vector<int>>& food) { this->width = width; this->height = height; this->food = food; this->foodIndex = 0; this->score = 0; // 初始化蛇,起初在 (0,0) Node startNode(0, 0); snake.push_front(startNode); snakeBodySet.insert(startNode); } /** Moves the snake. @param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down @return The game's score after the move. Return -1 if game over. Game over when snake crosses the screen boundary or bites its body. */ int move(string direction) { // 1. 获取当前蛇头位置 Node head = snake.front(); int next_y = head._y; // 题目中通常 y 代表行 (row) int next_x = head._x; // 题目中通常 x 代表列 (col) // 2. 根据方向计算新蛇头的位置 if (direction == "U") next_y--; else if (direction == "D") next_y++; else if (direction == "L") next_x--; else if (direction == "R") next_x++; // 3. 边界碰撞检测 (撞墙) if (next_y < 0 || next_y >= height || next_x < 0 || next_x >= width) { return -1; } Node newHead(next_x, next_y); // 4. 处理蛇尾逻辑(关键点!) // 先把尾巴拿掉,因为如果只是单纯移动,尾巴的位置是安全的(蛇头可以追着尾巴走) // 如果吃到了食物,再把尾巴加回来 Node tail = snake.back(); snake.pop_back(); snakeBodySet.erase(tail); // 5. 身体碰撞检测 (撞自己) // 注意:这里必须在移除尾巴之后检查,因为新头的位置可以是旧尾巴的位置 if (snakeBodySet.count(newHead)) { return -1; // 撞到自己了 } // 6. 检查是否吃到食物 if (foodIndex < food.size() && next_y == food[foodIndex][0] && next_x == food[foodIndex][1]) { // 吃到食物了: score++; foodIndex++; // 既然吃到了食物,蛇变长,刚才移除的尾巴得加回来! snake.push_back(tail); snakeBodySet.insert(tail); } // 7. 更新状态:加入新头 snake.push_front(newHead); snakeBodySet.insert(newHead); return score; } };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1210637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亲测好用8个一键生成论文工具,研究生论文写作必备!

亲测好用8个一键生成论文工具&#xff0c;研究生论文写作必备&#xff01; AI 工具助力论文写作&#xff0c;效率提升不再是梦想 在研究生阶段&#xff0c;论文写作是每位学生都无法回避的重要任务。无论是开题报告、文献综述&#xff0c;还是最终的毕业论文&#xff0c;都需要…

电力企业数字化管理升级,如何实现项目、人员、财务一体化管控?

某民企电力企业&#xff0c;是集电力设计、电力工程、电力设备、电力运维于一体的专业电力服务商&#xff0c;服务网点覆盖全国。企业人员规模500&#xff0c;项目覆盖众多乡村及城市区域&#xff0c;面临着人员、项目等多维度的管理挑战。 一、企业管理痛点 项目信息搜集低效…

轰炸敌人,最多可以摧毁的敌人城堡数目

我的解法&#xff1a; 对于每一个空位置&#xff0c;进行一次bfs&#xff0c;从上下左右四个方向去寻找&#xff0c;这是岛屿问题的相似处理&#xff0c;但是这个题可以优化&#xff0c;因为横竖方向可以进行动规优化。 我们不需要对每个 0 都重新数一遍它所在的行和列有多少敌…

汉诺塔问题及其扩展

汉诺塔问题及其扩展 : 1个基本模型很多扩展 基本模型: \(3\)个柱子,\(A,B,C\),\(a\)上有\(n\)个盘子,从上而下从小到大排好,现在要把所有盘子从\(a\)移到\(c\),要求一次只是移动一个盘子,且大的不能在小的上面,…

揭秘天猫超市购物卡回收其中的猫腻

如今,很多人手中都有闲置的天猫超市购物卡,想通过天猫超市购物卡回收变现来盘活资源,可回收过程中猫腻不少,一不留神就可能遭受损失。一、回收猫腻大起底1、二手平台风险重重行业数据显示,二手平台上购物卡回收纠…

三分之一2-5天和三分之二6-13天资金利用率对比学习

目录一、基础参数定义&#xff08;统一口径&#xff09;1. 基础仓位金额计算二、资金周转率与时间周期的数学建模1. 周期天数区间与均值2. 资金周转率定义&#xff08;单次交易&#xff09;3. 周转率差值与比例&#xff08;1&#xff09;周转率差值&#xff08;2&#xff09;周…

Spring Cloud Alibaba 2025.0.0 整合 ELK 实现日志 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Android关机

adb shell reboot -p

221_尚硅谷_实现接口和继承比较(2)

221_尚硅谷_实现接口和继承比较(2)1.实现接口可以当作是对继承的一种补充 2.实现接口和继承

2026年苏州智能硬件设计公司推荐:飓风工业设计,企业产品设计/专业工业设计/产品外观设计/电子产品设计/工业设计/机械产品设计公司精选

在数字化转型浪潮中,优秀的工业设计公司正凭借数据驱动和技术融合,重新定义产品竞争力。 工业设计正经历从传统外观造型设计向技术集成运用的现代工业设计转变。 市场报告显示,全球工业设计服务市场规模持续增长,智…

2026年国内知名的投影机品牌排名,激光投影仪/20000流明投影机出租/画展投影机出租/雾幕投影机,投影机公司排行

评测背景:聚焦服务与保障,重新定义“强”的标准 随着展览展示、文旅演艺及高端会议市场的蓬勃发展,专业投影设备的需求已从单一的产品性能,扩展至包含方案设计、设备保障、现场执行与全国化服务在内的综合能力比拼…

JAVA自学之路1.1:JAVA入门纠错

1.1、JAVA入门纠错 在JAVA入门这篇文章里有些问题和错误需要纠正,懒得再改那篇文章了,直接写在这好了。 package test.test1;public class HelloWorld {public static void main(String[] args) {System.out.println…

2026软考高级系统架构师备考资料-录播+直播

【手机复制括号内整段内容&#xff0c;打开「夸克APP」即可获取。 伏脂燹烜煘胁氟洞座 /~e9ef3ABPYp~:/】

微信立减金回收攻略,方法、流程与折扣全解析

在移动支付广泛普及的当下,微信立减金成了消费者常用的优惠凭证。但受消费场景限制或有效期临近影响,大量立减金闲置浪费。如何通过正规渠道快速变现?本文将从方法、流程、折扣三方面,结合权威数据与行业实践给出答…

安达发|精准排产,守护生命:医疗器械行业车间排产的数字化革命

在关乎人类生命健康的医疗器械制造领域&#xff0c;每一台设备、每一个部件的准时交付&#xff0c;都可能直接影响到患者的治疗与康复。这个行业以其严苛的质量法规&#xff08;如FDA、ISO 13485&#xff09;、复杂的生产工艺和极高的可追溯性要求而著称。在这样的背景下&#…

2026年市场评价好的纸盒品牌推荐排行,纸盒/彩印包装/农产品纸箱/工业纸盒/纸箱/工业纸箱,纸盒批发厂家推荐排行

在工业生产与商品流通领域,纸盒作为产品包装的核心载体,直接影响着商品运输安全、市场展示效果及品牌价值传递。随着国内制造业、电商物流、食品加工等行业的快速发展,纸盒需求量持续攀升,但市场产品质量参差不齐,…

Deepseek问答:开发人员如何选书

如果觉得好&#xff0c;请点赞、收藏、转发和关注&#xff0c;感谢您&#xff01;仅供参考问&#xff1a;按照开发人员的用途、职位、技能掌握程度、预算、可支配时间五个方面提出选择编程书籍的技巧ds答&#xff1a;为不同背景和需求的开发人员选择编程书籍是一项需要精细匹配…

php开源短视频源码,JSON对象转化API

php开源短视频源码&#xff0c;JSON对象转化API 1. 入门案例 package com.jt.pojo;import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArg…

短视频平台php源码,字符缓冲流的特有功能

短视频平台php源码&#xff0c;字符缓冲流的特有功能 一、字符缓冲流的特有功能 void newLine() 换行操作&#xff1a; 三个步骤: write;newLine;flush; 当然最后close; public String readLine() 读一行,只读内容&#xff0c;不读换行的符号&#xff01;操作&#xff1a…

短视频app搭建,如何实现毛玻璃效果?

短视频app搭建&#xff0c;如何实现毛玻璃效果&#xff1f; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"vi…