软件工程第二次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 借助AIGC工具编写一个消除类游戏程序
学号 102201218

一、项目展示

项目代码已上传至我的GitHub仓库,仓库链接为:https://github.com/wudaohuanyu/-.git。

运行main.py即可得到游戏界面

二、项目介绍

项目名称:宇小波月饼铺

游戏介绍

  • 游戏提供“easy”、“hard”两种难度模式,玩家可根据个人能力自行选择
  • 游戏规则只有在同时点击图案相同的三张图片才能消除
  • 为了更好地可视化,在选中图片用黄色高亮加以突出显示
  • 游戏添加背景音效,提供沉浸式体验感(已确保该音效可商用)
  • 游戏设置暂停和退出按钮,增加与玩家的交互性

1.初始界面


在初始主菜单界面有两种困难模式供选择。

  • 其中“easy”模式下,必须在40秒内消除所有图片才算成功
  • 在“hard”模式下,必须在30秒内消除所有图片才算成功,否则游戏失败

主菜单界面代码展示如下

点击查看代码
def main_menu():
    menu = True
    difficulty = None
    while menu:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                x, y = event.pos
                if 345 < y < 445:  # Easy button
                    difficulty = 'easy'
                    menu = False
                elif 465 < y < 565:  # Hard button
                    difficulty = 'hard'
                    menu = False

        screen.blit(main_background_image, (0, 0))
        draw_text("宇小波月饼铺(*^_^*)", WIDTH / 2, 140, ORANGE, welcome_font)
        draw_text("Main Menu", WIDTH / 2, 240, BLACK, font)
        draw_text("Easy^o^", WIDTH / 2, 395, BLACK, font)
        draw_text("Hard>_<", WIDTH / 2, 515, BLACK, font)
        pygame.display.flip()

    return difficulty

2.游戏界面

  • 在游戏界面左下角有“Time”倒计时提醒玩家
  • 在右下角设置暂停和退出按钮

选中图片时添加淡黄色光标:

根据游戏规则可知,只有选中三张相同的图片才能达到消除目的,游戏保证每种图片数量为3n,能顺利通关。

游戏运行界面主要代码展示如下

点击查看代码
def game_loop(difficulty):
    global paused, paused_time
    running = True
    clock = pygame.time.Clock()
    game_success = False
    start_time = pygame.time.get_ticks()  # Reset start time

    # 设置倒计时时间
    time_limit = TIME_LIMIT_EASY if difficulty == 'easy' else TIME_LIMIT_HARD

    # 创建游戏板
    board = generate_board(difficulty)

    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.MOUSEBUTTONDOWN:
                x, y = event.pos
                if pause_button_rect.collidepoint((x, y)):
                    paused = not paused
                    if paused:
                        paused_time = pygame.time.get_ticks() - start_time
                    else:
                        start_time = pygame.time.get_ticks() - paused_time
                elif exit_button_rect.collidepoint((x, y)):
                    running = False
                elif not paused:
                    col, row = x // TILE_SIZE, y // TILE_SIZE
                    if board[row][col] is not None:
                        if not selected or (selected and (row, col) != selected[-1]):
                            selected.append((row, col))
                        if len(selected) == 3:
                            if check_match(difficulty, board):
                                selected.clear()  # Clear the selection after a match
                                if is_game_over(board):
                                    game_success = True
                                    running = False

        if not paused:
            clock.tick(FPS)
            elapsed_time = (pygame.time.get_ticks() - start_time) / 1000
            time_left = max(0, time_limit - int(elapsed_time))

        screen.blit(bottom_image, (0, 0))  # Draw the bottom image first
        draw_board(board)
        draw_timer(time_left)
        screen.blit(pause_button_img, pause_button_rect)
        screen.blit(exit_button_img, exit_button_rect)
        pygame.display.flip()

        if time_left == 0 or is_game_over(board):
            game_success = is_game_over(board)
            running = False  # End the game loop

    game_over_screen(game_success)

    pygame.quit()

3.游戏结算

游戏通关,结束页面显示如下:

若没有在规定时间内消除所有图片,则游戏失败:

4.游戏素材展示


bottom.png由ARGC生成,其余消消乐图片素材已取得画师授权。
字体、音频均为可商用素材。

三、测试

测试用例 1: 资源加载测试

  • 预期结果: 图片、音效正常显示,控制台无加载错误信息。
  • 测试结果: 运行游戏,所有背景图片、游戏图标正常显示,选择图片时出现淡黄色高亮;背景音效正常播放,且能随暂停、退出按键自动播放、停播。

测试用例 2: 游戏逻辑测试

  • 预期结果: 不同图片能按照3的倍数随机生成,并且按照规则消除;根据选择模式不同设置倒计时时长;游戏结束页面,通关时显示“You Win!”,超时失败时显示“Game Over!”。
  • 测试结果: 图片正确生成,且选择三张相同的图片时可正常消除;倒计时从40秒或30秒开始,能在游戏通关时停止计时触发胜利逻辑“You Win!”,在倒计时结束后触发失败逻辑显示“Game Over!”。

测试用例 3: 用户界面测试

  • 预期结果: 在主菜单界面,点击不同模式按钮能正确设置游戏倒计时并进入游戏状态;在游戏运行界面,点击“暂停”或“退出”按键可以暂停游戏或直接退出游戏。
  • 测试结果: 在主页面点击“Easy”按钮时游戏倒计时设置为40秒,点击“Hard”按钮时游戏倒计时设置为30秒;在游戏运行界面,点击“暂停”按键可以暂停游戏且停止播放背景音乐,再次点击时恢复计时和音效;点击“退出”按键直接退出游戏。

测试用例 4: 性能测试

  • 预期结果:运行游戏并进入游戏状态,进行一段时间的游戏操作,观察游戏运行过程无明显的卡顿或延迟现象。
  • 测试结果:在倒计时时间内游戏运行流畅。

测试设计评价

  • 优点:测试用例覆盖了该游戏设计的主要功能,包括资源加载、游戏逻辑、用户界面和性能。每个功能点都有明确的测试步骤,并最终得到符合预期的测试结果,确保游戏各个功能都能正常运行。
  • 改进:可以增加测试游戏在不同操作系统和设备上的显示效果和兼容性,确保游戏能够在目标用户群体的各种设备上正常运行。

四、项目总结

1.AIGC子任务表格

子任务 借助何种AIGC技术 实现了什么功能 效果如何?
游戏界面创建 chatGPT 创建游戏窗口、加载背景和图案图片、绘制游戏元素 提供了游戏的基本视觉界面和交互功能,用户可以进行游戏操作
游戏逻辑控制 chatGPT 实现游戏规则、计分、胜负判断 确保游戏按照预定规则运行,增加了游戏的可玩性
图块随机分布 在游戏板上随机分布图块 使每一局游戏都有新的布局,提高了游戏的重玩价值
游戏倒计时 Kimi 控制游戏的时间限制 增加了游戏的挑战性和紧张感
资源管理 Pygame 资源加载 加载和显示图像、音乐等资源 丰富了游戏的视听效果,提升了游戏体验
用户操作反馈 Copilot 响应玩家的点击操作,提供视觉和逻辑反馈 使玩家的操作得到即时响应,增强了交互性
图块匹配消除 算法逻辑 检查并消除符合条件的三个相同图块 核心游戏玩法,考验玩家的观察力和策略性
结算页面展示 显示游戏结果和用时 给予玩家游戏反馈,增加了游戏的完整性

2.AIGC心得体会表格

项目名称 学到的内容 心得体会
游戏逻辑设计 学习了构建游戏的基本逻辑和规则 认识到游戏逻辑的简洁性对后续程序设计、和对玩家的吸引力至关重要。
用户界面设计 学会如何设计与实现简洁实用的用户界面 优秀的界面设计应融合视觉吸引力与操作便捷性。
游戏开发 探索如何使用AIGC工具辅助生成游戏代码 AIGC技术大大简化了开发过程,但仍然需要人工调整以保证游戏质量。
游戏测试与改进 深刻理解游戏测试的重要性 测试是发现问题和优化游戏的关键步骤。

3.PSP表格

任务编号 任务描述 预估耗时(小时) 实际耗时(小时) 完成情况 做得好的地方 改进的地方
1 pygame环境配置 1 4 完成 / 找个网速快的地方
2 游戏需求分析与设计 2 2 完成 先从大致功能入手,在设计过程中逐步改进 由于时间问题部分功能没有满足
3 前端页面设计 3 4 完成 通过AIGC生成、网络公开库寻找游戏所需图像、字体、音效,效率高;用户界面简洁直观 对于页面资源的前端设计有更多更好的想法想实现
4 游戏逻辑代码编写 4 6 完成 实现游戏的核心功能 代码效率不高、且调试时间长
5 游戏测试与调整 2 3 完成 测试覆盖游戏基本功能,边测试边调整 /
6 文档编写 2 4 完成 文档清晰,易于理解 多预留时间进行项目总结与文档编写

4.个人反思

对于我这个学了三年归来还是计算机小白的人来说,这次游戏开发是一次重大的突破与十分有意义的收获。虽然由于语言问题,开发过程大多使用AIGC生成代码,但是能够自己一步一步从零开始摸索最终呈现出一个虽然不完美但能运行的游戏作品,很大程度上激发了我对软件工程这门课的热情。
希望这份热情能够激励我在接下来的实战项目中脚踏实地地学习到真本领吧!
posted @ 2024-09-18 23:13  wudaohuanyu  阅读(15)  评论(0编辑  收藏  举报