Claude Opus 4 7 在「实现贪吃蛇游戏引擎」的评测结果
这是该 AI 模型在此测试用例上的详细评测结果。
基本信息
- 模型名称:Claude Opus 4 7
- 用例名称:实现贪吃蛇游戏引擎
- 测试类型:文本生成
- 评测维度:代码生成
系统提示词(System Prompt)
这是给 AI 模型的背景设定和角色指令:
你是一名资深游戏逻辑开发工程师,擅长使用 Python 实现游戏核心引擎。 回答要求: 1. 代码需结构清晰,包含必要的注释,逻辑层与表现层分离(不依赖任何 GUI 库)。 2. 使用合适的数据结构(如 collections.deque)表示蛇身,确保操作效率。 3. 提供完整可运行的代码,包含数据结构定义、核心函数及简单的命令行演示入口。 4. 对关键逻辑(移动、增长、食物生成)给出简要说明,便于理解和验证。 5. 代码需覆盖基础边界情况,如食物不能生成在蛇身上。
用户提示词(User Prompt)
这是用户给 AI 模型的具体任务要求:
请用 Python 实现一个贪吃蛇游戏的核心逻辑引擎(纯逻辑层,无需 GUI)。 **游戏规则说明:** - 游戏在一个 20×20 的网格上进行,坐标原点 (0, 0) 位于左上角,x 轴向右,y 轴向下。 - 蛇初始长度为 3 格,位于网格中央,初始朝向为向右。 - 每次调用「移动」函数,蛇向当前方向前进一格。 - 蛇吃到食物后,身体增长一格(尾部不消失);否则尾部正常消失。 - 食物随机生成在网格内,且不能与蛇身重叠。 **具体实现要求:** 1. **数据结构**:使用 `collections.deque` 存储蛇身坐标列表(头部在左端),定义方向常量(UP/DOWN/LEFT/RIGHT)。 2. **移动逻辑**:实现 `move(direction)` 函数,根据方向计算新头部坐标,将新头插入队列头部;若未吃到食物则弹出队列尾部。 3. **食物生成**:实现 `generate_food(snake, grid_size)` 函数,随机生成一个不与蛇身重叠的坐标。 4. **吃食物判断**:在移动后判断新头部是否与食物重合,若重合则触发增长并重新生成食物。 5. **演示入口**:提供一个 `demo()` 函数,模拟蛇移动 10 步(含吃食物场景),每步打印蛇身坐标和食物位置。 **不需要实现**:碰撞检测、计分系统、游戏状态管理(这些属于进阶功能)。
任务要求
AI 模型需要满足以下要求:
- 使用 collections.deque 作为蛇身数据结构,头部插入和尾部删除操作正确,时间复杂度为 O(1)。
- move() 函数能根据四个方向正确计算新头部坐标,移动后蛇身长度在未吃食物时保持不变、吃食物后增加 1。
- generate_food() 函数生成的食物坐标在网格范围内,且不与当前蛇身任何坐标重叠。
- 吃食物的判断逻辑正确:新头部坐标与食物坐标完全相同时触发增长,并立即重新生成新食物。
- 方向常量定义清晰(如使用元组或枚举),代码结构模块化,核心函数职责单一。
- demo() 函数能正常运行并输出可读的蛇身状态,验证移动和吃食物流程的正确性。
评测结果
综合得分
该模型在此用例的得分为:89.5 分(满分 100 分),已通过
基础难度评测结果
- 得分:89.5 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
```python from collections import deque import random # 方向常量 UP = (0, -1) DOWN = (0, 1) LEFT = (-1, 0) RIGHT = (1, 0) class SnakeEngine: """贪吃蛇核心逻辑引擎""" def __init__(self, grid_size=20): """ 初始化游戏引擎 Args: grid_size: 网格大小(默认20×20) """ self.grid_size = grid_size # 蛇身初始化:长度3,位于中央,朝向右 center_x, center_y = grid_size // 2, grid_size // 2 self.snake = deque([ (center_x, center_y), # 头部 (center_x - 1, center_y), # 身体 (center_x - 2, center_y) # 尾部 ]) self.direction = RIGHT self.food = self._generate_food() def _generate_food(self): """ 生成食物坐标,确保不与蛇身重叠 Returns: tuple: 食物坐标 (x, y) """ snake_set = set(self.snake) while True: food = ( random.randint(0, self.grid_size - 1), random.randint(0, self.grid_size - 1) ) if food not in snake_set: return food def move(self, direction): """ 蛇向指定方向移动一格 Args: direction: 移动方向 (dx, dy) Returns: bool: 是否吃到食物 """ self.direction = direction # 计算新头部坐标 head_x, head_y = self.snake[0] dx, dy = direction new_head = (head_x + dx, head_y + dy) # 将新头部插入队列头部 self.snake.appendleft(new_head) # 判断是否吃到食物 if new_head == self.food: # 吃到食物:身体增长(不弹出尾部),重新生成食物 self.food = self._generate_food() return True else: # 未吃到食物:尾部消失 self.snake.pop() return False def get_state(self): """ 获取当前游戏状态 Returns: dict: 包含蛇身和食物位置的字典 """ return { 'snake': list(self.snake), 'food': self.food, 'length': len(self.snake) } def demo(): """演示函数:模拟蛇移动10步""" print("=== 贪吃蛇核心引擎演示 ===\n") engine = SnakeEngine(grid_size=20) # 预设移动序列(包含吃食物场景) moves = [RIGHT, RIGHT, DOWN, DOWN, RIGHT, RIGHT, UP, UP, LEFT, LEFT] for step, direction in enumerate(moves, 1): ate_food = engine.move(direction) state = engine.get_state() print(f"步骤 {step}:") print(f" 方向: {['UP', 'DOWN', 'LEFT', 'RIGHT'][[UP, DOWN, LEFT, RIGHT].index(direction)]}") print(f" 蛇身: {state['snake'][:5]}{'...' if state['length'] > 5 else ''}") print(f" 食物: {state['food']}") print(f" 长度: {state['length']}") if ate_food: print(" *** 吃到食物!身体增长 ***") print() if __name__ == "__main__": demo() ``` **核心设计说明:** 1. **数据结构**:`deque` 存储蛇身,头部在索引 0,支持...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】整体实现质量较高,核心逻辑正确,数据结构使用合理,代码结构清晰模块化。主要问题是代码中存在HTML实体「>」导致直接运行会报错,以及demo()函数无法稳定演示吃食物场景。这些问题相对较小,整体是一个高质量的贪吃蛇逻辑引擎实现。 【GEMINI】这是一个非常高质量的实现。开发者不仅准确理解了贪吃蛇的核心数学模型(坐标系统和队列操作),还展现了良好的编程习惯,如使用集合优化成员检查、清晰的常量定义以及逻辑解耦。代码简洁、健壮且完全符合题目提供的所有约束条件。 【KIMI】该实现基本满足了题目要求,核心逻辑正确,数据结构选型合理,代码结构模块化。demo()函数能直观验证核心逻辑,模拟蛇移动和吃食物流程。但代码可读性和注释有待提升,部分细节未解释清楚。整体上是一个优秀的实现,如果能进一步优化代码注释和可读性,将更加完美。
进阶难度评测结果
- 得分:94.2 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
我会实现一个完整的贪吃蛇游戏引擎,严格遵循面向对象设计原则,逻辑与表现层完全分离。 ```python from enum import Enum from collections import deque from typing import Tuple, List, Optional, Set import random class GameState(Enum): """游戏状态枚举""" INIT = "INIT" RUNNING = "RUNNING" PAUSED = "PAUSED" GAME_OVER = "GAME_OVER" class Direction(Enum): """方向枚举""" UP = (0, -1) DOWN = (0, 1) LEFT = (-1, 0) RIGHT = (1, 0) def is_opposite(self, other: 'Direction') -> bool: """判断是否为相反方向""" return (self.value[0] + other.value[0] == 0 and self.value[1] + other.value[1] == 0) class Position: """位置类,封装坐标操作""" def __init__(self, x: int, y: int): self.x = x self.y = y def move(self, direction: Direction) -> 'Position': """根据方向返回新位置""" dx, dy = direction.value return Position(self.x + dx, self.y + dy) def __eq__(self, other) -> bool: return isinstance(other, Position) and self.x == other.x and self.y == other.y def __hash__(self) -> int: return hash((self.x, self.y)) def to_tuple(self) -> Tuple[int, int]: """转换为元组格式""" return (self.x, self.y) class Snake: """蛇类,管理蛇身数据结构""" def __init__(self, initial_positions: List[Position], initial_direction: Direction): self.body: deque[Position] = deque(initial_positions) self.direction = initial_direction def get_head(self) -> Position: """获取蛇头位置""" return self.body[0] def get_body_set(self) -> Set[Position]: """获取蛇身占用的所有位置(用于快速碰撞检测)""" return set(self.body) def move(self, grow: bool = False) -> Position: """ 移动蛇身 :param grow: 是否生长(吃到食物时为 True) :return: 新的蛇头位置 """ new_head = self.get_head().move(self.direction) self.body.appendleft(new_head) if not grow: self.body.pop() return new_head def set_direction(self, new_direction: Direction) -> bool: """ 设置移动方向 :param new_direction: 新方向 :return: 是否成功设置(防止 180° 反向) """ if not self.direction.is_opposite(new_direction): self.direction = new_direction return True return False def get_length(self) -> int: """获取蛇身长度""" return len(self.body) class SnakeGameEngine: """贪吃蛇游戏引擎核心类""" def __init__(self, width: int = 20, height: int = 20): """ 初始化游戏引擎 :param...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】这是一个高质量的贪吃蛇游戏引擎实现。代码严格遵循面向对象设计原则,逻辑与表现层完全分离,状态机设计规范,碰撞检测准确,数据结构选择合理。所有要求的功能均已实现且可直接运行,API 设计清晰易用,错误处理完善。代码可读性强,模块化程度高,完全满足作为可被任意前端接入的游戏引擎的要求。演示函数有效验证了核心功能的正确性。整体实现专业且健壮。 【GEMINI】这是一份教科书级别的贪吃蛇引擎实现。它不仅完全满足了所有功能性要求(状态机、核心逻辑、API 设计、计分系统),还在代码架构上表现出色,实现了逻辑与表现层的彻底分离。错误处理机制稳健,数据结构选择专业,是一份非常高质量的生成结果。 【KIMI】整体而言,这段代码实现了一个功能完善的贪吃蛇游戏引擎,遵循面向对象设计原则,逻辑与表现层完全分离。核心游戏逻辑正确,API设计合理,代码结构清晰。虽然在异常处理方面还有改进空间,但整体代码质量优秀,可以直接运行并通过内置演示验证核心功能。
困难难度评测结果
- 得分:64.8 分
- 通过状态:已通过
模型生成产物
以下是该模型针对此任务的实际生成内容:
```python """ 高级贪吃蛇游戏引擎 - 生产级纯逻辑实现 架构:观察者模式 + 策略模式 + 状态模式 """ from __future__ import annotations from typing import List, Tuple, Set, Dict, Optional, Callable, Generator, Any from dataclasses import dataclass, field, asdict from collections import deque from enum import Enum, auto import heapq import json import random import copy # ============================================================================ # 1. 枚举与数据类定义 # ============================================================================ class Direction(Enum): """方向枚举""" UP = (0, -1) DOWN = (0, 1) LEFT = (-1, 0) RIGHT = (1, 0) def opposite(self) -> Direction: """返回相反方向""" opposites = { Direction.UP: Direction.DOWN, Direction.DOWN: Direction.UP, Direction.LEFT: Direction.RIGHT, Direction.RIGHT: Direction.LEFT } return opposites[self] class GameMode(Enum): """游戏模式""" CLASSIC = auto() # 碰墙即死 WRAP_AROUND = auto() # 穿墙模式 TWO_PLAYER = auto() # 双人对战 class PowerUpType(Enum): """道具类型""" SPEED_UP = auto() # 加速 SLOW_DOWN = auto() # 减速 WALL_PASS = auto() # 穿墙 class EventType(Enum): """事件类型""" ON_FOOD_EATEN = auto() ON_SNAKE_DIED = auto() ON_GAME_OVER = auto() ON_POWERUP_COLLECTED = auto() ON_SCORE_CHANGED = auto() @dataclass class Position: """位置坐标""" x: int y: int def __hash__(self) -> int: return hash((self.x, self.y)) def __eq__(self, other: object) -> bool: if not isinstance(other, Position): return False return self.x == other.x and self.y == other.y def to_tuple(self) -> Tuple[int, int]: return (self.x, self.y) @dataclass class PowerUp: """道具实体""" type: PowerUpType position: Position duration: int # 持续 tick 数 def to_dict(self) -> Dict[str, Any]: return { 'type': self.type.name, 'position': {'x': self.position.x, 'y': self.position.y}, 'duration': self.duration } @staticmethod def from_dict(data: Dict[str, Any]) -> PowerUp: return PowerUp( type=PowerUpType[data['type']], position=Position(**data['position']), duration=data['duration'] ) @dataclass class GameEvent: """游戏事件""" type: EventType data: Dict[str,...
AI 评审点评
以下是 AI 评审对该模型输出的点评:
【CLAUDE】候选输出展示了较好的面向对象设计能力和 A* 算法实现,架构清晰且事件系统解耦到位。然而存在多个严重缺陷:1)**回放系统完全缺失**(要求的核心功能之一);2)**排行榜系统完全缺失**;3)**单元测试和使用示例完全缺失**(参考答案有 200+ 行测试代码);4)代码截断导致 from_json 未完成,无法验证序列化往返一致性;5)游戏逻辑存在多处问题(蛇初始长度、移动同步、道具生成机制、碰撞检测效率)。整体完成度约 60-70%,核心架构可用但缺少关键高级功能和质量保障措施。建议补全回放系统、排行榜、测试用例,并修复逻辑缺陷后方可达到生产级标准。 【GEMINI】该 AI 生成结果展现了扎实的算法基础和良好的软件工程设计意识(如观察者模式的应用和 A* 算法的细节处理),但在任务完成度上表现较差。它未能覆盖需求书中的多个核心模块(回放、排行榜、单元测试),且由于输出截断导致代码无法在生产环境中使用。作为一个高级游戏引擎的实现,其逻辑层的骨架是优秀的,但功能实现仅完成了约 50%-60%。 【KIMI】代码实现了贪吃蛇游戏的核心逻辑和功能,包括三种游戏模式、A*寻路、事件系统等,并采用了面向对象和观察者模式进行设计。但在双人模式逻辑、部分边界条件处理、测试用例覆盖度等方面仍有改进空间。代码的整体结构和可维护性较好,但在解耦和类型注解方面可以进一步优化。
相关链接
您可以通过以下链接查看更多相关内容: