Python游戏开发:《最强大脑》同款游戏【数字华容道】

  • 时间:
  • 浏览:72
  • 来源:魔吧手游

今年年初,新一季的《最强大脑》开播了,第一集选拔的时候大家做了一个数字游戏,名叫《数字华容道》,当时何猷君以二十几秒的成绩夺得该项目的冠军,看了这个游戏之后我决定要写一个《数字华容道》的程序,过去了半年,我终于记起了这件事,今天就来实现。

数字推盘游戏(n-puzzle)是一种智力游戏,常见的类型有十五数字推盘游戏和八数字推盘游戏等。十五数字推盘游戏的板上会有十五个方块和一个大小相当于一个方块的空位(供方块移动之用),当15个数字依次排序并且最后一个格子为空位即代表挑战成功。

本文使用 PyQt5 进行设计与实现,PyQt5 是该程序的一个呈现方式,最重要的是算法,学会了算法,完全可以使用 PyGame 或者 Tkinter 实现。

PyQt5安装:pip install PyQt5

本文使用环境:

  • 系统:Windows 10 64位
  • Python版本:3.6

1、布局设计

做一个简版的数字华容道,布局设计如图所示:



  • 图中灰色的部分使用 QWidget 作为整个游戏的载体;
  • 黄色部分使用 QGridLayout 作为数字方块的布局;
  • 红色部分使用 QLabel 作为数字方块。

2、算法设计

如上图所示,本游戏共需要15个方块,每个方块代表一个数字。我们可以使用 一个二维 list 来存储方块上的数字。其实我们要创建一个 4x4 的 list 存储 0~15 各个数字,0 代表空的位置。

2.1 创建并初始化数组

创建数组的方法:

  • 创建一个长度为16的数组,并且在对应位置上保存着 0~15 ;
  • 打乱顺序
import random

# 用来存放位置信息的二维数组
blocks = []

# 产生随机数组,0 代表空的位置
arr = range(16)
numbers = random.sample(arr, 16)

for row in range(4):
    blocks.append([])
    for column in range(4):
        blocks[row].append(numbers[row*4 + column])

# 打印结果
for i in range(4):
    print(blocks[i])

[out]
[2, 5, 7, 9]
[11, 8, 4, 12]
[6, 13, 10, 15]
[1, 14, 0, 3]
[Finished in 0.1s]

猜你喜欢

玩不到《赛博朋克2077》不用急!Switch上还有这9个“同款”游戏

最近《赛博朋克2077》真的是太火了,虽然在本世代主机上的优化已经被疯狂口诛笔伐,而且不少饼都没有圆上,但是仍然可以凭借...

2021-05-10

这季《最强大脑》里的小游戏浅谈(一)

其实很多时候,看上去很复杂的智力题,往往只是很多很简单的问题稍微绕了一绕,通过找到规律,就可以相对容易的解答问题。这季最...

2021-05-10

宅在家半个多月了,18款手机游戏让人轻松一下

今年的春节假期,可能是大家宅在家时间最久的一次。许多公司让员工在家办公,外边多数商业场所又都延期营业,相信不少范友无聊得...

2021-05-10

任天堂Switch 画面最好的18款游戏

现在是2021年的2月,我为大家介绍一下Switch平面画面最棒的18款游戏。主观因素太强,以下推荐仅供娱乐,如果有不同...

2021-05-10

Python游戏开发:《最强大脑》同款游戏【数字华容道】

今年年初,新一季的《最强大脑》开播了,第一集选拔的时候大家做了一个数字游戏,名叫《数字华容道》,当时何猷君以二十几秒的成...

2021-05-10