用TKINTER在Python中创建一个翻转位游戏
#编程 #python #gamedev #tkinter

提出了一个教程,向您展示了如何开发一个程序以在Python创建站点地图生成器之后,我继续卷土重于Python语言,并创建了一个小游戏。

此处的目标是向您展示如何使用Python标准的TKINTER GUI库。我选择的游戏不是革命性的,但是一旦完成我们将要开发的程序,它就足够有趣了。

这个游戏称为翻转位。

如果您是程序员,我认为您的职业生涯至少已经开发了一次,但是如果您没有,这是您填补这一空白的机会。

来自正方形网格(以2个维度),由0和1随机生成,目标是通过执行两种类型的操作来获得目标网格:

单击列逆转列的所有0和1。此操作称为翻转一列。
单击一行会逆转行中的所有0和1。此操作称为翻转。
当您获得目标网格时,您可以解决这个难题。

具体而言,这是尺寸3:

的初始网格

0 1 0
1 0 0
1 1 1

这是您要获得的网格:

1 0 1
0 1 1
0 0 1

让您说您单击初始网格的第1列,您将具有以下配置:

1 1 0
0 0 0
0 1 1

等等。


建模程序

我们的程序将分为两个类。

第一个将是一个FlippingBitsGame类,它将用翻转列和行的方法对游戏本身进行建模,但也会生成新的网格。

第二类将被称为flippingbitsgui。它将通过管理图形部分以及与用户的交互来建模游戏的图形部分。我认为在这里特别是单击一列和一行,以及消息告诉玩家他赢得了。

要实现0,我们将使用黄色。蓝色将保留给数字1。

显示网格的正方形时,应将其正方形的小正方形放在左上角。这将使玩家知道可以达到目标以解决翻转零件游戏的目标。


创建FlippingBitsGame类

在FlippingBitsgame类的构造函数中,我们将级别定义为数据成员。这对应于我们的方格的大小。然后,我们定义两个二维阵列以分别存储要达到的网格和电流网格。

我们定义了一个求解的布尔值,该布尔值将指示网格是否已求解。最后,我们称之为新游戏方法,该游戏将在稍后定义。它将允许创建一个新游戏。

然后,我们定义了Flipcol方法和Fliprow方法。

Flipcol方法将颠倒要求解的网格中列的所有细胞的值。 Fliprow方法将对网格中的单元格值进行相同的作业。

当调用这些方法时,0 s变为1,而1变为0s。

这为我们提供了这两种方法的以下代码:

为了在目标和玩家将播放的目标之间创建不同的网格,我们定义了一种随机在行和列上随机执行不同翻转操作的方法。

这给出以下代码:

然后可以定义新游戏方法。只有将网格标记为解决,才能创建一个新游戏。为此,我们检查已解决的数据成员的值。

然后,我们将迭代创建一个目标网格,以达到与当前的目标网格。为此,有必要调用洗牌方法并将当前网格复制到目标网格中。

如果尚未解决当前网格,则工作完成。否则,迭代将继续。可惜向玩家提出已经解决的网格

仍然可以使用已发出的方法来完成此类FlippingBitsGame的代码,该方法将检查当前网格是否对应于要达到的电网。

这为我们提供了FlippingBitsGame类的以下代码:


创建FlippingBitsGui课程

完成我们的flippingbitsgame类,是时候进入FlippingBitsGui类了,该类将向用户显示要解决的网格的状态,也可以管理交互。

当我谈论互动时,我的意思是单击翻转列或行以求解网格以达到目标网格,该网格将显示为左上角的小正方形。

在FlippingBitsGui类的构造函数中,我们使用FlippingBitsGame类创建游戏的实例。

作为输入参数,我们获得了GUI的根源,这将使我们能够创建游戏将渲染的画布。我们通过调用一个屏幕上显示网格的抽签方法来完成。

在此夹板方法中,我们通过呼叫对画布对象的删除方法重置画布。

我们计算了与正方形显示的盒子数量相关的正方形的大小。我们还借此机会计算将显示在左上角的小正方形的大小。

然后,必须在表的每个单元格上迭代允许存储网格。对于每个单元格,如果单元格的值为0和蓝色,我们将绘制一个充满颜色黄色的矩形。

在方法的末尾,我们通过调用FlippingBitsGame对象的Issolved方法来检查游戏是否已解决了该游戏。如果已经解决了游戏,那么我们向用户显示一条消息,告诉他他只需要单击即可生成新游戏。

这为我们提供了绘图板方法的以下代码:

我们仍然必须管理用户单击以翻转列。没什么很困难的,但是我们必须小心地将单击转换为列或行号。

显然,在其他任何事情之前,我们将检查网格尚未解决。如果是这样,则此点击意味着必须生成新集。

然后,我们获得用户单击的坐标。我们检查这些坐标是否在网格之外。如果点击在网格的右侧或左侧,则我们可以将线路翻转。然后,我们在FlippingBitsGame实例上调用Fliprow方法。

如果单击位于网格的顶部或底部,则我们将列进行翻转。然后,我们在FlippingBitsGame实例上调用Flipcol方法。

完成这些操作后,我们必须调用抽签方法再次绘制GUI。

这为我们提供了onclick方法的以下代码:


组装课程

最后,我们必须组装我们的课程才能启动游戏。我们通过从TKINTER的TK对象的TK方法呼叫创建根。我们创建一个将级别设置为5的flippingbitsgui。我们将左鼠标按钮链接到flippingbitsgui对象的OnClick方法。我们通过在tkinter root上调用mainloop方法来启动该应用程序。

这为我们提供了以下游戏的完整代码:


我们的翻转钻头游戏

本教程的最好部分在这里,因为我们可以将翻转位游戏置于行动。

这是等待我们的第一个显示:

Flipping Bits Game Initial

唯一要做的就是找到解决方案。单击几下后,或多或少地根据您的逻辑推理感(:P),您将获得以下已解决的网格:

Flipping Bits Game Solved


在YouTube上观看本教程