El código fuente de un juego de Tetris simple implementado por Python basado en pensador: 1. Construya la interfaz

Registre las ideas del juego y el proceso del minijuego Tetris

1. Construya la interfaz

**Objetivo:** Construir una interfaz básica y mostrar 7 formas de Tetris en una posición fija

Construye el formulario básico

Use la biblioteca tkinter para implementar el formulario básico, sin agregar ninguna función, solo las siguientes tres líneas de código

import tkinter as tk
#它可以用来创建一个新的图形界面(GUI)窗口。 tk.Tk() 调用这个函数并创建一个新的Tkinter窗口,可以用来添加其他gui组件,如按钮,文本框,标签等
windows = tk.Tk()

#mainloop()函数是python中tkinter模块的主要方法,它将一个python程序作为GUI应用程序运行,该函数可以让你的程序在循环中保持运行,以便捕获用户的输入事件和重绘GUI。
windows.mainloop()

El resultado de la operación es el siguiente:

imagen-20230207175943785

Paso 1: crea el tamaño de la mesa de trabajo

A continuación, debemos agregar un contenedor de lienzo en forma de "mantener" Tetris, es decir, dejar que este lienzo se use como panel, y el movimiento y el dibujo de Tetris se realizan en este lienzo.

#定义一些参数:
#画板的行数:R=20
#画板的列数:C=12
#俄罗斯方块的大小cell_size=30
#俄罗斯方块的高度:Height=cell_size*C
#俄罗斯方块的宽度:Width=cell_size*R
R=20
C=12
cell_size=30
height=cell_size*R
width=cell_size*C

#创建画板
canvas = tk.Canvas(windows, width=width, height=height)

# pack()是一个tkinter模块中的函数,它可以自动调整画布大小来适应其中包含的元素。
canvas.pack()
windows.mainloop()

El resultado de la operación es el siguiente:

imagen-20230207181848273

Paso 2: Dibujar en el lienzo

Ahora podemos dibujar en la mesa de trabajo, el siguiente paso es dibujar Tetris en ella

Hay dos pasos aquí:

Paso 1: Dibujar un cuadrado

Paso 2: Dibuja todos los cuadrados

#画出一个方块
def draw_cell_by_cr(canvas, c, r, color="#CCCCCC"):
    """
    :param canvas:画板,用于绘制一个方块的Canvas对象
    :param c:方块的列数
    :param r:方块的行数
    :color:方块的颜色
    :return
    """
    x0 = c * cell_size
    y0 = r * cell_size
    x1 = c * cell_size + cell_size
    y1 = r * cell_size + cell_size
    # 用于在Canvas上绘制矩形。参数x0,y0,x1,y1是矩形的左上角和右下角的坐标;fill=color设置矩形的填充颜色;outline="white"设置矩形轮廓的颜色;width=2设置矩形边框的粗细。。
     canvas.create_rectangle(x0, y0, x1, y1, fill=color, outline="white",width=2)
        
#画出所有的方块
#通过两层for循环遍历出画板所有方块
def draw_blank_board(canvas):
    for ri in range(R):
        for ci in range(C):
            draw_cell_by_cr(canvas, ci, ri)

El efecto de ejecución es el siguiente:

imagen-20230207192010371

dibujar tetris

Hay 7 formas de Tetris

Paso 1: Dibuja un Tetris en forma de o

Comience con el Tetris en forma de O más simple (es decir, mate, como se muestra a continuación)

imagen

如何确定田字格的位置?

Proceso de análisis:

田字型方块Consta de cuatro 格子, si se determinan 4 cuadrículas 坐标, entonces se puede determinar la posición del cuadrado mate

solución:

Tome las coordenadas de la esquina inferior izquierda de las 4 cuadrículas para representar las coordenadas de la cuadrícula

Las esquinas inferiores izquierdas de las cuatro cuadrículas son:方块一(-1,0)、方块二(0,0)、方块三(0,-1)、方块四(-1,-1)

Tomando el punto medio de las alfombras como origen, las coordenadas de las cuatro cuadrículas de las alfombras Tetris se muestran en la figura a continuación.

imagen-20230208104806192

Documentado con listas y tuplas como

[
    (-1, -1), 
    (0, -1), 
    (-1, 0), 
    (0, 0)
]

Almacenamos la relación de mapeo entre la cadena de forma de Tetris y la lista de coordenadas en el diccionario SHAPES (la relación de mapeo se puede entender aquí como una relación de uno a uno),

Al mismo tiempo, se establece un diccionario SHAPESCOLOR para registrar la correspondencia uno a uno entre las cadenas de formas y los colores de Tetris.

Dado que una forma se puede ver como compuesta de múltiples cuadrados, podemos crear una nueva función dibujar_celdas para dibujar esta forma

Finalmente elige un lugar para dibujar esta forma.

# 定义形状
SHAPES = {
    
    
    "O": [(-1, -1), (0, -1), (-1, 0), (0, 0)],
}

# 定义形状的颜色
SHAPESCOLOR = {
    
    
    "O": "blue",
}

#该函数的作用是在给定的画布上绘制特定数量的单元格,单元格列表指定了单元格的位置,而颜色指定了单元格的颜色
def draw_cells(canvas, c, r, cell_list, color="#CCCCCC"):
    """
    绘制指定形状指定颜色的俄罗斯方块
    :param canvas: 画板
    :param r: 该形状设定的原点所在的行
    :param c: 该形状设定的原点所在的列
    :param cell_list: 该形状各个方格相对自身所处位置
    :param color: 该形状颜色
    :return:
    """
    for cell in cell_list:
        cell_c, cell_r = cell
        ci = cell_c + c
        ri = cell_r + r
        # 判断该位置方格在画板内部(画板外部的方格不再绘制)
        if 0 <= c < C and 0 <= r < R:
            draw_cell_by_cr(canvas, ci, ri, color)

# 下面这行代码放在draw_blank_board(canvas) 下面
# 任取一个位置,如(3,3)绘制一个o型俄罗斯方块,用于展示
draw_cells(canvas, 3, 3, SHAPES['O'], SHAPESCOLOR['O'])

El resultado de la operación es el siguiente:

imagen-20230208111818050

Paso 2: Dibuja otros cuadrados de forma

Hay siete tipos principales de Tetris, a excepción del tipo O anterior, los otros seis Tetris se muestran en la figura

imagen

En consecuencia, para agregar las coordenadas y colores de otros cuadrados en SHAPES y SHAPESCOLOR, la suma es la siguiente

# 定义各种形状
SHAPES = {
    
    
    "O": [(-1, -1), (0, -1), (-1, 0), (0, 0)],
    "S": [(-1, 0), (0, 0), (0, -1), (1, -1)],
    "T": [(-1, 0), (0, 0), (0, -1), (1, 0)],
    "I": [(0, 1), (0, 0), (0, -1), (0, -2)],
    "L": [(-1, 0), (0, 0), (-1, -1), (-1, -2)],
    "J": [(-1, 0), (0, 0), (0, -1), (0, -2)],
    "Z": [(-1, -1), (0, -1), (0, 0), (1, 0)],
}

# 定义各种形状的颜色
SHAPESCOLOR = {
    
    
    "O": "blue",
    "S": "red",
    "T": "yellow",
    "I": "green",
    "L": "purple",
    "J": "orange",
    "Z": "Cyan",
}

Cambie el código donde se dibujó el Tetris en forma de O original por el siguiente código para dibujar estos siete tipos de Tetris

draw_cells(canvas, 3, 3, SHAPES['O'], SHAPESCOLOR['O'])
draw_cells(canvas, 3, 8, SHAPES['S'], SHAPESCOLOR['S'])
draw_cells(canvas, 3, 13, SHAPES['T'], SHAPESCOLOR['T'])
draw_cells(canvas, 8, 3, SHAPES['I'], SHAPESCOLOR['I'])
draw_cells(canvas, 8, 8, SHAPES['L'], SHAPESCOLOR['L'])
draw_cells(canvas, 8, 13, SHAPES['J'], SHAPESCOLOR['J'])
draw_cells(canvas, 5, 18, SHAPES['Z'], SHAPESCOLOR['Z'])

El resultado de la operación es el siguiente:

imagen-20230208112226225Dirección de descarga del código completo: el código fuente de un juego de Tetris simple implementado por Python basado en pensador

Supongo que te gusta

Origin blog.csdn.net/2301_76484015/article/details/129022783#comments_26791207
Recomendado
Clasificación