纯python代码快速实现简易带界面的数字华容道小游戏

news2024/11/23 8:08:41

        数字华容道是一种经典的益智游戏,旨在通过移动数字方块的位置,将它们按照正确的顺序排列。游戏板由一个4x4的方格组成,其中包含了编号为1到15的数字方块,以及一个空白方块。

        游戏开始时,数字方块被随机打乱并填充到方格中。玩家需要利用空白方块的位置,通过交换数字方块的位置,逐步将它们按照从小到大的顺序排列。玩家可以使用键盘上、下、左、右四个方向键来移动数字方块,将其移动到空白方块的位置。

        玩家的目标是在最短的步数内完成游戏,将所有数字方块按照正确的顺序排列在方格中。游戏的难度取决于数字方块的初始打乱程度,有些情况下可能需要进行一系列复杂的移动才能完成游戏。

        数字华容道是一款简单而又富有挑战性的游戏,可以锻炼玩家的逻辑思维、空间认知能力和问题解决能力。它也是一种常见的智力竞赛项目,被广泛应用于教育和娱乐领域。

主要依赖库为tkinter,完整源码如下:

import tkinter as tk
import random

# 初始化游戏板
def initialize_board():
    board = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, None]]
    return board

# 打乱游戏板
def shuffle_board(board, moves=100):
    directions = ['up', 'down', 'left', 'right']
    for _ in range(moves):
        direction = random.choice(directions)
        move(board, direction)

# 移动数字
def move(board, direction):
    i, j = get_blank_position(board)
    if direction == 'up' and i > 0:
        board[i][j], board[i-1][j] = board[i-1][j], board[i][j]
    elif direction == 'down' and i < 3:
        board[i][j], board[i+1][j] = board[i+1][j], board[i][j]
    elif direction == 'left' and j > 0:
        board[i][j], board[i][j-1] = board[i][j-1], board[i][j]
    elif direction == 'right' and j < 3:
        board[i][j], board[i][j+1] = board[i][j+1], board[i][j]

# 获取空格位置
def get_blank_position(board):
    for i in range(len(board)):
        for j in range(len(board[i])):
            if board[i][j] is None:
                return i, j

# 检查游戏是否完成
def is_game_over(board):
    return board == [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, None]]

# 更新游戏界面
def update_board():
    for i in range(4):
        for j in range(4):
            if board[i][j] is not None:
                button = buttons[board[i][j]]
                button.grid(row=i, column=j)
            else:
                buttons[None].grid(row=i, column=j)

# 处理键盘事件
def key_press(event):
    key = event.keysym.lower()
    if key == 'up':
        move(board, 'up')
    elif key == 'down':
        move(board, 'down')
    elif key == 'left':
        move(board, 'left')
    elif key == 'right':
        move(board, 'right')
    update_board()
    if is_game_over(board):
        label.config(text="恭喜你,游戏完成!", fg="green")

# 创建游戏界面
def create_gui():
    global board, buttons, label

    window = tk.Tk()
    window.title("数字华容道")

    board = initialize_board()
    shuffle_board(board)

    buttons = {}
    for i in range(1, 16):
        buttons[i] = tk.Button(window, text=str(i), width=10, height=5, command=lambda i=i: button_click(i))

    buttons[None] = tk.Button(window, text="", width=10, height=5, state=tk.DISABLED)

    update_board()

    label = tk.Label(window, text="请使用键盘上下左右方向键移动数字", fg="black")
    label.grid(row=4, columnspan=4)

    window.bind('<KeyPress>', key_press)
    window.mainloop()

if __name__ == '__main__':
    create_gui()

运行结果如下,使用键盘方向键移动没有数字的中心块即可:



也可以参考我另一篇主要依赖PyQt5库的快速实现数字华容道游戏的文章:

python快速实现数字华容道小游戏_华容道程序_ASS-ASH的博客-CSDN博客

这个的代码量相较增加了大约一倍(89->165),但游戏界面的美观度有一定提升

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1194297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux-用户与用户组,权限

1.用户组管理&#xff08;以下命令需root用户执行&#xff09; ①创建用户组 groupadd 用户组名 ②删除用户组 groupdel 用户组名 2.用户管理&#xff08;以下命令需root用户执行&#xff09; ①创建用户 useradd [-g -d] 用户名 >-g&#xff1a;指定用户的组&#xff0c;不…

香橙派5部署chatglm2-6b模型

香橙派5部署chatglm2-6b模型 环境信息&#xff1a; 部署服务器&#xff1a;orangepi 5 16G版本 系统版本&#xff1a;Ubuntu 22.04.3 LTS 参考文档&#xff1a; 利用GPU加速&#xff0c;在Orange Pi上跑LLMs &#xff1a; https://zhuanlan.zhihu.com/p/650110025 遥遥领…

Python语法基础(变量 注释 数据类型 输入与输出 运算符 缩进)

目录 变量变量命名规则变量的类型变量的创建变量的作用域 注释的方法数据类型对象和引用的概念Number(数字)数据转换 输入与输出输入函数输出函数输出函数的end参数输出格式多行语句 运算符算术运算符赋值运算符三目运算符运算符的优先级 缩进缩进格式注意事项层级嵌套 变量 标…

Web实验总

目录 网站需求&#xff1a; 思路&#xff1a; 实验步骤&#xff1a; 第一步&#xff1a;准备工作 第二步&#xff1a;新建一个存储网页的目录 第三步&#xff1a;修改本地hosts映射 第四步&#xff1a;修改配置文件&#xff0c;建立基于http服务的网站 1)创建用户song和…

计算机考研408到底有多难?25届开个好头很有必要

前言 大家好&#xff0c;我是陈橘又青&#xff0c;相信关注我的各位小伙伴们中&#xff0c;大多都是在计算机专业的大学生吧&#xff01; 每天都有许多人在后台私信我&#xff0c;问我要不要考研&#xff0c;我想说这个东西是因人而异的&#xff0c;像我本人就选择了就业&…

STL常用库函数复习

文章目录 pairvectorliststackqueuequeuepriority_queuequeue双端队列 set✨set集合✨multiset 多重集合了解&#xff1a;unordered_set 无序集合 map&#x1f31f;map几乎不用&#xff1a;multimap一般不用&#xff1a;undered_map pair utility示例 #include <iostream&…

使用Python自动检测SSL证书是否过期

目录 一、概述 二、SSL证书过期检测原理 三、Python实现SSL证书过期检测 四、注意事项 总结 一、概述 随着互联网的普及和安全意识的提高&#xff0c;SSL证书的使用变得越来越重要。SSL证书可以提供加密通信&#xff0c;保护用户的数据安全&#xff0c;防止中间人攻击等。…

切换闭锁元件 双位置继电器 TST-AB440GT DC24V 导轨安装

TST440AB-GT双位置继电器用于交直流操作的各种保护和自动控制的装置中&#xff0c;作为切换闭锁元件。 系列型号&#xff1a; DSP2-4A重动继电器&#xff1b;DSP2-2A2B重动继电器&#xff1b; DSP2-3A1B重动继电器&#xff1b;TST440GT双母线切换继电器&#xff1b; TST220GT双…

MIPSsim模拟器 使用说明

&#xff08;一&#xff09; 启动模拟器 双击MIPSsim.exe&#xff0c;即可启动该模拟器。模拟器启动时&#xff0c;自动将自己初始化为默认状态。所设置的默认值为&#xff1a; u所有通用寄存器和浮点寄存器为全0&#xff1b; u内存清零&#xff1b; u流水寄存器为全0&#xff…

Dapp开发流程以及应用

随着区块链技术的发展和普及&#xff0c;Dapp&#xff08;去中心化应用&#xff09;逐渐成为了区块链领域中备受关注的话题。Dapp是一种运行在区块链网络上的应用程序&#xff0c;具有去中心化、透明、安全、自治等特点&#xff0c;能够为人们提供更加便捷、高效、安全的应用体…

Essential Math for AI:高效的人工智能数学原理晋级读物

今天给大家介绍一本人工智能数学原理书籍&#xff1a;Essential Math for AI。作者是Hala Nelson&#xff0c;一位应用数学领域的美女博士&#xff0c;James Madison University (JMU) 大学的助理教授。 关注微信公众号&#xff1a;人工智能大讲堂&#xff0c;后台回复【ema】获…

使用反射调用私有内部类方法

使用反射调用私有内部类方法 通过反射机制调用私有内部类方法,反射机制允许在运行时检查和操作类和方法。可以使用反射机制创建内部类的实例,并调用其私有方法 🍓情况一: 注意这里的内部类是私有静态内部类 待测类如下: package jj;import java.lang.reflect.Constru…

MySQL时间类型注意事项

MySQL常见的时间类型有YEAR、DATE、TIME、DATETIME、TIMESTAMP&#xff0c;绝大多数业务都是精确到秒的&#xff0c;所以通常用后两种。并且MySQL5.6以后后两种支持精度到毫秒&#xff08;最多小数点后6位&#xff09; DATETIME占8字节&#xff0c;不论要不要毫秒 TIMESTAMP占4…

三大赛题指南发布!2023 冬季波卡黑客松本周末开启 Workshop

2023 年一众黑客松赛事中&#xff0c;为什么我们建议您选择波卡黑客松大赛&#xff1f;或许答案在于——作为开发者极度友好的技术生态&#xff0c;波卡能够从参赛者的立场出发&#xff0c;为大家提供从 0 到 1 实现项目孵化成长的机会。这里聚集了一线技术专家的资源力量&…

【Spring】Spring IOCDI详解

文章目录 1. Spring是什么&#xff1f;2. 认识IOC2.1 传统程序开发1. Main.java2. Car.java3. Framework.java4. Bottom.java5. Tire.java 2.2 分析传统开发2.3 IOC程序开发1. Main.java2. Car.java3. Framework.java4. Bottom.java5. Tire.java 2.4 分析IOC开发2.5 IOC容器优点…

剑指offer(C++)-JZ21:调整数组顺序使奇数位于偶数前面(一)(算法-其他)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 输入一个长度为 n 整数数组&#xff0c;实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数…

外贸SEO外链类型有哪些?外链建设如何做?

外贸SEO外链资源怎么找&#xff1f;海洋建站SEO外链优化方法&#xff1f; 外贸SEO外链在提高网站排名、吸引流量、增加品牌曝光方面发挥着重要作用。海洋建站将探讨外贸SEO外链的不同类型&#xff0c;帮助外贸企业更好地理解如何优化他们的在线营销策略。 外贸SEO外链&#x…

【PostgreSql高阶语法 】1、CASE WHEN THEN END用法

目录 1. 基础描述2. 用法举例2.1 基础使用2.1.1 方式12.1.2 方式 2 2.2 进行分组2.3 分组练习举例 1. 基础描述 目的&#xff1a;在SQL语句中添加判断条件&#xff0c;就要用到CASE WHEN THEN END用法&#xff1a;类似于java里面的switch语句&#xff0c;一组CASE WHEN THEN E…

香港和美国节点服务器的测试IP哪里有?

在选择服务器时&#xff0c;我们通常需要进行一些测试来评估其性能和稳定性。当然&#xff0c;这其中一个重要的测试指标就是服务器的 IP 地址。通过测试 IP 地址&#xff0c;我们可以了解到服务器所在地区以及网络连接质量等信息。作为香港及亚太数据中心领先服务商恒创科技&a…

五种常见的IO模型

目录 一. IO的概述 1.1 什么是IO 1.2 IO的效率问题 1.3 同步IO和异步IO的概念 二. 阻塞式IO 三. 非阻塞式IO 四. 信号驱动式IO 五. IO多路复用 六. 异步IO 七. 总结 一. IO的概述 1.1 什么是IO IO&#xff0c;表示输入输出&#xff0c;即&#xff1a;InPut / OutPut…