软件工程第二次作业
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 202601软工 |
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 使用 Python 和 AIGC 完成“一箭又一箭”小游戏 |
| 学号 | 102301230 |
| GitHub 仓库 | 仓库链接 |
项目展示:
游戏开始初始界面

按错,失误次数减少


多次失误,失败界面

重新挑战,通过界面

选择关卡界面

项目介绍:
关卡界面有箭头, 箭头会朝向箭头方向前进(被点击后),如果箭头撞击到其他箭头,会出错
你每个关卡有三次出错机会,全错就会失败,失败后可以重新挑战关卡
将关卡箭头全部移除,就通过,可以选择下一关
选择关卡按钮,可以选择已经通过的关卡
每个关卡,你都可以选择重新开始按钮,重新玩这个关卡
如果你的箭头出错,箭头会变成红色,且有动画提示
实现思路:
(1)方向与箭头
使用字符代表方向:↑、↓、←、→,并建立字典DIR_VEC,把箭头字符映射为二维坐标偏移向量:
DIR_VEC = {
"↑": (0, -1),
"↓": (0, 1),
"←": (-1, 0),
"→": (1, 0)
}
向量(dx, dy)含义:dx 代表水平偏移,dy 代表垂直偏移。例如→对应(1,0),表示每一步向右移动一格。
(2)关卡数据结构
所有关卡存放在列表LEVELS中,每一关是一个字典,包含:
size:棋盘边长(N×N 方格)max_mistake:本关允许最大失误次数map:二维列表,作为棋盘地图。单元格内容:空字符串代表无箭头,方向字符代表该格子放置对应方向箭头。
示例:
{
"size": 4,
"max_mistake": 3,
"map": [
["", "→", "", ""],
["↑", "", "", "↓"],
["", "", "", ""],
["", "", "←", ""]
]
}
优点:关卡数据和游戏逻辑分离,新增关卡只需要在LEVELS追加字典,不用修改核心代码。
(3)路径检查
def path_check(game_map, size):
"""
路径检测
:param game_map: 当前关卡地图二维数组
:param size: 棋盘边长 N
:return: (is_success, path_list)
is_success: True通关;False死循环
path_list: 走过的坐标列表,可选用于绘制路径
"""
# 找到起点:第一个存在箭头的格子
start = None
for y in range(size):
for x in range(size):
if game_map[y][x] in DIR_VEC:
start = (x, y)
break
if start is not None:
break
if start is None:
return False, []
x, y = start
visited = [[False for _ in range(size)] for _ in range(size)]
path_list = []
while True:
# 情况1:坐标超出棋盘 → 成功走出,通关
if x < 0 or x >= size or y < 0 or y >= size:
return True, path_list
# 情况2:重复访问格子 → 环路,失败
if visited[y][x]:
return False, path_list
# 标记当前格子已访问,加入路径
visited[y][x] = True
path_list.append((x, y))
# 获取当前格子箭头方向向量
arrow = game_map[y][x]
dx, dy = DIR_VEC[arrow]
# 更新坐标,向前走一步
x += dx
y += dy
AIGC 使用过程:按照要求记录至少 3 次具有代表性的 AI 协作过程;
| 子任务 | 借助何种 AIGC 技术 | AI 实现或提供了什么 | 效果如何 | 人工修改 |
|---|---|---|---|---|
| 路径检测 | deepseek | 生成碰撞检测代码 | 边界判断时出现误判,将游戏边界判断成障碍物 | 修改边界条件后正常 |
| 关卡设计 | deep seek | 生成关卡数组 | 关卡过于单调,没有挑战性,缺乏难度的递进关系 | 手工调整并试玩验证 |
| 页面美化 | 豆包 | 补全箭头晃动代码 ,帮助生成页面的按钮图像 | 基本可用 | 调整动画速度 ,调整按钮重叠的情况 |
重点是解决UI 文字重叠、弹窗排版错乱:新增按钮后元素互相压住,通关 / 失败弹窗高低不一致。修复:重新规划全部控件 Y 坐标,统一弹窗布局参数。
这是当时的AIGC部分使用记录

测试结果:
测试是手动一遍遍跑的
| 编号 | 测试内容 | 预期结果 | 实际结果 | 是否通过 |
|---|---|---|---|---|
| T01 | 点击前方无阻挡的箭头 | 箭头飞出棋盘并消失 | 箭头平滑飞出,成功移除 | 通过 |
| T02 | 点击前方有阻挡的箭头 | 箭头不消失,失误次数减 1 | 箭头晃动,失误计数加一 | 通过 |
| T03 | 点击位于边缘且朝向棋盘外的箭头 | 箭头正常消失,不发生越界错误 | 边缘箭头正常消除,程序无崩溃报错 | 通过 |
| T04 | 消除本关全部箭头 | 显示通关结果并进入下一关 | 全部箭头消除后弹出通关弹窗,可以跳转下一关 | 通过 |
| T05 | 失误次数耗尽 | 显示失败结果,允许重新挑战 | 失误达到上限弹出失败弹窗,支持重置关卡 | 通过 |
| T06 | 游戏进行中重新开始 | 箭头布局和失误次数恢复初始状态 | 棋盘箭头、失误计数全部重置为本关初始值 | 通过 |
| T07 | 使用选择关卡 | 游戏提供所有通过关卡供选择 | 可以正确跳转关卡 | 通过 |
PSP 表格:
| 任务 | 预估耗时(小时) | 实际耗时(小时) | 差异(小时) |
|---|---|---|---|
| 需求分析与游戏设计 | 1 | 2 | +1 |
| Python 与图形库学习 | 1 | 1 | 0 |
| 游戏界面实现 | 0.5 | 1.5 | +1 |
| 路径与碰撞逻辑实现 | 0.5 | 0.5 | 0 |
| 关卡设计 | 1 | 1 | 0 |
| AIGC 辅助开发 | 1 | 1 | 0 |
| 测试与修改 | 1 | 1.5 | +0.5 |
| README 与博客撰写 | 1 | 1 | 0 |
| 合计 | 7 | 9.5 | +2.5 |
心得体会:
本次作业使用Pygame完成“一箭又一箭”小游戏,借助多种AIGC编程工具辅助开发。AI可以快速生成基础代码,节省大量重复编码时间,但是AI输出的代码经常忽略边界情况,会出现数组越界、状态没有冻结、UI不符合设计需求等问题,需要人工在阅读代码的基础上,调整
通过本次项目,我理解了网格类小游戏的开发流程:数据定义、核心算法实现、状态管理、界面渲染、动画处理。
同时我也体会到,AIGC只是辅助工具,开发者需要能够读懂每一段关键代码,并且做好充分测试,才能够保证程序逻辑正确。本次作业多次提交Git commit,
然后在vscode里面提交到GitHub时,提交失败,连接不上,傻乎乎去搞了ssh,然后依旧没有用,依旧问AI,依旧邪门歪道让我用vpn,然后一通操作下,我筋疲力尽,选择使用最朴素的办法,手动拖拽到GitHub

浙公网安备 33010602011771号