系列文章入口

《Python3编程实战》

block类

在屏幕上绘制小方块,以及方块的挪动与革除。依据tkinter库的函数特点,抉择canvas.create_rectangle进行方块绘制,canvas.move挪动方块,canvas.delete革除方块。画布操作函数只应用了上述三个。

设计思路

tkinter库提供的函数是组件式的,不是画一个图形,而是生成一个图元对象。能够取得这个图元的“句柄”,而后对其进行挪动,删除。因为block类设计为结构、定位和革除三个办法,就足够实现咱们的Tetris游戏。

相干常数

TETRISDIMENSION = 4                     # Tetris方块维度BLOCKSIDEWIDTH = 30                     # 最小方块边长设定HALFBLOCKWIDTH = BLOCKSIDEWIDTH // 2    # 最小方块边长一半CANVASOFFSET = 4                        # 绘制偏移量,与游戏边框的间隔TETRISCOLORS = (                        # Tetris方块的色彩设定    "red",    "magenta",    "darkMagenta",    "gray",    "darkGreen",    "darkCyan",    "darkBlue")

具体实现

构造函数

def __init__(self, canvas, x, y, color = "red") -> None:    self.canvas = canvas                            # 所在画布,gameCanvas or nextCanvas    self.x = x                                      # 横会标地位,游戏空间地位,x > 0 and x < 11    self.y = y                                      # 纵会标地位,游戏空间地位,y > 0 and y < 21    self.obj = canvas.create_rectangle((x - 1) * \  # 绘制小正方形,并存储,供革除用        BLOCKSIDEWIDTH + CANVASOFFSET, (y - 1) * \  # 游戏坐标与空间坐标对应,起始点        BLOCKSIDEWIDTH + CANVASOFFSET, \        x * BLOCKSIDEWIDTH + CANVASOFFSET, \        # 完结点        y * BLOCKSIDEWIDTH + CANVASOFFSET, \        fill = color, outline = "yellow")           # 填充色彩与边框色彩

挪动函数

def relocate(self, detaX, detaY):     # 参数为挪动间隔差   self.canvas.move(self.obj, \       # 挪动到新地位       detaX * BLOCKSIDEWIDTH, \       detaY * BLOCKSIDEWIDTH)   self.x += detaX                    # 存储新的地位坐标   self.y += detaY

革除函数

Tetris中组合了block,屏幕上的革除由block本人实现。

def clean(self):    self.canvas.delete(self.obj)

``

我的项目地址

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