软件工程第二次个人作业:一箭又一箭(ArrowGame)
博客头部信息
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 软件工程 |
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202601SofwareEngineering/homework/16717 |
| 这个作业的目标 | 使用 Python + Pygame 结合 AIGC 完成箭头解谜小游戏开发,掌握界面开发、游戏逻辑设计、路径检测算法、版本控制、软件测试与文档撰写,体验 AI 辅助软件开发完整流程 |
| 学号 | 102401307 |
| GitHub 仓库 | https://github.com/chentiantian-bot/arrow-game |
一、项目展示
本项目为基于 Python + Pygame 开发的《一箭又一箭》箭头解谜小游戏。整体包含三大界面:开始界面、游戏主界面、结算界面(通关/失败),具备完整的交互动画、音效反馈、关卡机制、提示功能与美化效果,完全满足本次软件工程个人作业全部基础要求与加分拓展要求。
二、项目介绍
2.1 游戏规则
游戏基于 8×8 棋盘网格,棋盘内随机分布上、下、左、右四个方向的箭头。玩家通过鼠标点击箭头进行操作:
1. 点击箭头后,程序沿着箭头指向逐格检测路径;
2. 若路径无任何箭头阻挡,当前箭头飞出棋盘、淡出消失,判定消除成功;
3. 若路径存在其他箭头阻挡,箭头无法消除、触发抖动动画,玩家扣除一次失误次数;
4. 每关默认拥有 3 次失误机会,失误次数耗尽则本关失败;
5. 清除当前关卡所有箭头即可通关,自动进入下一关卡;
6. 支持重置关卡、音效开关、智能提示等拓展功能。
2.2 界面功能说明
| 界面名称 | 功能描述 |
|---|---|
| 开始界面 | 展示游戏标题、玩法简介、开始按钮,附带动态小熊背景,按钮支持悬浮变色 |
| 游戏主界面 | 展示8×8棋盘、关卡编号、剩余失误次数,提供 Restart 重置、Hint 提示、Sound 音效开关三大功能按钮 |
| 结算界面 | 全部箭头消除后展示通关提示;失误耗尽展示 GameOver 失败提示,支持重新游玩 |
2.3 拓展加分功能
| 拓展功能 | 功能说明 |
|---|---|
| 动态小熊背景 | 底层背景图片自动左右往复移动,不遮挡游戏交互,美化界面 |
| 按钮 Hover 效果 | 所有功能按钮鼠标悬浮变色,提升交互体验 |
| 双动画反馈 | 成功消除箭头淡出透明动画、失败阻挡箭头抖动动画 |
| Hint 提示功能 | 一键高亮当前所有可直接消除的箭头,辅助解谜 |
| 音效系统 | 成功消除音效、失败碰撞音效,支持一键开关 |
三、实现思路
3.1 数据结构设计
使用字典存储单个箭头信息,包含坐标与方向;使用列表批量存储多关卡箭头布局;使用常量统一管理四个方向偏移量,保证路径遍历统一规范。
3.2 核心路径检测算法
根据箭头方向持续迭代坐标,逐步向棋盘边界遍历。若中途检测到其他箭头判定阻挡,点击无效;若顺利走出棋盘无障碍物,判定可消除。本算法为游戏核心逻辑,保证所有箭头判定精准无误。
3.3 游戏状态管理
全程维护开始状态、游戏游玩状态两大状态机,实时管理关卡数、失误次数、动画状态、音效状态,实现界面切换、通关判定、失败判定逻辑闭环。
3.4 图层绘制逻辑
图层由下至上分层绘制:动态背景 → 棋盘网格 → 箭头元素 → UI文字与功能按钮,层级清晰,不会出现遮挡 bug。
四、AIGC 使用过程
| 子任务 | 借助何种AIGC技术 | AI实现或提供了什么 | 效果如何 | 人工修改 |
|---|---|---|---|---|
| 路径检测逻辑 | Kimi AI | 生成四方向路径遍历、阻挡判断基础代码 | 基础逻辑可用,但向上检测存在坐标越界崩溃 | 重构循环判断顺序,先判断边界再检测箭头,彻底修复越界bug |
| 多关卡布局设计 | DeepSeek AI | 自动生成3组关卡箭头布局数据 | 部分关卡无解、无法正常通关 | 人工调整箭头位置,逐关试玩验证,保证每一关都有合法通关路径 |
| 动画与界面美化 | CodeGeeX AI | 生成抖动动画、淡出动画、按钮交互代码 | 动画速度过快、按钮样式简陋、无背景 | 调整动画帧率、增加圆角按钮、新增动态小熊背景、完善hover效果 |
五、测试结果
| 编号 | 测试内容 | 预期结果 | 实际结果 | 是否通过 |
|---|---|---|---|---|
| T01 | 点击无阻挡箭头 | 箭头成功消除 | 箭头淡出消失、播放成功音效 | 通过 |
| T02 | 点击有阻挡箭头 | 无法消除、扣除失误 | 箭头抖动、失误-1、失败音效播放 | 通过 |
| T03 | 点击边界朝外箭头 | 正常消除、无报错 | 运行稳定、无越界崩溃 | 通过 |
| T04 | 清空所有箭头 | 通关并进入下一关 | 自动跳转下一关、通关提示正常 | 通过 |
| T05 | 失误次数耗尽 | 游戏失败、可重置 | 弹出失败提示,Restart功能正常 | 通过 |
| T06 | 中途重置关卡 | 关卡数据恢复初始 | 箭头、失误次数全部重置成功 | 通过 |
六、PSP 表格
| 任务 | 预估耗时(h) | 实际耗时(h) | 差异(h) |
|---|---|---|---|
| 需求分析与游戏设计 | 2 | 2.5 | +0.5 |
| Python 与 Pygame 学习 | 2 | 1.5 | -0.5 |
| 游戏界面基础实现 | 3 | 3 | 0 |
| 路径检测核心逻辑开发 | 3 | 4 | +1 |
| 关卡设计与调试 | 2 | 1.5 | -0.5 |
| AIGC 辅助开发与改代码 | 2 | 2 | 0 |
| 功能测试与 Bug 修改 | 2 | 2.5 | +0.5 |
| 文档与博客撰写 | 2 | 2 | 0 |
| 合计 | 18 | 19 | +1 |
七、心得体会
本次软件工程个人作业,我完整借助 AIGC 完成了《一箭又一箭》小游戏的开发、调试、测试与文档编写。AI 能够快速生成基础框架、核心算法、界面代码,极大提升了开发效率,但 AI 生成的代码普遍存在逻辑漏洞、边界错误、体验不佳、关卡不合理等问题。通过本次开发,我深刻意识到 AI 只是辅助工具,真正的软件开发需要开发者读懂代码、手动调试、验证逻辑、优化体验、修复缺陷。
同时我规范使用 GitHub 进行分阶段迭代开发,每完成一个功能就提交一次 commit,实现了软件开发的阶段性可控、可追溯。本次作业让我完整体验了小型软件从需求、设计、编码、测试到文档的全流程,对软件工程的开发规范有了更加直观、深刻的理解。
八、游戏阶段性迭代调整过程(阶段一~阶段十一)
本小游戏并非一次性写完,而是分 11 个开发阶段逐步迭代、不断调整、优化、修 Bug、加功能,完全对应 GitHub 的多次提交记录,以下是完整迭代过程:
阶段一:基础窗口搭建与棋盘绘制
最初仅完成 Pygame 窗口初始化、窗口标题、基础画布渲染,搭建游戏运行环境。绘制 8×8 网格棋盘,确定整体界面尺寸与布局,为后续箭头渲染打下基础。对应首次提交:完成基础界面框架。


阶段二:箭头数据结构与方向定义
定义上下左右四个方向常量、坐标偏移量,设计箭头字典数据结构,实现箭头在棋盘对应坐标的静态显示。此时箭头仅能展示,暂不支持点击交互。


阶段三:实现四方向基础路径检测
编写核心路径遍历逻辑,实现向右、向左、向下、向上四个方向的路径判断,初步实现箭头阻挡检测功能。但此阶段存在向上检测坐标越界漏洞,偶尔导致程序闪退。

阶段四:修复边界越界 Bug
针对阶段三出现的数组越界问题,重构循环执行顺序,优先判断坐标是否超出棋盘边界,再进行箭头碰撞检测,彻底解决程序崩溃问题,逻辑稳定性大幅提升。
阶段五:加入点击交互与失误机制
增加鼠标点击监听,区分有效点击与无效点击。加入失误次数统计逻辑,点击阻挡箭头自动扣除失误次数,界面实时展示剩余失误次数,游戏初步具备完整游玩逻辑。

阶段六:增加动画视觉反馈
为成功消除添加淡出动画,为错误阻挡添加箭头抖动动画。解决 AI 初始动画速度过快问题,调整帧率与动画时长,让操作反馈更加自然流畅。
阶段七:设计多关卡与通关逻辑
搭建多关卡数组数据,设计 3 组可游玩关卡,实现清空全部箭头自动进入下一关的逻辑。修复 AI 生成的无解关卡,人工微调箭头位置,保证每一关都可以正常通关。

阶段八:开发功能按钮与重置机制
新增 Restart 重置按钮,实现随时重置当前关卡布局、恢复初始失误次数。同时布局 Hint 提示按钮、Sound 音效按钮,完善游戏操作体系。



阶段九:拓展提示功能与音效系统
实现 Hint 一键提示功能,自动识别当前可消除箭头。导入成功、失败双音效,增加音效开关逻辑,丰富游戏反馈层次。


阶段十:界面美化与交互优化
添加动态小熊移动背景,替换单调纯色背景。为所有按钮增加鼠标悬浮变色效果、圆角样式,优化文字排版、界面配色,整体美观度大幅提升,完成加分项全部功能。
阶段十一:整体测试、调优与文档完善
对全部功能进行系统性测试,修复细微交互瑕疵、统一代码格式、优化运行帧率。完善 README 文档、游戏说明、提交记录整理,完成软件工程作业全部规范要求,项目最终定型。


通过以上十一阶段的迭代开发,项目从空白窗口 → 基础功能 → 核心算法 → 动画音效 → 美化拓展 → 稳定成品,层层递进,完全符合软件工程增量迭代开发思想。
浙公网安备 33010602011771号