软件工程第二次作业

项目 内容
这个作业属于哪个课程 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网格棋盘,右侧面板显示关卡、剩余箭头、剩余失误、重开按钮

微信图片_20260919205337

  • 碰撞反馈:被阻挡箭头会左右晃动动画

  • 通关弹窗:清空所有箭头后弹出,点击进入下一关
    微信图片_20260919205356

  • 失败弹窗:失误用完弹出,点击重开本关
    1df1ace3f7165b5d9e0c78c54c2f534

2.项目介绍
游戏规则:
棋盘网格中存在↑↓←→四种方向箭头。玩家点击箭头,程序检测箭头前进方向同一条直线上,箭头与棋盘边界之间是否存在其他箭头。

  1. 无阻挡:箭头飞出棋盘并消失;全部箭头清除通关,进入下一关
  2. 有阻挡:箭头不会消失,触发晃动动画,扣除一次失误机会;
  3. 每关初始3次失误机会,失误耗尽本关失败;可随时点击重新开始重置当前关卡。

界面设计分为3个状态:开始界面、游戏界面、通关/失败弹窗。右侧信息面板实时展示游戏数据。

3.实现思路

  1. 数据表示
  • 关卡:二维列表,None代表空单元格,数字代表箭头方向。
  • 箭头类Arrow:保存网格坐标、方向、晃动动画计数。
  • 游戏类Game:管理当前关卡、箭头列表、剩余失误次数、游戏状态。
  1. 核心路径检测逻辑(重点)
    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 作为编程助手,而不是直接拿来成品。

posted @ 2026-09-20 18:09  sudaaaaaa  阅读(10)  评论(0)    收藏  举报