软件工程第二次作业
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16718 |
| 这个作业的目标 | 使用 Python 和 AIGC 完成“一箭又一箭”小游戏 |
| 学号 | 102401525 |
| GitHub 仓库 | https://github.com/sudaaa666666/yi-jian-you-yi-jian |
1.项目展示
- 开始界面:显示游戏名称与规则,点击进入游戏
- 游戏界面:5×5网格棋盘,右侧面板显示关卡、剩余箭头、剩余失误、重开按钮

-
碰撞反馈:被阻挡箭头会左右晃动动画
-
通关弹窗:清空所有箭头后弹出,点击进入下一关
![微信图片_20260919205356]()
-
失败弹窗:失误用完弹出,点击重开本关
![1df1ace3f7165b5d9e0c78c54c2f534]()
2.项目介绍
游戏规则:
棋盘网格中存在↑↓←→四种方向箭头。玩家点击箭头,程序检测箭头前进方向同一条直线上,箭头与棋盘边界之间是否存在其他箭头。
- 无阻挡:箭头飞出棋盘并消失;全部箭头清除通关,进入下一关
- 有阻挡:箭头不会消失,触发晃动动画,扣除一次失误机会;
- 每关初始3次失误机会,失误耗尽本关失败;可随时点击重新开始重置当前关卡。
界面设计分为3个状态:开始界面、游戏界面、通关/失败弹窗。右侧信息面板实时展示游戏数据。
3.实现思路
- 数据表示
- 关卡:二维列表,
None代表空单元格,数字代表箭头方向。 - 箭头类
Arrow:保存网格坐标、方向、晃动动画计数。 - 游戏类
Game:管理当前关卡、箭头列表、剩余失误次数、游戏状态。
- 核心路径检测逻辑(重点)
check_block函数:判断箭头前进方向同一行/列,从箭头相邻格子一直遍历到棋盘边界。
只要遍历途中遇到任意箭头,判定存在阻挡,不能发射;遍历结束没有箭头,则无阻挡。
python
核心检测代码示例
def check_block(self, arrow:Arrow) -> bool:
x, y = arrow.x, arrow.y
d = arrow.dir
if d == DIR_RIGHT:
for nx in range(x+1, GRID_W):
if self.get_arrow_at(nx, y):
return True # 存在阻挡
elif d == DIR_LEFT:
for nx in range(x-1, -1, -1):
if self.get_arrow_at(nx, y):
return True
elif d == DIR_UP:
for ny in range(y-1, -1, -1):
if self.get_arrow_at(x, ny):
return True
elif d == DIR_DOWN:
for ny in range(y+1, GRID_H):
if self.get_arrow_at(x, ny):
return True
return False # 无阻挡
4.AIGC使用过程
| 子任务 | 借助何种 AIGC 技术 | AI 实现或提供了什么 | 效果如何 | 人工修改 |
|---|---|---|---|---|
| 路径检测 | DeepSeek | 生成 4 个方向路径检测代码,遍历同行同列箭头判断阻挡 | 向上方向遍历数组越界,访问负索引报错 | 修改向上、向左循环的 range 范围,增加边界判断,修复越界 bug |
| 关卡设计 | DeepSeek | 生成 3 组 5×5 关卡数组 | 第 2 关存在死局,没有可行通关顺序 | 手动调整箭头位置,逐一把玩测试,保证每一关都存在合理点击顺序 |
| 碰撞动画 | DeepSeek | 编写箭头点击碰撞时的晃动动画逻辑,增加 shake 计数器 | 晃动幅度太大,动画闪烁明显 | 修改偏移像素,降低 shake 单次移动距离,调整动画总帧数,视觉效果更柔和 |
5.测试结果
| 编号 | 测试内容 | 预期结果 | 实际结果 | 是否通过 |
|---|---|---|---|---|
| T01 | 点击前方无阻挡的箭头 | 箭头飞出棋盘并消失 | 箭头直接删除消失 | 通过 |
| T02 | 点击前方有阻挡的箭头 | 箭头不消失,失误次数减 1 | 箭头晃动,剩余失误 - 1 | 通过 |
| T03 | 点击位于边缘且朝向棋盘外的箭头 | 箭头正常消失,不发生越界错误 | 边缘朝外箭头正常消除,无报错 | 通过 |
| T04 | 消除本关全部箭头 | 显示通关并进入下一关 | 全部清除弹出通关弹窗,点击切换关卡 | 通过 |
| T05 | 失误次数耗尽 | 显示失败并允许重新开始 | 剩余失误到 0 弹出失败弹窗,点击重置关卡 | 通过 |
| T06 | 游戏进行中重新开始 | 箭头布局和失误次数恢复 | 点击重开按钮,关卡恢复初始布局,失误重置为 3 | 通过 |
6.psp表格
| 任务 | 预估耗时(小时) | 实际耗时(小时) | 差异(小时) |
|---|---|---|---|
| 需求分析与游戏设计 | 1.5 | 1 | -0.5 |
| Python 与图形库学习 | 2 | 2.5 | +0.5 |
| 游戏界面实现 | 2 | 2 | 0 |
| 路径与碰撞逻辑实现 | 2.5 | 3 | +0.5 |
| 关卡设计 | 1 | 1.5 | +0.5 |
| AIGC 辅助开发 | 1 | 1 | 0 |
| 测试与修改 | 2 | 2 | 0 |
| README 与博客撰写 | 1.5 | 2 | +0.5 |
| 合计 | 13.5 | 15 | +1.5 |
7.心得体会
本次项目借助 AIGC 快速搭建 pygame 游戏框架,自动生成基础逻辑代码,节省了大量重复编码时间。AI 可以快速写出界面绘制、循环遍历、动画基础代码,但是 AI 生成代码会存在逻辑漏洞,比如数组越界、关卡设计不合理,不能直接复制使用。
开发过程中,必须读懂 AI 给出代码,人工调试、测试、修正错误。AI 适合做原型开发,但业务逻辑、边界条件、关卡合理性仍然需要开发者自己把控。通过这次实践,我理解了小游戏的状态管理、网格坐标转换,也学会了如何利用 AIGC 作为编程助手,而不是直接拿来成品。



浙公网安备 33010602011771号