提出了一个教程,向您展示了如何开发一个程序以在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方法来启动该应用程序。
这为我们提供了以下游戏的完整代码:
我们的翻转钻头游戏
本教程的最好部分在这里,因为我们可以将翻转位游戏置于行动。
这是等待我们的第一个显示:
唯一要做的就是找到解决方案。单击几下后,或多或少地根据您的逻辑推理感(:P),您将获得以下已解决的网格:
在YouTube上观看本教程