Qwen: Qwen3.5-9B 在「实现贪吃蛇游戏引擎」的评测结果

这是该 AI 模型在此测试用例上的详细评测结果。

基本信息

  • 模型名称:Qwen: Qwen3.5-9B
  • 用例名称:实现贪吃蛇游戏引擎
  • 测试类型:文本生成
  • 评测维度:代码生成

系统提示词(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 模型需要满足以下要求:

  1. 使用 collections.deque 作为蛇身数据结构,头部插入和尾部删除操作正确,时间复杂度为 O(1)。
  2. move() 函数能根据四个方向正确计算新头部坐标,移动后蛇身长度在未吃食物时保持不变、吃食物后增加 1。
  3. generate_food() 函数生成的食物坐标在网格范围内,且不与当前蛇身任何坐标重叠。
  4. 吃食物的判断逻辑正确:新头部坐标与食物坐标完全相同时触发增长,并立即重新生成新食物。
  5. 方向常量定义清晰(如使用元组或枚举),代码结构模块化,核心函数职责单一。
  6. demo() 函数能正常运行并输出可读的蛇身状态,验证移动和吃食物流程的正确性。

评测结果

综合得分

该模型在此用例的得分为:67.8 分(满分 100 分),已通过

基础难度评测结果

  • 得分:67.8 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

```python import collections import random # =================配置常量================= GRID_SIZE = 20 # 20x20 网格 INITIAL_LENGTH = 3 # 初始蛇身长度 INITIAL_DIRECTION = 'RIGHT' # 初始朝向 # 方向定义:(x 变化量,y 变化量) # 注意:y 轴向下为正 DIRECTIONS = { 'UP': (0, -1), 'DOWN': (0, 1), 'LEFT': (-1, 0), 'RIGHT': (1, 0) } # =================核心逻辑层================= class SnakeLogicEngine: """ 贪吃蛇游戏核心逻辑引擎。 职责:处理蛇的移动、食物生成、吃食物判断,不包含任何 UI 或游戏状态管理。 """ def __init__(self, grid_size=GRID_SIZE, initial_length=INITIAL_LENGTH): self.grid_size = grid_size self.direction = INITIAL_DIRECTION # 蛇身坐标列表:使用 collections.deque # 头部在左端 (index 0),尾部在右端 (index -1) # 初始位置:网格中心附近,朝向右 # 中心计算:20 / 2 = 10. 取 (10, 10) 为头部起点 self.snake = collections.deque([ (10, 10), (9, 10), (8, 10) ]) self.food = self._generate_food(self.snake) # 记录是否存活,用于边界检查后的逻辑控制 self.is_alive = True def _get_head(self): """获取蛇头坐标""" return self.snake[0] def _check_boundary(self, x, y): """ 检查坐标是否在网格边界内。 边界情况:0 吃到食物!新食物位置:{self.food}") return True def _generate_food(self, snake): """ 生成随机食物坐标。 逻辑: 1. 随机生成网格内坐标。 2. 循环检查是否与蛇身坐标重叠。 3. 若不重叠则返回。 """ while True: x = random.randint(0, self.grid_size - 1) y = random.randint(0, self.grid_size - 1) # 检查是否生成在蛇身上 if (x, y) not in snake: return (x, y) def get_state(self): """ 获取当前游戏状态的字典表示,供演示层读取。 """ return { 'snake': list(self.snake), 'head': self._get_head(), 'tail': self.snake[-1] if self.snake else None, 'food': self.food, 'direction': self.direction, 'length': len(self.snake) } # =================演示入口================= def demo(): """ 演示引擎功能。 模拟蛇移动 10 步,包含方向变化和触发吃食物的场景。 """ print("=" * 40) print("贪吃蛇核心逻辑引擎演示 (Logic Demo)") print("=" * 40) # 初始化引擎 engine = SnakeLogicEngine() # 初始状态打印 state = engine.get_state() print(f"初始状态:长度={state['length']}, 方向={state['direction']}") print(f"蛇头:{state['head']}, 食物:{state['food']}") print("-" * 40) # 模拟移动路径 (10 步) # 路径设计:右 -> 下 -> 左 -> 上 -> 右 (避免撞墙和自杀) # 为了演示吃食物,我们在第 3 步触发吃食物逻辑 # 注意:为了简化演示,我们在第 3 步手动让食物生成在蛇头位置, # 或者依靠随机生成的概率。为了演示确定性,我们先打印前 5 步。 # 为了演示"吃到食物"的效果,我们需要控制食物位置。 #...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】该代码在核心数据结构选型和基本移动/增长逻辑上思路是正确的,SnakeLogicEngine类的架构设计合理。但demo()函数存在致命的运行时错误(moves列表嵌套导致IndexError/KeyError),使得代码无法按预期运行超过第一步。此外,强制演示吃食物的逻辑本身也存在缺陷,且代码中混入了大量思路性注释碎片和HTML转义字符,影响代码质量和专业性。整体属于「思路正确但实现有明显缺陷」的水平,需要修复demo函数的数据结构错误后方可可用。 【GEMINI】该模型出色地完成了贪吃蛇核心逻辑引擎的开发任务。代码结构规范,逻辑实现精准,充分体现了资深开发工程师的专业素养。特别是对数据结构的选型和边界条件的考虑非常到位,是一个高质量的实现方案。 【KIMI】该实现整体结构清晰,核心逻辑基本正确,正确使用了 collections.deque 作为蛇身数据结构,移动和吃食物机制实现得当。但存在几个关键问题:一是 demo() 函数存在明显的数据结构错误(moves 嵌套)导致无法直接运行;二是实现了题目明确排除的边界检查功能;三是演示吃食物的逻辑过于人工干预,未能自然展示随机食物生成的正确性。建议修复 moves 结构,移除边界检查以符合题目要求,并优化演示逻辑使其更自然地展示吃食物场景。

进阶难度评测结果

  • 得分:88.6 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

```python import random from enum import Enum from dataclasses import dataclass from collections import deque from typing import List, Tuple, Optional # ----------------------------------------------------------------------------- # 1. 基础数据定义 (Data Definitions) # ----------------------------------------------------------------------------- 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) @property def dx(self): return self.value[0] @property def dy(self): return self.value[1] @dataclass class Position: """网格坐标类""" x: int y: int def __eq__(self, other): if isinstance(other, Position): return self.x == other.x and self.y == other.y return False def __hash__(self): return hash((self.x, self.y)) # ----------------------------------------------------------------------------- # 2. 自定义异常 (Custom Exceptions) # ----------------------------------------------------------------------------- class GameLogicError(Exception): """游戏逻辑层通用异常""" pass class InvalidStateError(GameLogicError): """在非法状态下调用操作""" pass class InvalidDirectionError(GameLogicError): """非法方向输入(如 180 度反向)""" pass # ----------------------------------------------------------------------------- # 3. 核心游戏引擎 (Core Game Engine) # ----------------------------------------------------------------------------- class SnakeGameEngine: """ 贪吃蛇游戏逻辑引擎(纯逻辑层,无 UI 依赖) 职责: - 管理游戏状态机 - 处理碰撞检测 - 控制蛇的移动与生长 - 管理分数与速度 - 提供公开 API """ def __init__(self, width: int = 20, height: int = 20): """ 初始化引擎 :param width: 网格宽度 (默认 20) :param height: 网格高度 (默认 20) """ self.width = width self.height = height self.state = GameState.INIT # 蛇的数据结构 # 初始长度 3,位于中心 center_x, center_y = width // 2, height // 2 initial_snake = deque([ Position(center_x, center_y), Position(center_x - 1, center_y), Position(center_x - 2, center_y) ]) self.snake = initial_snake # 食物位置 self.food = self._generate_food() #...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【CLAUDE】该实现整体质量较高,架构设计清晰,状态机、方向控制、计分速度等核心功能基本完善,API覆盖全面,代码可读性好。主要缺陷集中在自身碰撞检测的边界条件(未排除即将移走的尾部)和食物生成函数的逻辑冗余,以及部分错误处理方式与需求描述略有出入。整体属于中等偏上水平的实现。 【GEMINI】该模型出色地完成了贪吃蛇逻辑引擎的开发任务。代码架构设计专业,逻辑严密,不仅满足了所有功能需求,还在错误处理和 API 设计上展现了资深工程师的水平。代码完全符合「无 UI 依赖」的约束,具有极高的工程质量。 【KIMI】该实现是一个非常优秀的贪吃蛇游戏引擎,严格遵循了面向对象设计与逻辑表现分离的原则。状态机实现严谨,碰撞检测与方向控制逻辑正确,数据结构选择合理(deque),代码质量高且具备良好的可扩展性。所有功能要求均已满足,提供了完整的API和可运行的测试脚本。 minor的代码优化空间不影响整体质量,是一个可直接用于生产环境的可靠实现。

困难难度评测结果

  • 得分:78.0 分
  • 通过状态:已通过

模型生成产物

以下是该模型针对此任务的实际生成内容:

```python import json import heapq import random import time import os import threading from collections import deque, defaultdict from dataclasses import dataclass, field, asdict from enum import Enum, auto from typing import ( Dict, List, Optional, Set, Tuple, Callable, Iterator, Generator, Union, Any ) # ============================================================================== # 1. 枚举与数据类定义 (Enums & Data Classes) # ============================================================================== class Direction(Enum): """移动方向枚举""" UP = (0, -1) DOWN = (0, 1) LEFT = (-1, 0) RIGHT = (1, 0) @property def dx(self) -> int: return self.value[0] @property def dy(self) -> int: return self.value[1] class PowerType(Enum): """道具类型枚举""" SPEED = "speed" # 加速:移动间隔减半 SLOW = "slow" # 减速:移动间隔加倍 WRAP = "wrap" # 穿墙:临时获得穿墙能力 class GameMode(Enum): """游戏模式枚举""" CLASSIC = "classic" # 碰墙死 WRAP = "wrap" # 穿墙模式 PvP = "pvp" # 双人对战 class PowerState(Enum): """蛇的道具状态枚举""" NORMAL = "normal" SPEEDING = "speeding" SLOWING = "slowing" WRAPPED = "wrapped" @dataclass class Position: """位置坐标""" x: int y: int def __hash__(self): return hash((self.x, self.y)) def __eq__(self, other): return isinstance(other, Position) and self.x == other.x and self.y == other.y def __repr__(self): return f"Position({self.x}, {self.y})" @dataclass class GameState: """游戏状态快照(用于回放/序列化)""" snake_positions: List[Position] # 所有蛇身坐标列表 snake_ids: List[str] # 蛇 ID food_position: Position # 食物位置 powerups: List[Dict[str, Any]] # 道具信息 score: int # 当前分数 tick: int # 当前 Tick mode: str # 模式名称 is_alive: bool # 游戏是否结束 @dataclass class LeaderboardEntry: """排行榜条目""" player_id: str score: int date: str # ============================================================================== # 2. 事件系统 (Event Bus - Observer Pattern) # ============================================================================== class EventBus: """ 事件总线,实现观察者模式。 支持注册/注销监听器,线程安全。 """ def __init__(self): self._listeners: Dict[str, List[Callable]] =...

AI 评审点评

以下是 AI 评审对该模型输出的点评:

【GEMINI】这是一个设计精良、架构清晰的高级贪吃蛇引擎实现。其优势在于高度的模块化和规范的事件驱动机制,A* 算法的实现也充分考虑了不同游戏模式下的拓扑差异。主要不足在于回放系统的增量压缩承诺未能实际兑现(仅为快照存储),以及缺少对非法反向输入的防护逻辑。整体代码质量高,易于扩展和维护。 【KIMI】代码实现了贪吃蛇游戏的核心逻辑,包括三种游戏模式、A*寻路、事件系统和回放功能。代码结构较为清晰,模块化程度较高。但在双人模式的实现、序列化/反序列化的完整性、以及异常处理和测试覆盖度方面仍存在不足。建议进一步完善双人模式的逻辑,优化序列化/反序列化处理,加强异常处理和测试用例的覆盖度。

相关链接

您可以通过以下链接查看更多相关内容:

加载中...