2026秋软件工程第二次作业——一箭又一箭游戏开发

2026秋软件工程第二次作业——一箭又一箭游戏开发

项目 内容
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2026-01SoftwareEngineeringandSoftwareEngineeringPractice/homework/16718
这个作业的目标 使用 Python 和 AIGC 完成“一箭又一箭”小游戏
学号 102401431
GitHub 仓库 https://github.com/LinkWalker/arrow-game

一、项目展示

屏幕截图 2026-09-22 192021

图1:第一关游戏界面(点击箭头使其飞出)

屏幕截图 2026-09-22 192137

图2:第一关通关,提示按空格进入下一关

屏幕截图 2026-09-22 192229

图3:失误次数耗尽,提示失败,可按 R 键重开

屏幕截图 2026-09-22 192305

图4:第二关游戏界面(需要先点击右上角的 U 才能解开阻挡)

屏幕截图 2026-09-22 192336

图5:第三关游戏界面(包含四个方向,难度稍微提升)

屏幕截图 2026-09-22 192403

图6:全部通关界面,提示按 R 键重新开始


二、项目介绍

本项目基于 Python + Pygame,实现了一个点击式箭头解谜小游戏。游戏规则如下:

  1. 棋盘中包含上、下、左、右四种方向的箭头。
  2. 玩家点击某个箭头后,程序会检查该箭头前进方向上的路径。
  3. 如果前方没有其他箭头阻挡,该箭头会飞出棋盘并消失。
  4. 如果前方有阻挡,箭头会晃动提示,并消耗一次失误机会。
  5. 失误次数上限为 3 次,耗尽则本关失败。
  6. 清空当前关卡全部箭头即可通关并进入下一关。

游戏包含开始界面、游戏界面以及通关/失败界面,内置 3 个可通关关卡,并提供了右上角按钮和键盘 R 键两种重新开始的方式。


三、实现思路

1. 箭头与关卡表示

游戏使用二维网格(5x5)表示棋盘。箭头使用 (row, col, direction) 来标识。其中 direction 使用字符 'U', 'D', 'L', 'R' 表示上下左右。

方向映射使用字典实现:

DIRS = {'U': (-1, 0), 'D': (1, 0), 'L': (0, -1), 'R': (0, 1)}
ARROW_TEXT = {'U': '↑', 'D': '↓', 'L': '←', 'R': '→'}

关卡数据使用字符串数组表示,'.' 表示空位,方向字符表示该位置有一个箭头。例如第一关:

["R....",
 ".....",
 ".....",
 ".....",
 "....U"]

2. 路径检测与碰撞逻辑

路径检测的核心是 can_fly 函数。从当前箭头所在位置出发,沿着它的方向逐格前进:

def can_fly(self, arrow):
    dr, dc = DIRS[arrow.direction]
    r = arrow.row + dr
    c = arrow.col + dc

    while 0 <= r < ROWS and 0 <= c < COLS:
        for a in self.arrows:
            if a is not arrow and a.row == r and a.col == c:
                return False # 遇到其他箭头,被阻挡
        r += dr
        c += dc

    return True # 走到边界,无阻挡,可以飞出

只要在前进路径上遇到任何其他箭头,就返回 False(阻挡);如果走到棋盘外,说明前方畅通,返回 True(可飞出)。

点击箭头时,若 can_fly 为真,则播放飞行动画并移除;若为假,则晃动并扣减失误次数。鼠标点击坐标通过反向计算转换为 (row, col) 来进行判定。


四、AIGC 使用过程

本次开发使用了 DeepSeek 进行辅助,以下为 3 次具有代表性的 AIGC 协作过程记录。虽然 AI 极大地提高了效率,但也暴露出了许多必须在实际运行中才能排查的问题。

子任务 借助何种 AIGC 技术 AI 实现或提供了什么 效果如何 人工修改
游戏窗口与字体绘制 DeepSeek 生成 Pygame 初始化及 SysFont 绘制文字代码 代码在 Python 3.13 环境下直接崩溃报错 排查发现是版本兼容性 Bug,改用 pygame.font.Font("C:/Windows/Fonts/simhei.ttf") 指定本地字体路径后解决
方向与路径检测 DeepSeek 生成四方向路径检测 can_fly 函数 运行时只有右下角箭头能飞,其他方向逻辑错乱 检查代码发现 DIRS 字典中的行列映射反了(把 (0, -1) 当成上了),修正为 (-1, 0) 后逻辑全部正常
重新开始功能(R键) DeepSeek 生成键盘按键事件处理逻辑 游戏中按 R 键无反应,且受中文输入法影响 增加大小写兼容判断 if event.key in (pygame.K_r, pygame.K_R),并调整状态机使其在游戏进行中也生效

五、测试结果

在开发完成后,针对基础功能进行了 T01-T06 的手工测试,结果如下:

编号 测试内容 预期结果 实际结果 是否通过
T01 点击前方无阻挡的箭头 箭头飞出棋盘并消失 箭头正常飞出并消失 通过
T02 点击前方有阻挡的箭头 箭头不消失,失误次数减 1 箭头晃动,显示“被阻挡”,失误加 1 通过
T03 点击位于边缘且朝向棋盘外的箭头 箭头正常消失,不发生越界错误 正常消失,无报错 通过
T04 消除本关全部箭头 显示通关并进入下一关 正常显示通关并切换关卡 通过
T05 失误次数耗尽 显示失败并允许重新开始 显示失败,点击按钮或按 R 可重开 通过
T06 游戏进行中重新开始 箭头布局和失误次数恢复 点击右上角按钮或按 R 键均可恢复初始状态 通过

六、PSP 表格

任务 预估耗时(小时) 实际耗时(小时) 差异(小时)
需求分析与游戏设计 1 1 0
Python 与图形库学习 2 2 0
游戏界面实现 2 2 0
路径与碰撞逻辑实现 2 3 +1
关卡设计 1 0.5 -0.5
AIGC 辅助开发 1 2 +1
测试与修改 1 1 0
README 与博客撰写 1 1.5 +0.5
合计 11 13 +2

七、心得体会

通过本次“一箭又一箭”小游戏的开发,我熟练掌握了 Pygame 的基本用法和二维网格路径检测算法的实现。

在使用 AIGC 辅助开发的过程中,我深刻体会到了 AI 带来的便利,它能够快速生成基础框架和逻辑代码。但同时我也认识到,AI 生成的代码绝不能直接信任并提交。比如这次遇到的 Python 3.13 字体崩溃、方向映射逻辑错乱以及 R 键失效等问题,都是 AI 没有考虑到的实际运行环境差异和细节交互。只有通过自己不断地运行、排查报错、修改边界条件,才能真正让程序稳定运行。

这次作业不仅锻炼了我的编码能力,更让我学会了如何将 AI 作为辅助工具,结合自己的思考去解决问题。

posted @ 2026-09-22 20:23  天使十二  阅读(8)  评论(0)    收藏  举报