🚀Nova的软件工程冒险:从“一支箭”到“一片星海”

📌 作业信息

项目内容 内容
这个作业属于哪个课程 H202601软件工程与软件工程实践
这个作业要求在哪里 2026 秋软件工程个人作业(第二次)
这个作业的目标 使用 Python 和 AIGC 完成“一箭又一箭”小游戏
学号 102402102
GitHub 仓库 NovaArrowAdventure

任务加载中……

🎯 主线任务:利用 AIGC 完成“一箭又一箭”小游戏
🧑‍💻 玩家:Nova
🗺️ 当前地图:Python / Pygame / GitHub / AIGC / 软件测试
🏹 初始装备:几支箭、一个棋盘,以及“应该不难吧”的错觉
⭐ 最终目标:完成一个真正能够运行、能够通关、也能够讲明白的小游戏

第二章冒险,正式开始!


🌟 序章:上次刚走出新手村,这次直接发射火箭

大家好,我是 Nova。🌟

上一次的软件工程冒险,我还在新手村里研究地图;这一次,老师直接塞给我一张宇宙船票:用 Python 做一个“一箭又一箭”小游戏,而且还要让 AIGC 成为我的开发搭档。

于是,一支普普通通的箭头经历了四次 GitHub 提交,逐渐变成火箭;一张朴素的棋盘也一路冲出大气层,最终变成了一场拥有 7 个关卡、飞行动画、碰撞反馈、音效、提示、计时、暂停、最佳纪录和终章动画 的像素风太空冒险。🚀

上一篇博客的结尾,我写下了:

下一张地图,加载中……

没想到下一张地图真的加载出来了,而且这一次,地图已经不在地面上。

                   🎮 Nova 软件工程冒险·第二章

                              【起点】
                                 │
                                 ↓
                         第一关:理解规则
                                 │
                                 ↓
                         第二关:基础原型
                                 │
                                 ↓
                         第三关:太空换装
                                 │
                                 ↓
                         第四关:代码重构
                                 │
                                 ↓
                         第五关:AIGC协作
                                 │
                                 ↓
                       👑 Boss战:测试与Debug
                                 │
                                 ↓
                         🏆 第二章通关!

这篇博客记录的不是“AI 按一下按钮,项目自动出现”的童话,而是我和 GPT / Codex、豆包、DeepSeek 一边讨论、一边运行、一边发现问题,再一点点修正的真实开发过程。


🎮 第一关:任务说明——欢迎登上 Nova 号

🎯 本关任务

老师交给我的核心任务可以翻译成一句话:

观察方向,判断前方有没有其他箭头;没阻挡就飞,有阻挡就接受碰撞教育。

听起来很简单。

而根据软件工程作业的传统,“听起来很简单”通常意味着:后面还藏着界面、动画、状态、关卡、测试、README、GitHub 和博客。🙂

在解释代码之前,先看看 Nova 号最终长什么样。

1. 开始界面

开始界面采用像素风太空主题。第一次进入游戏时显示“开始探索”;开始过游戏后,可以选择“重新探索”或“继续探索”。背景中的星星、流星、行星和宇航员让整个界面不再像一份“刚学 Pygame 三天”的实验作业。😎
start

2. 游戏界面

左侧是 7×7 棋盘,火箭代替传统箭头,火箭朝向就是移动方向;右侧信息面板显示当前关卡、关卡故事、剩余火箭、剩余失误次数、用时和最佳纪录。底部提供重新开始、暂停、提示和声音开关。
game

3. 碰撞与失败界面

如果火箭前方还有其他火箭,它会先冲过去“试图硬闯”,随后发生碰撞并返回,同时扣除一次失误机会。三次机会全部用完后进入失败界面,可以重新挑战当前关卡或返回主页。

a1d3ee54-2b1f-4ba8-8c11-a367a5648415

fail

4. 通关与终章

清空当前关卡后会弹出关卡总结,显示本次用时、最佳纪录和剩余星星。通关第七关后还会播放终章动画——毕竟辛苦飞到新星港湾,总不能只弹出一句冷冰冰的 You Win。✨

win

final


🕹️ 第二关:理解游戏规则——手不一定听脑子的话

游戏核心规则如下:

  1. 棋盘上的每枚火箭只有上、下、左、右四种朝向;
  2. 点击火箭后,程序沿它的朝向检查同一行或同一列;
  3. 如果前方没有其他火箭,它就会飞出棋盘并消失;
  4. 如果前方存在阻挡,它不能被消除,并触发碰撞动画和音效;
  5. 每次错误点击会损失一颗星,三颗星全部失去则挑战失败;
  6. 清空棋盘上的全部火箭即可完成当前关卡;
  7. 游戏共 7 关,火箭数量从 4 枚逐步增加到 16 枚,难度循序渐进。

基础规则只有一句话:“前面没人就飞,有人就别莽。”但真正写进程序后,它涉及坐标换算、方向扫描、动画状态、鼠标事件、关卡切换和数据保存。看起来是一支箭,背后却站着一整支开发小队。😂

🌟 项目特色

  • 太空叙事关卡: 从“地面点火台”一路飞到“新星港湾”;
  • 像素风视觉: 所有火箭、星星、行星和装饰主要由 Pygame 图形接口绘制;
  • 7 个可通关关卡: 每关均设置合理的消除顺序;
  • 基础动画反馈: 包括飞出、拖尾、碰撞、爆炸和星星破碎;
  • 实用辅助功能: 提示、暂停、重开、继续探索和音效开关;
  • 计时与纪录: 保存每关最后用时和最佳成绩;
  • 纯 Python 合成音效: 不依赖外部商业音频素材;
  • 模块化结构: 最终版本拆分为配置、音频、主页、游戏和主循环 5 个模块。

🧭 第三关:四次 GitHub 提交——一支箭的进化史

这次我没有在截止日期前上演“一次 Commit 包打天下”,而是把项目按功能成长拆成了四个阶段。每一次提交都能看出项目比上一版多学会了什么。

3.1 第一次提交:先让箭头真的飞起来

第一版使用单文件 main1.py,窗口大小为 900×700,棋盘为 5×5,并设计了 3 个基础关卡。这个阶段优先完成评分标准中的核心要求:

  • 开始、游戏、成功和失败状态;
  • 鼠标点击与网格坐标换算;
  • 上、下、左、右四个方向;
  • 路径阻挡判断;
  • 飞出动画与碰撞返回;
  • 3 次失误机会;
  • 3 个可通关关卡与重新开始。

这一版界面还比较朴素,但它非常重要:只有核心规则可靠,后面的宇宙皮肤才不是“会闪光的 Bug”。

3.2 第二次提交:箭头换装火箭,地图扩大到宇宙

第二版 main2.py 将棋盘扩大到 7×7,把普通箭头绘制成不同颜色的火箭,并将关卡扩展到 7 关。同时加入:

  • 不同关卡的太空背景和剧情名称;
  • 火箭喷焰、拖尾和爆炸粒子;
  • 暂停与提示功能;
  • 单关计时和最佳时间显示;
  • 更可靠的跨平台中文字体回退;
  • 更完整的通关流程。

从这一版开始,项目不再只是“满足要求”,而是有了自己的主题。火箭每升一关,背景也从地面逐渐过渡到深空,玩家的操作被串成了一段完整旅程。

3.3 第三次提交:让宇宙不再静音

第三版 main3.py 加入了音效系统和更精细的交互反馈。程序使用 array 和正弦波、噪声实时合成声音,包括:

  • 火箭发射音;
  • 碰撞爆炸音;
  • 星星损失音;
  • 按钮点击音;
  • 通关与失败提示音;
  • 游戏内声音开关;
  • 按钮按下、回弹和悬停反馈;
  • 更完整的开始界面与通关弹窗。

我还对发射音进行了降音高、削弱高频和包络平滑,避免玩家点击一次火箭,耳机先替火箭“爆炸”。🎧

3.4 第四次提交:从“能运行”走向“像项目”

最终版本没有继续把所有内容堆进一个越来越长的文件,而是拆分成 5 个模块:

文件 主要职责
main.py 主循环、事件分发、游戏状态切换
config.py 窗口、颜色、字体、公共绘制与按钮配置
audio_system.py 音效合成、播放与声音开关
home_screen.py 开始界面、继续探索与最终章动画
game_screen.py 关卡数据、路径判断、动画、计时与纪录

最终版还加入了本地 JSON 纪录保存、继续探索、当前关卡重开、从第一关重开、最终关终章动画等功能。主循环只负责“什么时候做什么”,各模块负责“具体怎么做”,代码结构终于从“一间堆满纸箱的宿舍”变成了“贴好标签的实验室”。🧪

3.5 四次版本对比

能力 第一次 第二次 第三次 最终版
基础路径检测
关卡数量 3 7 7 7
太空像素主题
暂停 / 提示 / 计时
程序合成音效
模块化结构
最佳纪录持久化
继续探索 / 终章动画 部分

🧠 第四关:核心代码迷宫——火箭怎么知道前面有人?

4.1 关卡与火箭的数据表示

每枚火箭用一个三元组表示:

(row, col, direction)

例如:

(1, 2, "right")

表示火箭位于第 1 行、第 2 列,方向朝右。关卡则是多个火箭三元组组成的列表。加载关卡时,我再加入颜色编号,变成:

[row, col, direction, color_index]

这种设计把关卡数据与绘制逻辑分开:以后修改布局时只需要改坐标,不必去碰动画代码。

4.2 鼠标坐标如何变成网格坐标

鼠标点击得到的是屏幕像素坐标,而路径判断需要行列坐标,因此要减去棋盘左上角偏移量,再除以单元格大小:

col = (mouse_x - BOARD_X) // CELL_SIZE
row = (mouse_y - BOARD_Y) // CELL_SIZE
clicked = find_arrow(row, col)

只有点击位置处确实存在火箭时,程序才继续处理。这样点击空白格不会误伤任何无辜火箭。🫡

4.3 核心路径检测

路径检测的关键不是计算复杂几何碰撞,而是根据方向沿同一行或同一列逐格扫描。例如向上时,从当前行的上一格开始,一直检查到第 0 行:

def get_blocking_arrow(arrow):
    row, col, direction = arrow[:3]

    if direction == "up":
        for r in range(row - 1, -1, -1):
            target = find_arrow(r, col)
            if target:
                return target

    elif direction == "down":
        for r in range(row + 1, GRID_SIZE):
            target = find_arrow(r, col)
            if target:
                return target

    elif direction == "left":
        for c in range(col - 1, -1, -1):
            target = find_arrow(row, c)
            if target:
                return target

    elif direction == "right":
        for c in range(col + 1, GRID_SIZE):
            target = find_arrow(row, c)
            if target:
                return target

    return None

返回值有两种:

  • None:前方没有阻挡,可以启动飞出动画;
  • 某个火箭对象:找到了最近阻挡物,启动碰撞动画。

四个方向看起来很像,但上下改变的是行,左右改变的是列;向上和向左还需要使用负步长。这里也是最容易出现边界写反或漏掉第 0 行 / 第 0 列的地方。

4.4 为什么阻挡的火箭要暂时移出列表

点击后,火箭会先从静态火箭列表移除,再交给动画系统绘制:

if blocker is None:
    arrows.remove(clicked)
    start_fly_animation(clicked)
else:
    arrows.remove(clicked)
    start_collision_animation(clicked, blocker)

如果成功飞出,动画结束后它就真正消失;如果发生碰撞,动画系统会在返回原位后把火箭重新加入列表,同时扣除一次机会。这样不会出现同一枚火箭被“静态图层”和“动画图层”同时画两次的分身术。

4.5 游戏状态管理

主程序使用状态变量控制不同界面:

start → game → level_complete → game
          ↕
        pause
          ↓
         fail

最终关完成后还会经过 ending 状态播放终章,再进入最终总结界面。事件处理、逻辑更新和界面绘制都根据当前状态执行,避免开始界面的按钮突然跑到游戏中抢戏。

4.6 最佳纪录如何保存

最终版把每关的 bestlastruns 保存为 JSON,并采用“先写临时文件,再替换正式文件”的方式:

temporary.write_text(json.dumps(data, ensure_ascii=False, indent=2),
                     encoding="utf-8")
temporary.replace(RECORDS_SAVE_PATH)

这种做法比直接覆盖更稳妥。即使写入过程中意外中断,也能降低原纪录文件被写坏的风险。


🤖 第五关:召集 AIGC 队友——AI 是副驾驶,不是自动驾驶

本次开发使用了 GPT / Codex、豆包和 DeepSeek。我把它们当成三个不同风格的队友:GPT / Codex 更适合代码实现与调试,豆包帮助发散主题与界面想法,DeepSeek帮助梳理功能结构和实现步骤。最终代码仍由我运行、比较、修改和负责。

5.1 第一次协作:实现四方向路径检测

项目 记录
使用工具 GPT / Codex
我提出的要求 根据单格箭头规则,设计上、下、左、右四个方向的阻挡检测,并处理棋盘边缘
AI 提供的内容 使用行列扫描实现 get_blocking_arrow(),并建议将查找单元格火箭封装为 find_arrow()
实际效果 基本规则可以工作,但我重点检查了向上、向左时的负步长和第 0 行 / 列边界
我的修改 统一四个分支的返回方式,并通过边缘火箭与多火箭同行 / 同列场景验证

这次我学到:AI 写出四个 for 循环不难,难的是我必须知道为什么向上的范围是 range(row - 1, -1, -1)。助教要是问到这里,我至少不会回答:“因为 AI 当时心情不错。”😅

5.2 第二次协作:把小游戏设计成太空冒险

项目 记录
使用工具 豆包
我提出的要求 帮我把普通箭头消除游戏包装成统一的主题,并给出界面、关卡命名和视觉反馈建议
AI 提供的内容 提出“箭头变火箭、关卡代表航天旅程”的思路,以及星空、行星、喷焰、拖尾等视觉元素
实际效果 主题与玩法非常契合,火箭方向天然对应箭头方向,七关也有了连续故事
我的修改 结合 Pygame 能力筛选方案,没有使用外部商业素材,而是用基础图形绘制像素风元素

这一步对我的帮助不只是“变好看”,而是让我理解了设计统一性:主题、关卡名、按钮文案、背景变化和音效都应该服务于同一段体验。

5.3 第三次协作:梳理功能结构与开发顺序

项目 记录
使用工具 DeepSeek
我提出的要求 根据作业评分点拆解功能,规划从基础版到完整版本的开发顺序
AI 提供的内容 将任务归纳为核心逻辑、界面状态、关卡流程、反馈动画、测试与文档几个部分
实际效果 避免一开始就沉迷粒子特效,先确保路径检测、失败与通关流程完整
我的修改 将计划进一步拆为四次 GitHub 提交,并让每次提交都形成可以运行的阶段版本

这次最大的收获是:需求分析不是把作业说明复制进待办列表,而是识别“必须先做什么”。如果路径检测还没写对,就先做一个会旋转的银河,银河也救不了分数。🌌

5.4 第四次协作:从单文件重构为五个模块

项目 记录
使用工具 GPT / Codex
我提出的要求 单文件已经超过两千行,希望按职责拆分,同时保持现有功能不变
AI 提供的内容 建议划分 configaudio_systemhome_screengame_screenmain,通过状态信号连接主循环与游戏模块
实际效果 主程序的事件循环更清楚,各模块职责更集中,后续修改界面或音效不必翻遍整个文件
我的修改 手动检查模块之间的共享状态、按钮坐标、关卡切换和音效调用,修正拆分后的引用关系

5.5 第五次协作:验证七个关卡是否真的可解

项目 记录
使用工具 Codex 辅助编写验证脚本
我提出的要求 不只看关卡“像是能过”,而是按同样的阻挡规则检查每关能否清空
AI 提供的内容 编写小型求解脚本,每一步寻找当前无阻挡火箭并模拟移除
实际效果 最终 7 个关卡全部找到完整通关序列,火箭数依次为 4、6、8、10、12、14、16
我的修改 对照游戏规则检查脚本判断条件,并保留实际试玩作为最终确认手段

小结:AIGC 能快速给出方案,但“能生成”不等于“能提交”。我仍然需要读懂边界条件、运行程序、验证关卡、比较版本,并决定哪些建议适合这个项目。


👑 Boss战:测试与 Debug——别让火箭带着 Bug 上天

我采用了“静态检查 + 规则验证 + 手工界面测试”的方式。提交前,最终 5 个 Python 文件通过了 py_compile 语法检查;同时使用与游戏一致的同行 / 同列阻挡规则验证 7 个关卡,均能找到完整消除顺序。

6.1 基础功能测试

编号 测试内容 预期结果 实际结果 是否通过
T01 点击前方无阻挡的火箭 火箭飞出棋盘并消失 播放飞出与拖尾动画,火箭从列表移除
T02 点击前方有阻挡的火箭 火箭不消失,失误次数减 1 火箭移动至阻挡物附近后返回,并损失一颗星
T03 点击边缘且朝向棋盘外的火箭 正常消失,不出现越界错误 四个方向均能正确离场
T04 消除本关全部火箭 显示通关结果并可进入下一关 弹出关卡总结,显示用时与下一关按钮
T05 连续错误点击直至机会耗尽 显示失败并允许重新开始 第三次失误后进入失败界面,可重试或回主页
T06 游戏进行中重新开始 布局和失误次数恢复 当前关卡重新加载,火箭和 3 次机会恢复

6.2 扩展功能测试

编号 测试内容 预期结果 实际结果 是否通过
T07 点击提示按钮 标记一个当前可安全飞出的火箭 对应格子出现高亮提示
T08 暂停后继续 暂停期间不计入关卡用时 恢复后计时扣除暂停时长
T09 切换声音开关 音效停止 / 恢复,游戏逻辑不受影响 播放函数受全局开关控制
T10 完成一关后再次运行 最佳纪录可从本地读取 JSON 中保存并重新载入纪录
T11 完成最终关 播放终章并显示最终总结 进入 ending 状态,动画结束后展示总结
T12 对 7 个关卡执行可解性检查 每关都存在完整消除序列 7 / 7 关验证通过

6.3 关卡验证结果

关卡 名称 火箭数量 求解结果
1 地面点火台 4 ✅ 可通关
2 冲破大气层 6 ✅ 可通关
3 近地轨道巡航 8 ✅ 可通关
4 地月转移航线 10 ✅ 可通关
5 月球环绕轨道 12 ✅ 可通关
6 行星际深空 14 ✅ 可通关
7 新星港湾 16 ✅ 可通关

6.4 测试中发现和处理的问题

  1. 中文字体兼容问题: 只写死 Windows 字体路径时,换一台电脑可能显示方框;后来增加系统字体匹配和多个平台的回退字体。
  2. 暂停时间被计入成绩: 如果直接用当前时间减开始时间,暂停越久成绩越差;后来累计 paused_total 并从总时间中扣除。
  3. 碰撞火箭重复绘制: 动画开始前若不从静态列表移除,同一枚火箭会出现重影;后来改为动画独立绘制,返回后再加入列表。
  4. 单文件维护困难: 第三版功能越来越多,定位代码开始像在星海里捞针;最终按职责拆成 5 个模块。
  5. 音效可能刺耳: 最初高频成分较强,后来降低音高、减少高次谐波并增加淡入淡出。

🎒 隐藏任务一:整理项目背包

7.1 最终目录

NovaArrowAdventure/
├── main.py
├── config.py
├── audio_system.py
├── home_screen.py
├── game_screen.py
└── README.md

7.2 开发环境

  • Python 3.10 及以上版本;
  • Pygame 2.x;
  • Windows 10 / 11(代码也提供了 macOS、Linux 常见中文字体回退);
  • 开发辅助工具:GPT / Codex、豆包、DeepSeek。

7.3 安装与运行

pip install pygame
python main.py

7.4 操作说明

  • 鼠标左键:点击火箭或按钮;
  • Esc:暂停 / 继续;
  • 重新开始:恢复关卡初始布局和 3 次机会;
  • 提示:高亮一个当前可以安全飞出的火箭;
  • 声音:开启或关闭游戏音效。

本项目的图形主要由程序实时绘制,音效也由 Python 实时合成,不使用原商业游戏的代码、美术或音频素材。


⏳ 隐藏任务二:打开冒险计时器——PSP 表格

任务 预估耗时(小时) 实际耗时(小时) 差异(小时)
需求分析与游戏设计 1.0 1.5 +0.5
Python 与 Pygame 学习 2.0 2.5 +0.5
游戏界面实现 4.0 5.5 +1.5
路径与碰撞逻辑实现 3.0 3.5 +0.5
关卡设计 2.0 2.5 +0.5
AIGC 辅助开发 2.0 3.0 +1.0
测试与修改 2.5 4.0 +1.5
README 与博客撰写 2.0 3.0 +1.0
合计 18.5 25.5 +7.0

最大的“时间黑洞”是界面和测试。路径检测写出来只需要几个循环,但为了让火箭飞得自然、按钮按得舒服、暂停计时准确、七关都真的能通关,我花了比预想更多的时间。软件工程再次证明:写出第一版代码,只是故事的序章。📖


💡 通关心得:我学会的不只是 Pygame

1. 先完成闭环,再增加烟花

这次最正确的决定,是第一版先完成“开始—游玩—通关 / 失败—重开”的完整闭环。等核心逻辑稳定后,我才加入太空背景、粒子、音效和终章。否则很容易出现界面已经飞出银河系,路径检测还困在第 0 行的尴尬场面。

2. 数据结构决定代码能不能继续长大

(row, col, direction) 表示火箭,看起来只是一个小选择,却让关卡编辑、路径判断和绘制都变得直接。后来加入颜色时,只需要扩展一项,而不用推翻整个结构。

3. AIGC 最有价值的地方是加速试错

GPT / Codex 能快速生成函数和帮助对比版本,豆包能提供主题灵感,DeepSeek能整理开发路径。但 AI 也可能给出不兼容的字体、没有验证的关卡或看似合理却有边界问题的代码。真正重要的能力不是“会不会问 AI”,而是能否判断回答、运行结果并完成修改。

4. 重构不是为了显得高级

main3.py 超过两千行后,继续往里面添加功能的成本明显上升。最终拆成五个模块后,音效、主页、关卡和公共配置各自有了归属。重构并没有直接让玩家多一颗星,却让开发者少掉很多头发。🧑‍💻

5. 测试让“我觉得能过”变成“我证明能过”

关卡看起来可解并不代表真的可解。除了手工试玩,我还使用与游戏一致的规则做可解性检查,确认 7 个关卡都存在完整消除序列。这个过程让我体会到:测试不是项目完成后的仪式,而是帮助我建立信心的证据。


🎯 隐藏任务三:看看升级后的“角色面板”

上一篇博客结束时,我还是一名刚刚接触完整项目的软件工程新手。

这一次,我的技能树又点亮了几个新图标:

🟢 本章新解锁技能

  • Pygame 图形界面与事件循环;
  • 二维网格与坐标换算;
  • 四方向路径扫描;
  • 游戏状态管理;
  • 动画、粒子和程序合成音效;
  • 模块化重构;
  • 关卡可解性验证;
  • Git 多阶段提交;
  • 使用多种 AIGC 工具协作开发。

🟡 仍在升级的技能

  • 更系统的自动化测试;
  • 更复杂的关卡生成算法;
  • 游戏存档与配置管理;
  • Python 项目打包;
  • 代码规范和持续集成。
                    🎮 Nova

             等级:软件工程冒险者 Lv.2
                         │
          ┌──────────────┼──────────────┐
          ↓              ↓              ↓
       游戏逻辑        工程结构        AI协作
        ★★★☆            ★★★☆           ★★★☆
                         │
                         ↓
                   本章新增称号
                         │
                         ↓
              🚀 “会让火箭自己找路的人”

和第一章相比,我最大的变化不是又会用了一个新库,而是开始主动考虑:

这个功能应该放在哪里?怎么验证它真的正确?下一次修改会不会把旧功能弄坏?

这三个问题,正在把“写代码”慢慢变成“做工程”。


🏁 最终关:回到起点,再看这次冒险

从 5×5 棋盘上的几支普通箭头,到 7 个关卡中的彩色火箭;从一个 1600 行左右的基础版本,到第三版超过 2400 行的单文件,再到最终职责清晰的五模块结构——这次作业让我完整经历了需求分析、原型实现、功能迭代、视觉设计、重构、测试和文档编写。

我的火箭也许还没有达到商业游戏的精致程度,但它已经可以正确判断路径、对错误操作给出反馈、保存最佳纪录,并带玩家从地面一路飞向新星。更重要的是,我不只是“得到了一份代码”,而是在一次次修改里逐渐明白了代码为什么这样工作。

下一次 Nova 的软件工程冒险会飞向哪里?不知道。
但至少现在,我已经学会在起飞前先跑一遍测试。🚀✨


🎉 第二章通关!

╔══════════════════════════════════════════╗
║                                          ║
║        🎮 NOVA SOFTWARE ADVENTURE        ║
║                                          ║
║              🏆 第二章通关                ║
║                                          ║
║      Python / Pygame          ✅         ║
║      四方向路径检测             ✅         ║
║      七个可通关关卡             ✅         ║
║      动画与碰撞反馈             ✅         ║
║      AIGC 协作开发             ✅         ║
║      测试与 Debug             ✅         ║
║      GitHub 多阶段提交          ✅         ║
║                                          ║
║       EXP +1   SOFTWARE ENGINEER         ║
║       NEW TITLE: ROCKET NAVIGATOR        ║
║                                          ║
╚══════════════════════════════════════════╝

第一章里,我把一个想法变成了能够调用 AI 的网页。

第二章里,我把一条游戏规则变成了拥有界面、状态、动画、关卡、音效、纪录和测试的完整小游戏。

两次冒险看起来完全不同,但它们都让我走过了同一条路线:

需求
 ↓
分析
 ↓
原型
 ↓
迭代
 ↓
测试
 ↓
Debug
 ↓
重构
 ↓
文档

如果说第一章让我明白:

代码不是终点。

那么第二章让我进一步明白:

第一版能运行,也不是终点。

真正的软件工程,是让程序从“能跑”逐渐变成“正确、清楚、稳定,而且能够继续修改”。


🌌 写在冒险最后

火箭已经飞出了棋盘,Nova 的第二张地图也暂时探索完毕。

但是我的技能树显然还没有点满,项目背包里也还有很多空格。

下一次,也许会遇到团队协作,也许会遇到更大的项目,也许还会遇到一个比数组越界更难缠的 Boss。

不过没关系。

至少现在,我已经知道应该怎么开始:

先读需求,再写代码;先看报错,再改程序;先完成测试,再宣布起飞。

下一张地图,加载中……

Nova's Software Engineering Adventure · Chapter 2

To be continued. 🚀


posted @ 2026-09-20 00:29  NovaVespera  阅读(3)  评论(0)    收藏  举报