基于Python实现的九宫格游戏

目录
1 问题描述 5
2 需求分析 5
2.1 数据需求 5
2.2 功能需求 5
2.3 非功能需求 5
3 概要设计 5
3.1抽象数据类型 5
3.2 总体设计 5
3.3 功能模块设计 5
3.4 用户界面设计 5
4 详细设计及系统实现 5
4.1 存储结构 5
4.2 核心算法 5
4.3 各功能实现 5
5 系统调试分析 5
6 课程设计总结 5
参考文献 5
附录:源码以及其它相关材料 5

1 问题描述
1.1课题题目:九宫格游戏的设计与实现
1.2游戏的主要目标:
该游戏的目标是实现九宫格拼图游戏的基本游戏功能,以及用户登录注册,对玩家游戏的进度存档和读取。
1.3游戏的开发环境及运行环境
操作系统:Windows 11
开发工具:Microsoft visual studio
编程环境:python
Gui工具包接口:Python Tkinter,PIL
2 需求分析
2.1 数据需求
游戏包括界面,基本的控件,有文本框、选择框、按钮等。
用户信息:用户登录需要的账号和密码,新用户注册用到的信息;对玩家信息的记录、保存、读取。
界面信息:图片,九宫格规格;
交互信息:控制游戏的移动;
2.2 功能需求
2.2.1 游戏界面设计:
用户登录,进入游戏界面,有良好的功能可视化界面,有游戏规则介绍。游戏图片替换,显示游戏界面的图像画面,游戏玩家开始游戏的按键。
2.2.2 原始图像的选择:
游戏开始时,从准备好的图片中,选择想要拼的图片,要有不同难度的图片(可从相似度考虑);
2.2.3 随机打乱图像:
选择难度(1,2,3),根据难度将图片分成33, 55,6*6的规格,随机打乱生成肯定有成功结果的初始化状态九宫格;
2.2.4 移动:
用户可以拖动模块进行交换,直到拼出原图像。
1)通过w, s, a, d(或者上,下,左,右)进行平移操作,动态的展示每一步移动的结果。如果操作违法,应不做该操作;
2)游戏过程中,允许选择悔一步(不可后退多步,若用户悔步>1,给出提示且不执行多次后退操作)或者终止游戏(正常),继续下一步;

def on_game():
    FPS = 30
    window = tk.Toplevel()
    pic_path = "game_pic" + var1.get() + ".png"
    img = Image.open(pic_path)
    tkImage_list = [] # 存的图片的数组
    index_list = [] # 存图片顺序的数组

    depth = int(var2.get())

    width, height = img.size
    w = int(width / depth)
    h = int(height / depth)

    image_index = 0
    index_index = 0

    replaced_img = None # 储存被白块挡住的图

    # 切割图片
    def cut_image(Pic):
        nonlocal tkImage_list
        for i in range(depth):
            for j in range(depth):
                box = (w * j, h * i, w * (j + 1), h * (i + 1))
                image = Pic.crop(box)
                tkImage_list.append(ImageTk.PhotoImage(image))
                index_list.append(i * depth + j)

    # 保证一定能复原
    def shuffle_list():
        nonlocal index_list
        reverseCount = 0
        random.shuffle(index_list)
        for i in range(len(index_list)):
            for j in range(i):
                if index_list[i] < index_list[j]:
                    reverseCount += 1
        if reverseCount % 2 != 0:
            shuffle_list()

    # 创建白布
    def form_white_box():
        nonlocal tkImage_list
        nonlocal image_index
        nonlocal replaced_img
        (x, y) = depth - 1, depth - 1
        image_index = x * depth + y
        white_box = Image.new('RGB', (w, h), (255, 255, 255))
        tk_white_box = ImageTk.PhotoImage(white_box)

        replaced_img = tkImage_list[image_index]
        tkImage_list.pop(image_index)
        tkImage_list.insert(image_index, tk_white_box)

    def show_single_img(index, i):
        label = tk.Label(window, image=tkImage_list[index])
        label.grid(row=int(i / depth), column=int(i % depth))

    # 展示所有图片
    def show_image_list():
        num = 0
        for index in index_list:
            show_single_img(index, num)
            num += 1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shejizuopin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值