用Python写一个经典的俄罗斯方块
时间: 2023-12-01 08:05:03 浏览: 22
好的,下面是一个简单的经典俄罗斯方块游戏的 Python 代码示例:
```python
import pygame
import random
# 初始化 pygame
pygame.init()
# 定义游戏窗口大小
window_width = 400
window_height = 600
# 定义方块大小
block_size = 20
# 定义游戏界面颜色
bg_color = (255, 255, 255)
# 定义方块颜色
block_color = (0, 0, 0)
# 创建游戏窗口
window = pygame.display.set_mode((window_width, window_height))
# 定义方块形状
shapes = [
[[1, 0], [1, 0], [1, 1]],
[[0, 1], [0, 1], [1, 1]],
[[1, 1], [1, 0], [1, 0]],
[[1, 1], [0, 1], [0, 1]],
[[1, 1, 0], [0, 1, 1]],
[[0, 1, 1], [1, 1, 0]],
[[1, 1, 1, 1]],
]
# 定义方块初始位置
start_x = window_width // 2 - block_size * 2
start_y = 0
# 定义游戏区域
game_area = [[0 for _ in range(window_width // block_size)] for _ in range(window_height // block_size)]
# 定义当前方块及其位置
current_shape = random.choice(shapes)
current_x = start_x
current_y = start_y
# 定义游戏帧率
fps = 30
# 游戏主循环
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.KEYDOWN:
# 方向键控制方块移动
if event.key == pygame.K_LEFT:
if current_x > 0:
current_x -= block_size
elif event.key == pygame.K_RIGHT:
if current_x < window_width - block_size * len(current_shape[0]):
current_x += block_size
elif event.key == pygame.K_DOWN:
if current_y < window_height - block_size * len(current_shape):
current_y += block_size
# 绘制游戏区域
window.fill(bg_color)
for i in range(len(game_area)):
for j in range(len(game_area[i])):
if game_area[i][j] == 1:
pygame.draw.rect(window, block_color, (j * block_size, i * block_size, block_size, block_size))
# 绘制当前方块
for i in range(len(current_shape)):
for j in range(len(current_shape[i])):
if current_shape[i][j] == 1:
pygame.draw.rect(window, block_color, (current_x + j * block_size, current_y + i * block_size, block_size, block_size))
# 方块下落
if current_y < window_height - block_size * len(current_shape):
current_y += block_size
else:
# 将当前方块写入游戏区域
for i in range(len(current_shape)):
for j in range(len(current_shape[i])):
if current_shape[i][j] == 1:
game_area[(current_y + i) // block_size][(current_x + j) // block_size] = 1
# 随机生成下一个方块
current_shape = random.choice(shapes)
current_x = start_x
current_y = start_y
# 消除完整行
for i in range(len(game_area)):
if 0 not in game_area[i]:
game_area.pop(i)
game_area.insert(0, [0 for _ in range(window_width // block_size)])
# 更新显示
pygame.display.update()
# 控制帧率
pygame.time.Clock().tick(fps)
```
这个示例中,我们使用了 Pygame 游戏库来创建游戏窗口和处理事件。在主循环中,我们不断绘制游戏区域、当前方块和处理方块下落、消除完整行等逻辑。