Declaração de direitos autorais: a originalidade não é fácil, o plágio e a reimpressão são proibidos neste artigo e a violação deve ser investigada!
Índice
1. Ambiente de Desenvolvimento e Análise de Requisitos
Ambiente de desenvolvimento: python3.6.4
Biblioteca de terceiros: pygame1.9.6
Ambiente de desenvolvimento integrado: PyCharm/Sublime Text
- Usando pygame para desenvolver jogos Tetris, a interface do jogo é fornecida à esquerda e a interface de exibição é fornecida à direita, incluindo a pontuação do jogo, a velocidade do cubo e a forma do próximo cubo
- Realize ações interativas, como rotação, encaixe e eliminação de sprites de cubo de jogo
- Use matrizes bidimensionais para criar 7 tipos diferentes de cubos de jogo e você pode alterar a forma dos cubos ajustando os parâmetros da matriz
- Forneça linhas de grade para tornar o sprite de bloco mais intuitivo e claro
2. Módulos funcionais
inicialização do jogo
SIZE = 30 # 每个小方格大小
BLOCK_HEIGHT = 25 # 游戏区高度
BLOCK_WIDTH = 10 # 游戏区宽度
BORDER_WIDTH = 4 # 游戏区边框宽度
BORDER_COLOR = (40, 40, 200) # 游戏区边框颜色
SCREEN_WIDTH = SIZE * (BLOCK_WIDTH + 5) # 游戏屏幕的宽
SCREEN_HEIGHT = SIZE * BLOCK_HEIGHT # 游戏屏幕的高
BG_COLOR = (40, 40, 60) # 背景色
BLOCK_COLOR = (20, 128, 200) #
BLACK = (0, 0, 0)
RED = (200, 30, 30) # GAME OVER 的字体颜色
def main():
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('俄罗斯方块')
definição de bloco
# S形方块
S_BLOCK = [Block(['.OO',
'OO.',
'...'], Point(0, 0), Point(2, 1), 'S', 1),
Block(['O..',
'OO.',
'.O.'], Point(0, 0), Point(1, 2), 'S', 0)]
# Z形方块
Z_BLOCK = [Block(['OO.',
'.OO',
'...'], Point(0, 0), Point(2, 1), 'Z', 1),
Block(['.O.',
'OO.',
'O..'], Point(0, 0), Point(1, 2), 'Z', 0)]
Determine se ele pode girar, cair e se mover
def _judge(pos_x, pos_y, block):
nonlocal game_area
for _i in range(block.start_pos.Y, block.end_pos.Y + 1):
if pos_y + block.end_pos.Y >= BLOCK_HEIGHT:
return False
for _j in range(block.start_pos.X, block.end_pos.X + 1):
if pos_y + _i >= 0 and block.template[_i][_j] != '.' and game_area[pos_y + _i][pos_x + _j] != '.':
return False
return True
doca de bloco
def _dock():
nonlocal cur_block, next_block, game_area, cur_pos_x, cur_pos_y, game_over, score, speed
for _i in range(cur_block.start_pos.Y, cur_block.end_pos.Y + 1):
for _j in range(cur_block.start_pos.X, cur_block.end_pos.X + 1):
if cur_block.template[_i][_j] != '.':
game_area[cur_pos_y + _i][cur_pos_x + _j] = '0'
if cur_pos_y + cur_block.start_pos.Y <= 0:
game_over = True
else:
# 计算消除
remove_idxs = []
for _i in range(cur_block.start_pos.Y, cur_block.end_pos.Y + 1):
if all(_x == '0' for _x in game_area[cur_pos_y + _i]):
remove_idxs.append(cur_pos_y + _i)
Linhas de grade
def _draw_gridlines(screen):
# 画网格线 竖线
for x in range(BLOCK_WIDTH):
pygame.draw.line(screen, BLACK, (x * SIZE, 0), (x * SIZE, SCREEN_HEIGHT), 1)
# 画网格线 横线
for y in range(BLOCK_HEIGHT):
pygame.draw.line(screen, BLACK, (0, y * SIZE), (BLOCK_WIDTH * SIZE, y * SIZE), 1)
Fração
def _draw_info(screen, font, pos_x, font_height, score):
print_text(screen, font, pos_x, 10, f'得分: ')
print_text(screen, font, pos_x, 10 + font_height + 6, f'{
score}')
print_text(screen, font, pos_x, 20 + (font_height + 6) * 2, f'速度: ')
print_text(screen, font, pos_x, 20 + (font_height + 6) * 3, f'{
score // 10000}')
print_text(screen, font, pos_x, 30 + (font_height + 6) * 4, f'下一个:')
tela do jogo
3. Vídeo do jogo
Clique em mim para assistir ao vídeo , há uma surpresa na parte inferior!
4. Download do código-fonte
download do código-fonte de desenvolvimento de jogos pygame:
- Siga minha conta pública original do WeChat : " Xiaohong Xingkong Technology ", responda " Tetris " para obter o código-fonte
5. Informações do autor
Autor: Xiaohong's Fishing Daily, Objetivo: Tornar a programação mais interessante!
Conta pública original do WeChat: " Xiaohong Xingkong Technology ", com foco em algoritmos, rastreadores, sites, desenvolvimento de jogos, análise de dados, processamento de linguagem natural, IA, etc., aguardando sua atenção, vamos crescer e codificar juntos!
Nota de direitos autorais: este artigo proíbe plágio e reimpressão, e a violação deve ser investigada!