系列文章入口
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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。