系列文章入口

《Python3编程实战Tetris机器人》

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, 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

zhoutk
2.6k 声望1.2k 粉丝

自由程序员,技术路线c,delphi,c++,c#,java,php,node.js,python,golang,typescript;超喜欢react.js的设计思路,全栈开发成为我的终极目标。开发机器macbook pro,或装ubuntu、fedora的机器,编程用vim...