软件工程第二次个人作业
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 了解游戏开发的大致流程 |
学号 | 052205144 |
项目名称:抓肥羊🐑
github主页链接:poetry-joy (github.com)
github作业链接:[软工作业](git_demo/软件工程 at master · poetry-joy/git_demo (github.com))
运行catchFatsheep.py
一、游戏规则:
①玩家通过点击选择图案并消除,当所有图案被消除时游戏结束。
②玩家可以开出隐藏款大肥羊(不涉及侵权)
③玩家需要非常眼疾手快的进行游戏,游戏初始时间为60s,难度随着游戏关卡的变更陡然提升,主要体现在关卡游戏时间上的线性递减(例:第一关60s,第二关50s,…,第六关10s),给玩家带来高难度的挑战的体验
④游戏共设置六个关卡,六个关卡过后会弹出FMVP结算页面,之后自动退出程序(防沉迷)
⑤拓展功能:给老师和助教等尊贵的SVIP玩家设计了一个一键通关的按钮,在任意情境下(游戏中途)均可使用,可以节 约老师们检查我们的作业的时间
二、游戏演示:
①主菜单进入游戏界面演示:
②游戏玩法演示:
③老师助教专用功能演示:
④游戏失败演示:
⑤游戏全通关演示:
三、小游戏实现步骤
(1)设计界面
①主菜单
②游戏界面
③结束界面
(2)设计玩法
-
消除游戏为基础的多图层堆叠游戏
-
游戏难度飙升:,每进入下一关游戏时间骤减10s
(3)附加功能
- 给老师和助教设计了一个一键通关的按钮,在任意情况下(游戏中途)可使用,可以节约老师们检查我们的作业的时间
四、小游戏实现代码
poetry-joy (github.com) 小小链接我已放好
五、AIGC
①背景音乐:AI
②背景图片:AI
③水果:AI
④小羊:(阿里巴巴矢量图标库)
⑤胜利图片:AI+Ps
⑥AIGC表格:
子任务 | 借助何种AIGC技术实现了什么功能 | 效果如何? |
---|---|---|
画主菜单 | 背景+按钮绘制 | 达到预期,样式需调 |
画游戏界面 | 背景绘制 | 达到预期,需微调 |
画游戏结束界面 | 背景+按钮绘制 | 达到预期 |
画倒计时 | 时间变换 | 达到预期,需微调 |
画道具 | 道具定位 | 达到预期 |
游戏胜利动画 | 动画演示 | 达到预期,需微调 |
道具使用动画 | 动画演示 | 达到预期,需微调 |
按钮的处理逻辑 | 页面变换 | 达到预期 |
图层堆叠 | 多个图层 | 本来想要交错型,始终调不好 |
检查是否能被消除 | 多层图块匹配问题 | 达不到预期,我大调 |
检查是否进入死局 | 偶数处理 | 效果一般 |
更新剩余时间动画 | 更新剩余时间 | 达到预期 |
结束整个游戏 | FMVP结算动画 | 效果一般 |
主逻辑 | 实现整体流程 | 效果还可以 |
六、测试实例
①代码:
``
class TestGameLogic(unittest.TestCase):
def setUp(self):
# 初始化 Pygame 显示,以便测试图像部分
pygame.display.set_mode((100, 100))
def test_powerup_activation(self):
"""测试 PowerUp 的激活与动画更新"""
power_up = PowerUp()
self.assertFalse(power_up.active, "初始状态下,PowerUp 应为非激活状态")
power_up.activate()
self.assertTrue(power_up.active, "调用 activate 后,PowerUp 应变为激活状态")
# 模拟经过的时间,并测试是否可以触发胜利条件
layers = [Layer(original_patterns, (0, 0), is_top_layer=False)]
power_up.update(layers)
self.assertTrue(power_up.active, "动画未完成时,PowerUp 仍应处于激活状态")
pygame.time.delay(power_up.animation_duration + 100) # 等待足够时间
power_up.update(layers)
self.assertFalse(power_up.active, "动画完成后,PowerUp 应变为非激活状态")
def test_layer_tile_management(self):
"""测试 Layer 类的图块管理"""
layer = Layer(original_patterns, (0, 0), is_top_layer=False)
row, col = 0, 0
tile = layer.get_tile_at_position(row, col)
self.assertIsNotNone(tile, "初始状态下,图块应存在")
layer.remove_tile(row, col)
self.assertIsNone(layer.get_tile_at_position(row, col), "调用 remove_tile 后,图块应被移除")
def tearDown(self):
pygame.quit()
if __name__ == '__main__':
unittest.main()
②测试结果:
七、AIGC表格
八、PSP表格
PSP | 预估耗时 | 实际耗时 |
---|---|---|
项目分析,明确需求 | 1 | 0.2 |
构建原型模型 | 1 | 0.1 |
项目准备工作 | 0.5 | 0.1 |
投入开发 | 12 | 10 |
调试和修改 | 2 | 15 |
测试 | 1 | 0.5 |
部署到web | 0.5 | 暂无 |
复盘与总结 | 0.8 | 0.5 |
维护 | 持续跟进 | 持续跟进 |
个人评价:我在开发和需求分析过分追求速度,导致后期调试和修改阶段耗时较多,在开发中出现了一系列未预见到的问题。以后我会多在原型设计和测试阶段投入时间精力,以减少后期调试的工作量,确保项目的稳定性和质量。