关于python3.x:Python3编程实战Tetris机器人游戏暂停

42次阅读

共计 1452 个字符,预计需要花费 4 分钟才能阅读完成。

系列文章入口

《Python3 编程实战 Tetris 机器人》

设计思路

游戏暂停性能比较简单,次要是管制 gameRunningStatus 变量的值与界面的管制对立起来,游戏暂停了,键盘的响应也要进行。另,gameRunningStatus 变量的扭转也不能间接操作,需生成一个暂停命令单元,送入队列中,由工作工作线程去解决。

具体实现

界面管制

开始按钮会在“Start”、“Rause”和“Resume”之间切换。

def btnStartClicked(self):
    if self.game.getGameRunningStatus() == 0:      # 点击时游戏处于未开始状态
        self.btnStartVar.set("Pause")
        self.game.start()
    elif self.game.getGameRunningStatus() == 1:    # 点击时游戏处于游戏中
        self.btnStartVar.set("Resume")
        self.game.pause()
    elif self.game.getGameRunningStatus() == 5:    # 点击时游戏处于暂停状态
        self.btnStartVar.set("Pause")
        self.game.resume()
    self.gameCanvas.focus_set()                    # 设置游戏空间为以后流动控件 

游戏完结时,复原初始状态

self.app.setStartButtonText("Start")

暂停操作

def pause(self):
    opQueue.put(("pause",5))

复原操作

游戏处于暂停中,所以间接批改变量值,没有设计命令单元了。

def resume(self):
    self.gameRunningStatus = 1     
    self.canvas.after(self.gameSpeedInterval * (0 if self.isAutoRunning else 1), self.tickoff)

每一个工作单元都是一个二元元组(不便数据解构),第一个是字符串,为命令;第二个是元组,是数据包(也按不便解构的形式去设计),由每个命令自行定义。

工作线程减少暂停解决

...
elif cmd == "pause":
    self.gameRunningStatus = data
...

键盘响应革新

def processKeyboardEvent(self, ke):
    if self.game.getGameRunningStatus() == 1 and self.game.isAutoRunning == 0:
        if ke.keysym == 'Left':
            opQueue.put(('Left',()))
        ...

我的项目地址

https://gitee.com/zhoutk/ptetris
或
https://github.com/zhoutk/ptetris

运行办法

1. install python3, git
2. git clone https://gitee.com/zhoutk/ptetris (or download and unzip source code)
3. cd ptetris
4. python3 tetris

This project surpport windows, linux, macOs

on linux, you must install tkinter first, use this command:  
sudo apt install python3-tk

相干我的项目

曾经实现了 C ++ 版,我的项目地址:

https://gitee.com/zhoutk/qtetris

正文完
 0