共计 1482 个字符,预计需要花费 4 分钟才能阅读完成。
系列文章入口
《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, 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
正文完