软件工程课程第二次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 开发“羊了个羊”小游戏
学号 102202143

github代码链接
https://github.com/fzu-ljs/fzu-ljs.github.io/tree/master/软件工程第二次作业

以下是对这段代码的介绍:

一、项目前端设计

  1. 窗口设置
    • 设定了窗口大小为 1040x780 像素。
    • 窗口标题为“羊了个羊游戏菜单”。
  2. 颜色设计
    • 定义了浅蓝色(LIGHT_BLUE)、黑色(BLACK)和白色(WHITE)三种颜色,用于不同的界面元素。
  3. 字体设计
    • 使用 Pygame 的字体系统初始化字体,设置了一种默认字体和大小为 36 像素。
  4. 菜单设计
    • 有四个菜单项,分别是“Easy”、“Rules”、“developing...”和“Exit”。菜单项垂直排列,每个菜单项高度为字体高度的 7 倍。
    • 根据鼠标位置和点击事件,菜单项会以不同颜色突出显示,以表示选中状态。
  5. 游戏界面设计
    • 游戏区域以海底背景图为场景,通过加载和调整背景图片实现。
    • 游戏区域是一个 5x5 的九宫格,每个格子有两层图案,交错显示。图案图片经过加载和缩放处理,大小为 70x70 像素。
    • 底部有一个矩形框,用于存放被点击的图案。当相同图案数量达到三个及以上时,可以进行消除并得分。
    • 屏幕左上角显示倒计时,时间限制为 60 秒。
    • 得分显示在屏幕左上角,与倒计时相邻。
    • 游戏结束时,显示“Game Over!”界面,包括最终得分、“Restart”按钮和排行榜(显示前五个最高得分)。

二、特色功能

  1. 音乐播放
    • 初始化音频模块,加载了主菜单音乐(“bgm2.mp3”)并循环播放。当进入游戏时,停止主菜单音乐,播放游戏音乐(“bgm1.mp3”)。
  2. 游戏规则展示
    • 点击“Rules”菜单项,会显示游戏规则文本,包括如何找到相同图片、三张相同图片可消除以及在限定时间内消除越多得分越高。同时提供“Back”按钮,可返回主菜单。
  3. 游戏逻辑
    • 玩家点击九宫格中的图案,若底部矩形框中相同图案数量达到三个及以上则消除并得分。
    • 当底部矩形框中的图片数量达到 7 个且没有三个相同的图案时,游戏结束。
    • 游戏有时间限制,总时间为 60 秒,倒计时显示在屏幕左上角。如果时间耗尽,游戏也会结束。
    • 游戏结束后,可点击“Restart”按钮重新开始游戏,此时会重置游戏状态、得分、图片列表等。
  4. 退出确认
    • 点击“Exit”菜单项,会弹出确认退出对话框,包含“Yes”和“No”两个按钮供用户选择。

三、技术和算法

  1. 图形绘制技术
    • 使用 Pygame 的图形绘制功能,绘制窗口、菜单项、游戏区域的图案、底部矩形框以及游戏结束界面等。
    • 通过加载和调整背景图片,为游戏增添了视觉效果。
  2. 事件处理技术
    • 有效地处理了鼠标点击、退出等事件,实现了菜单项的选择、游戏的开始、规则查看、退出确认等功能。
  3. 随机图案生成算法
    • 在初始化图案时,使用random.choice函数从加载的图案列表中随机选择图案,为每个格子生成两层随机图案。
  4. 得分计算算法
    • 当玩家点击九宫格中的图案,被点击的图案会添加到底部矩形框中。如果底部矩形框中的相同图案数量达到三个及以上,就将这些相同图案从列表中移除,并增加得分。
  5. 游戏结束判断算法
    • 当底部矩形框中的图片数量达到 7 个时,检查是否有三个相同的图案。如果没有,则游戏结束。
    • 当倒计时时间耗尽时,游戏也会结束。

以下是一个简单的流程图展示实现思路:

开始
|
|-- 初始化窗口、颜色、字体、音乐等
|
|-- 进入游戏主循环
|   |
|   |-- 如果游戏未结束
|   |   |
|   |   |-- 处理事件(鼠标点击菜单项等)
|   |   |
|   |   |-- 根据事件执行相应操作(开始游戏、显示规则等)
|   |   |
|   |   |-- 绘制菜单项和背景
|   |
|   |-- 如果游戏结束
|   |   |
|   |   |-- 绘制游戏结束界面
|   |   |
|   |   |-- 等待用户点击“Restart”按钮重新开始游戏
|
|-- 退出 Pygame
结束

测试:
一、测试样例设计
菜单选择测试:
测试目的:验证菜单选项的功能是否正常。
测试步骤:
启动游戏,检查主菜单是否正确显示四个菜单项。
点击 “Rules” 菜单项,检查是否正确显示游戏规则界面,并且 “Back” 按钮能正常返回主菜单。
点击 “Exit” 菜单项,检查是否弹出退出确认对话框,并且 “Yes” 和 “No” 按钮能正常响应。
点击 “Play Game” 菜单项,检查是否能正常进入游戏界面。

游戏逻辑测试:
测试目的:验证游戏的核心逻辑是否正确。
测试步骤:
进入游戏后,点击九宫格中的图案,检查图案是否能正确添加到底部矩形框中。
检查相同图案数量达到三个及以上时是否能正确消除并得分。
检查底部矩形框中的图片数量达到 7 个且没有三个相同图案时,游戏是否正确结束。
检查倒计时功能是否正常,时间耗尽时游戏是否结束。

重新开始游戏测试:
测试目的:验证重新开始游戏的功能是否正常。
测试步骤:
在游戏结束界面点击 “Restart” 按钮,检查游戏是否能正确重置状态并重新开始。

音乐播放测试:
测试目的:验证音乐播放功能是否正常。

测试步骤:
启动游戏,检查是否能正确播放主菜单音乐。
进入游戏后,检查主菜单音乐是否停止,并且游戏音乐是否正确播放。
重新开始游戏或返回主菜单时,检查音乐切换是否正确。

二、测试结果展示
假设进行了上述测试用例的测试,以下是可能的测试结果:
菜单选择测试结果:
主菜单正确显示四个菜单项,字体、颜色和布局正常。
点击 “Rules” 菜单项后,游戏规则界面正确显示,“Back” 按钮能正常返回主菜单。
点击 “Exit” 菜单项后,退出确认对话框正确弹出,“Yes” 和 “No” 按钮能正常响应。
点击 “Play Game” 菜单项后,能正常进入游戏界面。
游戏逻辑测试结果:
点击九宫格中的图案,图案能正确添加到底部矩形框中。
相同图案数量达到三个及以上时,能正确消除并得分,得分显示正确更新。
底部矩形框中的图片数量达到 7 个且没有三个相同图案时,游戏正确结束,显示 “Game Over!” 界面。
倒计时功能正常,时间耗尽时游戏正确结束。
重新开始游戏测试结果:
在游戏结束界面点击 “Restart” 按钮后,游戏能正确重置状态并重新开始,得分清零,图案列表清空,九宫格重新生成随机图案。
音乐播放测试结果:
启动游戏后,主菜单音乐能正确播放。
进入游戏后,主菜单音乐停止,游戏音乐正确播放。
重新开始游戏或返回主菜单时,音乐切换正确。
三、测试设计评价
优点:
测试用例涵盖了游戏的主要功能,包括菜单选择、游戏逻辑、重新开始游戏和音乐播放等方面,较为全面地测试了程序的功能。
针对游戏的核心逻辑,如图案的添加、消除和游戏结束条件等进行了详细的测试,有助于发现潜在的逻辑错误。
考虑了音乐播放功能的测试,确保游戏的音频效果正常。
不足之处:
没有对游戏的性能进行测试,例如在大量图案同时显示或快速点击的情况下,程序的性能表现如何。
没有对游戏的兼容性进行测试,例如在不同的操作系统或硬件环境下,程序是否能正常运行。
对于一些边界情况的测试不够充分,例如在倒计时刚好为 0 时点击图案,或者在底部矩形框即将满的时候进行特殊操作等。
总体而言,这些测试用例能够基本满足程序的测试需求,但还可以进一步完善和扩展,以提高测试的覆盖度和有效性。

AIGC表格任务:

小游戏任务 是否可利用 AIGC 预估 实际利用情况 AIGC 优缺点及适用不适用情况
设计游戏界面 可以利用 AIGC 生成界面设计的创意和草图 实际利用 优点:可以快速生成多种设计创意,提供灵感。缺点:可能缺乏独特性和针对性,需要人工调整。适合用于获取设计灵感,不适合直接生成最终的游戏界面,因为需要考虑游戏风格的一致性和用户体验的特殊性。
开发游戏逻辑 部分可利用,如生成一些逻辑描述作为参考,但实际代码仍需人工编写 实际利用 优点:可以帮助梳理复杂的逻辑关系,提供思路。缺点:难以准确生成可执行的代码。适合用于辅助设计游戏逻辑框架,不适合直接实现游戏核心逻辑代码。
制作游戏图形资源 可以利用 AIGC 生成一些简单的图形元素或提供创意 实际利用 优点:快速生成图形资源,节省时间和人力。缺点:可能风格不一致,质量不稳定。适合生成一些简单的背景元素或装饰,不适合制作高精度的游戏主角或关键元素。
编写游戏规则说明 可以利用 AIGC 生成规则说明的初稿 实际利用 优点:快速生成文本内容,语言丰富。缺点:可能不够准确和简洁,需要人工编辑。适合生成初步的规则说明,不适合直接作为最终版本。
学到的内容 心得体会
使用 Pygame 库设置窗口大小、标题和颜色 了解了如何通过简单的代码设置游戏窗口的基本属性,为游戏提供了一个可视化的界面基础。
初始化 Pygame 的字体系统并设置字体和大小 掌握了在游戏中添加文字说明和菜单选项的方法,增强了游戏的交互性和可读性。
处理鼠标点击事件以实现菜单项选择和游戏操作 学会了如何响应用户的输入,使游戏能够根据用户的操作进行相应的变化,提高了用户体验。
随机生成九宫格图案和底部矩形框中的图案 认识到了随机化在游戏中的重要性,可以增加游戏的趣味性和重复性。
实现游戏的核心逻辑,包括图案的消除、得分计算和游戏结束判断 深入理解了游戏逻辑的设计和实现,通过代码实现了复杂的游戏规则,提升了编程能力。
使用倒计时功能增加游戏的紧张感 学会了如何在游戏中添加时间限制,使游戏更具挑战性和吸引力。
显示游戏规则和排行榜 明白了如何为玩家提供游戏信息和反馈,帮助玩家更好地理解游戏规则和自己的成绩。
处理音乐播放和切换 掌握了在游戏中添加音频效果的方法,增强了游戏的氛围和娱乐性。
设计游戏主循环和不同的游戏状态 理解了游戏主循环的重要性,以及如何根据不同的游戏状态绘制不同的界面和处理用户输入。

PSP表格
以下是使用 PSP(Personal Software Process)表格对该任务进行分解:

阶段 任务描述 预估耗时 实际耗时
计划 确定任务目标和范围 10 分钟 8 分钟
需求分析 分析游戏代码功能和测试需求 30 分钟 60 分钟
设计 设计测试样例和测试策略 30 分钟 60 分钟
编码 编写测试代码 200 分钟 240 分钟
测试 运行测试代码,记录测试结果 60 分钟 100分钟
分析 分析测试结果,评价测试设计 30 分钟 70 分钟
总结 总结任务完成过程和效果,提出改进方向 20 分钟 25 分钟

个人作业完成过程和效果评价

做得好的地方

  • 较为全面地分析了游戏代码的功能,确定了多个关键测试点,如主菜单显示、游戏规则展示、游戏开始和结束等。
  • 设计的测试样例涵盖了正常情况和一些边界情况,能够较好地验证游戏的稳定性和正确性。
  • 在测试代码编写过程中,合理运用了模拟输入的方法,如使用unittest.mock模块来模拟鼠标点击事件和函数调用,提高了测试的可重复性和独立性。
  • 对测试结果进行了认真分析,能够清晰地指出测试用例的优点和不足之处,为后续改进提供了有价值的参考。

可以改进的地方

  • 在需求分析阶段,可以更加深入地研究游戏代码的复杂逻辑部分,例如图案的随机生成算法和消除算法,以便设计更有针对性的测试用例。
  • 测试代码可以进一步优化,例如增加对游戏性能的测试,如在大量图案同时显示或快速点击的情况下,测量游戏的响应时间和性能表现。
  • 可以考虑使用持续集成工具来自动化测试过程,提高测试效率和可靠性。
  • 在总结阶段,可以提出更具体的改进措施和下一步的行动计划,以便更好地指导后续的开发和测试工作。
posted @ 2024-09-18 23:55  fzu_ljs  阅读(20)  评论(0编辑  收藏  举报