AIGC标识 软件工程第二次作业

项目 内容
这个作业属于哪个课程 202601软工
这个作业要求在哪里 作业要求
这个作业的目标 使用 Python 和 AIGC 完成“一箭又一箭”小游戏
学号 102301230
GitHub 仓库 仓库链接

项目展示:

游戏开始初始界面

屏幕截图 2026-09-20 235805

按错,失误次数减少

屏幕截图 2026-09-20 233750

屏幕截图 2026-09-20 233831

多次失误,失败界面

屏幕截图 2026-09-20 233922

重新挑战,通过界面

屏幕截图 2026-09-20 233959

选择关卡界面

屏幕截图 2026-09-20 234029

项目介绍:

关卡界面有箭头, 箭头会朝向箭头方向前进(被点击后),如果箭头撞击到其他箭头,会出错
你每个关卡有三次出错机会,全错就会失败,失败后可以重新挑战关卡
将关卡箭头全部移除,就通过,可以选择下一关
选择关卡按钮,可以选择已经通过的关卡

每个关卡,你都可以选择重新开始按钮,重新玩这个关卡
如果你的箭头出错,箭头会变成红色,且有动画提示

实现思路:

(1)方向与箭头

使用字符代表方向:↑、↓、←、→,并建立字典DIR_VEC,把箭头字符映射为二维坐标偏移向量:

DIR_VEC = {
    "↑": (0, -1),
    "↓": (0, 1),
    "←": (-1, 0),
    "→": (1, 0)
}

向量(dx, dy)含义:dx 代表水平偏移,dy 代表垂直偏移。例如→对应(1,0),表示每一步向右移动一格。

(2)关卡数据结构

所有关卡存放在列表LEVELS中,每一关是一个字典,包含:

  • size:棋盘边长(N×N 方格)
  • max_mistake:本关允许最大失误次数
  • map:二维列表,作为棋盘地图。单元格内容:空字符串代表无箭头,方向字符代表该格子放置对应方向箭头。

示例:

{
    "size": 4,
    "max_mistake": 3,
    "map": [
        ["", "→", "", ""],
        ["↑", "", "", "↓"],
        ["", "", "", ""],
        ["", "", "←", ""]
    ]
}

优点:关卡数据和游戏逻辑分离,新增关卡只需要在LEVELS追加字典,不用修改核心代码。

(3)路径检查

def path_check(game_map, size):
    """
    路径检测
    :param game_map: 当前关卡地图二维数组
    :param size: 棋盘边长 N
    :return: (is_success, path_list)
        is_success: True通关;False死循环
        path_list: 走过的坐标列表,可选用于绘制路径
    """
    # 找到起点:第一个存在箭头的格子
    start = None
    for y in range(size):
        for x in range(size):
            if game_map[y][x] in DIR_VEC:
                start = (x, y)
                break
        if start is not None:
            break

    if start is None:
        return False, []

    x, y = start
    visited = [[False for _ in range(size)] for _ in range(size)]
    path_list = []

    while True:
        # 情况1:坐标超出棋盘 → 成功走出,通关
        if x < 0 or x >= size or y < 0 or y >= size:
            return True, path_list

        # 情况2:重复访问格子 → 环路,失败
        if visited[y][x]:
            return False, path_list

        # 标记当前格子已访问,加入路径
        visited[y][x] = True
        path_list.append((x, y))

        # 获取当前格子箭头方向向量
        arrow = game_map[y][x]
        dx, dy = DIR_VEC[arrow]

        # 更新坐标,向前走一步
        x += dx
        y += dy

AIGC 使用过程:按照要求记录至少 3 次具有代表性的 AI 协作过程;

子任务 借助何种 AIGC 技术 AI 实现或提供了什么 效果如何 人工修改
路径检测 deepseek 生成碰撞检测代码 边界判断时出现误判,将游戏边界判断成障碍物 修改边界条件后正常
关卡设计 deep seek 生成关卡数组 关卡过于单调,没有挑战性,缺乏难度的递进关系 手工调整并试玩验证
页面美化 豆包 补全箭头晃动代码 ,帮助生成页面的按钮图像 基本可用 调整动画速度 ,调整按钮重叠的情况

重点是解决UI 文字重叠、弹窗排版错乱:新增按钮后元素互相压住,通关 / 失败弹窗高低不一致。修复:重新规划全部控件 Y 坐标,统一弹窗布局参数。

这是当时的AIGC部分使用记录

屏幕截图 2026-09-21 104153

测试结果:

测试是手动一遍遍跑的

编号 测试内容 预期结果 实际结果 是否通过
T01 点击前方无阻挡的箭头 箭头飞出棋盘并消失 箭头平滑飞出,成功移除 通过
T02 点击前方有阻挡的箭头 箭头不消失,失误次数减 1 箭头晃动,失误计数加一 通过
T03 点击位于边缘且朝向棋盘外的箭头 箭头正常消失,不发生越界错误 边缘箭头正常消除,程序无崩溃报错 通过
T04 消除本关全部箭头 显示通关结果并进入下一关 全部箭头消除后弹出通关弹窗,可以跳转下一关 通过
T05 失误次数耗尽 显示失败结果,允许重新挑战 失误达到上限弹出失败弹窗,支持重置关卡 通过
T06 游戏进行中重新开始 箭头布局和失误次数恢复初始状态 棋盘箭头、失误计数全部重置为本关初始值 通过
T07 使用选择关卡 游戏提供所有通过关卡供选择 可以正确跳转关卡 通过

PSP 表格:

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

心得体会:

本次作业使用Pygame完成“一箭又一箭”小游戏,借助多种AIGC编程工具辅助开发。AI可以快速生成基础代码,节省大量重复编码时间,但是AI输出的代码经常忽略边界情况,会出现数组越界、状态没有冻结、UI不符合设计需求等问题,需要人工在阅读代码的基础上,调整

通过本次项目,我理解了网格类小游戏的开发流程:数据定义、核心算法实现、状态管理、界面渲染、动画处理。

同时我也体会到,AIGC只是辅助工具,开发者需要能够读懂每一段关键代码,并且做好充分测试,才能够保证程序逻辑正确。本次作业多次提交Git commit,

然后在vscode里面提交到GitHub时,提交失败,连接不上,傻乎乎去搞了ssh,然后依旧没有用,依旧问AI,依旧邪门歪道让我用vpn,然后一通操作下,我筋疲力尽,选择使用最朴素的办法,手动拖拽到GitHub

posted @ 2026-09-21 11:01  Aidname  阅读(9)  评论(0)    收藏  举报