一、引入所需的包
import os
import pygame
import sys
import random
import pygame.font
import time
二、初始化
都是一些基本的操作,不赘述。不清楚的看注释及查文档。
pygame.init()
cols = 10 #游戏网格列数,可以调整,不要太小
rows = 20 #游戏网格行数,可以调整
cell_size = 38 #一个网格的大小
block_size = cell_size - 1 #一个方块的大小,小于等于cell_size,即要有边距
block_edge = int(block_size /2) #方块的立体感,数字>=1,数字越小立体感越强
fps = 38 #每秒帧数,建议范围20-60
win_width = cols * cell_size #主屏宽度
win_hight = rows * cell_size #主屏高度
#设置pygame窗口居中,注意值的设置方式。必须在pg.display.set_mode前面调用
os.environ['SDL_VIDEO_CENTERED'] = '1'
#或 设置pygame窗口的位置(左上角),格式为"x, y"。必须在pg.display.set_mode前面调用
# os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (380,38)
screen = pygame.display.set_mode((win_width, win_hight))
pygame.display.set_caption("我的俄罗斯方块") #设置标题
三、定义block
一共有7种类型:条型,田字型,T型,L型,J型,S型,Z型,所有的类型都由4个小方块组成,都是最终在一个4*4的方格中。按惯例,左上角定义为(0,0),就可以知道其中每个小网格的相对坐标,移动时就是移动这些个坐标了,旋转时也是依赖这些坐标,形成了一个标准结构:(以下以T型为例子说明)
最终定义完成一个完整的blocks字典结构
blocks = {
1: [[(0,1),(1,1),(2,1),(3,1)],
[(2,0),(2,1),(2,2),(2,3)]], #条型
2: [[(1,1),(2,1),(1,2),(2,2)]], #田字型
3: [[(0,1),(1,1),(2,1),(1,2)],
[(1,0),(0,1),(1,1),(1,2)],
[(1,1),(0,2),(1,2),(2,2)],
[(1,0),(1,1),(2,1),(1,2)]], #T型
4: [[(0,1),(1,1),(2,1),(0,2)],
[(0,0),(1,0),(1,1),(1,2)],
[(2,1),(0,2),(1,2),(2,2)],
[(1,0),(1,1),(1,2),(2,2)]], #L型
5: [[(0,1),(1,1),(2,1),(2,2)],
[(1,0),(1,1),(0,2),(1,2)],
[(0,1),(0,2),(1,2),(2,2)],
[(1,0),(2,0),(1,1),(1,2)]], #J型
6: [[(1,1),(2,1),(0,2),(1,2)],
[(0,0),(0,1),(1,1),(1,2)]], #S型
7: [[(0,1),(1,1),(1,2),(2,2)],
[(2,0),(1,1),(2,1),(1,2)]],} #Z型
四、定义颜色
为简单起见,只定义了网格底色和7种方块对应的颜色。
app_colors = [(138,200,198),(200,50,50),(50,200,200),(50,50,200),(200,200,50),(200,50,200),(50,200,50),(125,50,125)]