Python3编程实战Tetris机器人(ORM)

2021-07-05
阅读 3 分钟
1.7k
我们通用的ORM,基本模式都是想要脱离数据库的,几乎都在编程语言层面建立模型,由程序去与数据库打交道。虽然脱离了数据库的具体操作,但我们要建立各种模型文档,用代码去写表之间的关系等等操作,让初学者一时如坠云雾。我的做法是把逻辑加入到Python的字典中,程序将对象自动映射成为标准的SQL查询语句。只要我们理...

Python3编程实战Tetris机器人(数据库操作)

2021-07-02
阅读 5 分钟
1.8k
将用户手动玩和AI自动玩游戏的历史记录下来,存入数据库,供后面进行分析。为了不依赖某个特定的数据系统,设计了一个通用数据库操作接口,以方便在应用层面切换不同的数据库。

Python3编程实战Tetris机器人(游戏暂停)

2021-06-24
阅读 2 分钟
1.8k
游戏暂停功能比较简单,主要是控制gameRunningStatus变量的值与界面的控制统一起来,游戏暂停了,键盘的响应也要停止。另,gameRunningStatus变量的改变也不能直接操作,需生成一个暂停命令单元,送入队列中,由工作任务线程去处理。

Python3编程实战Tetris机器人(多线程问题)

2021-06-22
阅读 3 分钟
1.6k
首先想到的是加锁,游戏逻辑很简单,加锁应该很容易解决问题。但不管我粗粒度加,还是尽量细粒度加,最后都会死锁。最后进行打印,发现程序停在了tkinter.Canvas.move处,个人认为这是tkinter的bug。 此路不通,换个思路。开一个工作线程,来完成所有的操作,主线程与定时器操作,都只是往工作线程中提交任务。也就是只...

Python3编程实战Tetris机器人(game类)

2021-06-21
阅读 5 分钟
2.2k
游戏逻辑控制类,是界面与Tetris类之间的粘合者,接受界面的鼠标及键盘事件,操作Tetris类,实现游戏逻辑。单个方块的操作,在Tetris中已经实现,game类主要是实现消行算法、新方块的产生、游戏速度控制等。

Python3编程实战Tetris机器人(移动与旋转)

2021-06-20
阅读 3 分钟
2.2k
我们Block类中,对blog的移动使用的是tkinter.move函数,该函数提供的是相对距离方式,我们需要计算出位移差。该方法相当于把相对距离移动方式,变成了方块的绝对定位函数,所有移动操作都使用这个函数。

Python3编程实战Tetris机器人(Tetris类)

2021-06-19
阅读 3 分钟
2.2k
组合Block类,实现俄罗斯方块的绘制及移动、旋转等所有操作。这是Tetris游戏的业务核心,第一步先实现手动玩的需求,以后AI自动玩时,还会改造这个类。在所有的逻辑里面,特别注意旋转(rotate)操作,后面解决的不少的bug被证明都是由于rotate操作考虑不全面所引起的。

Python3编程实战Tetris机器人(block类)

2021-06-09
阅读 2 分钟
1.8k
在屏幕上绘制小方块,以及方块的移动与清除。根据tkinter库的函数特点,选择canvas.create_rectangle进行方块绘制,canvas.move移动方块,canvas.delete清除方块。画布操作函数只使用了上述三个。

Python3编程实战Tetris机器人(界面设计)

2021-06-08
阅读 3 分钟
2k
本项目注重算法实现,为了安装简单且具有强跨平台性,所以选择python内置的tkinter。这个界面库是有些问题,比如后面发现其与线程锁配合有问题,会莫名死掉。项目中的lockbug分支,我已经把问题定位了,进行了一系列的日志输出,有兴趣的同学可以去研究一下具体问题。这个问题可以避开,本项目使用的界面特性很少,我的...

Python3编程实战Tetris机器人(项目结构)

2021-06-04
阅读 3 分钟
2.1k
系列文章入口《Python3编程实战Tetris机器人》项目结构项目的结构如下,以目录形式的模块包来组织代码,同时支持以目录或包来执行,两种方式具有统一入口。 {代码...} 实现细节我们的程序位于tetris目录(包)中,可以作为一个文件夹来执行: {代码...} 也可以作为一个包(Package)来执行: {代码...} __init__.py若要 ...

Python3编程实战Tetris机器人(序)

2021-06-04
阅读 1 分钟
3k
本系列文章,使用Python3一步步记录Tetris游戏的编写全过程,游戏功能包括手动游戏、游戏回放(数据库操作)、自动游戏(AI机器人)、强化学习、优化AI机器人。已经完成C++版本,Qt5之QGraphicsItem编写Tetris俄罗斯方块游戏。