news 2026/4/24 1:40:26

贪吃蛇 set和deque使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
贪吃蛇 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; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 22:15:33

2000亿美元!2026年全球游戏行业的新格局与新变量

2000亿美元&#xff01;2026年全球游戏行业的新格局与新变量 2026年&#xff0c;全球游戏市场规模预计突破2000亿美元&#xff08;约2050-2100亿美元&#xff09;&#xff0c;从2025年的1888-1970亿美元增长3-7%。 这标志着后疫情低迷期的复苏&#xff08;增长率从2022-2024的…

作者头像 李华
网站建设 2026/4/21 5:33:59

鸿蒙APP开发从入门到精通:ArkUI组件库详解与常用组件实战

鸿蒙APP开发从入门到精通&#xff1a;ArkUI组件库详解与常用组件实战 鸿蒙&#xff08;HarmonyOS NEXT&#xff09;是华为推出的分布式操作系统&#xff0c;其APP开发框架以ArkUI为核心&#xff0c;采用ArkTS&#xff08;基于TypeScript的扩展语言&#xff09;进行声明式开发。…

作者头像 李华
网站建设 2026/4/20 18:02:11

Router_T000_ConceptMECE

startmindmap* 汇报总图** 动机价值*** 故事钩子*** 价值主张** 现状基线*** 基线速览*** SafeDreamer*** UNISafe外盾*** SPOWL** 问题缺陷*** 主流缺陷*** OOD幻觉*** 外盾不学*** 固定阈值** 创新方案*** 核心创新*** Risk-Bellman*** ucert内生*** 不改环境奖*** 插入点** …

作者头像 李华
网站建设 2026/4/21 23:36:17

Java计算机毕设之基于springboot+vue的游戏装备账号销售商城平台系统基于springboot的游戏售卖商城系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华