系列文章入口

《Python3编程实战Tetris机器人》

方块挪动

为了不便,设计了相对定位函数,变相对运动形式为相对定位。

方块相对定位函数

咱们Block类中,对blog的挪动应用的是tkinter.move函数,该函数提供的是绝对间隔形式,咱们须要计算出位移差。该办法相当于把绝对间隔挪动形式,变成了方块的相对定位函数,所有挪动操作都应用这个函数。

def relocate(self, x, y):    for block in self.objs:        # 遍历方块的block        block.relocate(x - self.x, y - self.y)    # 挪动操作    self.x = x    self.y = y

方块左移

def moveLeft(self):    if self.canPlace(self.x - 1, self.y):    # 判断是否能左移        self.relocate(self.x - 1, self.y)    # 挪动        return True    else:        return False

方块右移

def moveRight(self):    if self.canPlace(self.x - 1, self.y):    # 判断是否能右移        self.relocate(self.x + 1, self.y)    # 挪动        return True    else:        return False

方块下移

方块下移,须要判断是否曾经到底,到底后,方块地位将固定下来。

def moveDown(self):    if self.canPlace(self.x, self.y + 1):     # 判断是否能下移        self.relocate(self.x, self.y + 1)     # 下移        return True    else:                                     # 曾经到底        for i in range(TETRISDIMENSION):            for j in range(TETRISDIMENSION):                if self.data[i][j]:           # 固定方块,改游戏空间格局                    GameRoom[self.y + i][self.x + j] = 1        return False

方块旋转

方块旋转,本质上是矩形的旋转,咱们设定按一次方向上键,方块进行一次顺时针90度旋转。

算法原理

如图,按下标对矩阵进行轮换即可。正规的矩阵旋转算法是先替换行再转置。咱们要管制方块间断顺时针旋转,因为初始状态固定,只有记住旋转次数就能晓得方块的实时状态,所以抉择轮换算法。

算法公式

                   ai,j  -------------> aj,N-i+1                     ↑                    ↓                     ↑                    ↓                   aN-j+1 -------------> aN-i+1,N-j+1

算法实现

def rotate(self):    for i in range(TETRISDIMENSION // 2):        lenJ = TETRISDIMENSION - i - 1                 # 减少变量,简化下标        for j in range(i, lenJ):            lenI = TETRISDIMENSION - j - 1            t = self.data[i][j]            self.data[i][j] = self.data[lenI][i]        # 按公式轮换            self.data[lenI][i] = self.data[lenJ][lenI]            self.data[lenJ][lenI] = self.data[j][lenJ]            self.data[j][lenJ] = t    self.rotateCount += 1                               # 旋转次数记录    self.redraw()                                       # 重绘

我的项目地址

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

运行办法

1. install python3, git2. git clone https://gitee.com/zhoutk/ptetris (or download and unzip source code)3. cd ptetris4. python3 tetrisThis project surpport windows, linux, macOson linux, you must install tkinter first, use this command:  sudo apt install python3-tk

相干我的项目

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

https://gitee.com/zhoutk/qtetris