软件工程第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13253
这个作业的目标 使用Python编写一个风格类似“羊了个羊”的消除类小游戏,完成游戏的基本功能和交互;进一步学会利用AIGC帮助开发
学号 052101418

R了个R小游戏

项目地址

R了个R

项目目录

├── README.md  # 项目说明
├── code # 主要代码
│   ├── __pycache__ # 字节码(可忽略)
│   │   ├── constants.cpython-312.pyc
│   │   ├── game.cpython-312.pyc
│   │   ├── menu.cpython-312.pyc
│   │   ├── rank.cpython-312.pyc
│   │   └── test_game.cpython-312.pyc
│   ├── constants.py # 有关常量
│   ├── game.py # 游戏阶段处理
│   ├── main.py # 游戏主循环
│   ├── menu.py # 菜单相关
│   ├── rank.py # 排行榜
│   └── test_game.py # 单测
├── data # 排行榜数据
│   └── leaderboard.json
└── images # 所用图片
    ├── animal_1.png
    ├── animal_2.png
    ├── animal_3.png
    ├── animal_4.png
    ├── animal_5.png
    ├── animal_6.png
    ├── animal_7.png
    ├── background.png
    ├── failure_background.png
    ├── rank_background.png
    └── success_background.png

前端界面展示

  1. 主菜单
    image

  2. 输入玩家昵称界面
    image

  3. 难度选择界面
    image

  4. 游戏通关界面
    image

  5. 游戏失败界面
    image

  6. 排行榜显示
    image

主要实现功能及部分代码

  1. 方块的随机堆叠
    使用pygame.shuttle()打乱每个位置的图片
    def create_stacked_board(self):
        num_tiles = ROWS * COLS
        available_patterns = self.patterns * (num_tiles // len(self.patterns))  # 创建足够多的卡牌图案
        random.shuffle(available_patterns)  # 打乱图案顺序

        board_layers = [[[] for _ in range(COLS)] for _ in range(ROWS)]

        for _ in range(ROWS * COLS * 2):  # 为每个格子生成图案
            row = random.randint(0, ROWS - 1)
            col = random.randint(0, COLS - 1)
            if len(board_layers[row][col]) < 3 and available_patterns:
                pattern = available_patterns.pop()  # 每次取出一个图案
                board_layers[row][col].append((pattern, random.randint(-10, 10), random.randint(-10, 10)))  # 增大偏移量

        return board_layers

  1. 倒计时功能

    • 设置游戏倒计时,倒计时结束还未消除所有方块则失败。
    • 根据难度的设置倒计时不同。
  2. 排行榜功能

    • 清空功能:可以清空排行榜中的所有数据。
    • 显示排行榜:在游戏界面中显示排行榜的前六名玩家及其成绩。(多于6则根据时间和难度进行覆盖)
# leaderboard.py
import json
import os

class Leaderboard:
    def __init__(self, filename='../data/leaderboard.json'):
        self.filename = filename
        self.load()

    def load(self):
        if os.path.exists(self.filename):
            with open(self.filename, 'r') as file:
                self.data = json.load(file)
        else:
            self.data = []

    def save(self):
        with open(self.filename, 'w') as file:
            json.dump(self.data, file, indent=4)

    def clear(self):
        self.data = []

    def add_entry(self, name, time, difficulty):
        difficulty_priority = {'normal': 0, 'easy': 1}
        self.data.append({'name': name, 'time': time, 'difficulty': difficulty})
        self.data.sort(key=lambda x: (difficulty_priority[x['difficulty']], x['time']))
        self.data = self.data[:6]  # 只保留前6条记录
        self.save()
        self.load()  # 重新加载数据

    def get_top_entries(self, limit=6):
        self.load() # 获取排行榜时加载最新数据
        return self.data[:limit]
  1. 难度设置
    • 选择难度:玩家可以在游戏开始前选择不同的难度(如简单和普通)。
    • 难度影响:不同的难度会影响游戏的时间限制和其他游戏参数(如槽位上限,easy难度为7个卡槽;normal难度为6个卡槽)。

单元测试

单元测试包括以下几个测试用例:
测试游戏初始化:确保游戏在初始化时设置了正确的难度,并且游戏状态为未成功和未结束。
测试菜单初始化:确保菜单在初始化时选择了默认难度,并且玩家名称为空。
测试排行榜初始化:确保排行榜数据是一个列表。
测试添加排行榜条目:确保添加条目后排行榜数据长度增加,并且最后一个条目是新添加的条目。
测试菜单事件处理:确保菜单事件处理返回正确的状态。

测试结果:
image
该单元测试能够检查游戏的所有类初始化,如游戏,菜单,排行榜,菜单按钮的测试。不足是具体的游戏测试还是需要游玩测试。

AIGC表格

子任务 借助何种AIGC技术,实现了什么功能 效果如何
游戏背景设计 利用图像生成模型(如Stable Diffusion、DALL-E)生成游戏背景图片 游戏背景更丰富多样,缩短设计时间,不过有时候生成的图片一言难尽
游戏难度设计 利用Copilot进行游戏难度调整 提高游戏的趣味性和多样性,节省人力
游戏测试与反馈分析 利用GPT4自动生成单元测试代码 提高测试效率,快速定位问题,优化游戏质量
游戏失败/成功画面生成 使用图像生成模型如DALL-E生成游戏失败或成功画面 整体来说还行(DALL-E不错),其他生成模型生成的图片看不下去
游戏排行榜设计 借助Copilot生成排行榜相关代码,根据难度和完成时间排序 实现了功能,提升游戏竞技性,只需要更改部分代码

AIGC技术的优缺点

优点:

  • 提高开发效率:自动生成图像、代码等,减少人力投入。
  • 丰富多样性:可以快速生成多种风格,提高游戏内容的丰富性。

缺点:

  • 创意受限:AIGC生成的内容可能缺乏人类创造力的独特性。
  • 质量参差不齐:自动生成的内容质量不稳定,一般需要手动调整。
  • 复杂交互难实现:对于复杂的游戏机制和交互,仅靠AIGC目前难以实现。

适合用在:

  • 背景生成、音效制作(未完成)等艺术性较强的任务。
  • 玩家行为分析、关卡难度调整等数据驱动的优化。

不适合用在:

  • 复杂的游戏机制设计和实现。
  • 需要高度创意和个性化的游戏内容。

PSP表格

活动 预估时间 (小时) 实际时间 (小时) 备注
需求分析 2 2.5 确定游戏功能和用户需求
设计 3 3.5 设计游戏架构和界面
计划 1 1 制定开发计划和时间表
编码 8 9 编写游戏基础代码,包括主菜单、游戏逻辑、排行榜等
测试 3 3 测试游戏基本功能,修复bug
集成 2 2 将menu,game,rank个模块集成到main模块中,确保整体功能正常
代码评审 2 2 进行代码审查,确保代码质量
用户评审 1 1 邀请用户(自己)进行试玩,收集反馈
总结 1 1 总结开发过程,记录经验教训
文档编写 1 1 编写项目文档,包括用户手册和开发文档

总计

活动 预估时间 (小时) 实际时间 (小时) 备注
总计 24 25 总开发时间
posted @ 2024-09-18 20:15  Ricky-chen1  阅读(9)  评论(0编辑  收藏  举报