Python——俄罗斯方块

[复制链接]
发表于 2026-1-23 05:29:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
俄罗斯方块游戏是一款经典的益智游戏,通常利用编程语言Python来实现。下面是一个简单的俄罗斯方块游戏的示例代码:
  1. import pygame
  2. import random
  3. # 定义颜色
  4. BLACK = (0, 0, 0)
  5. WHITE = (255, 255, 255)
  6. RED = (255, 0, 0)
  7. GREEN = (0, 255, 0)
  8. BLUE = (0, 0, 255)
  9. CYAN = (0, 255, 255)
  10. MAGENTA = (255, 0, 255)
  11. YELLOW = (255, 255, 0)
  12. ORANGE = (255, 165, 0)
  13. # 定义方块的形状
  14. SHAPES = [
  15.     [[1, 1, 1, 1]],
  16.     [[1, 1], [1, 1]],
  17.     [[1, 1, 0], [0, 1, 1]],
  18.     [[0, 1, 1], [1, 1, 0]],
  19.     [[1, 0, 0], [1, 1, 1]],
  20.     [[0, 0, 1], [1, 1, 1]],
  21.     [[1, 1, 1], [0, 1, 0]]
  22. ]
  23. # 初始化游戏
  24. pygame.init()
  25. # 设置屏幕宽高
  26. SCREEN_WIDTH = 800
  27. SCREEN_HEIGHT = 600
  28. screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
  29. pygame.display.set_caption("俄罗斯方块")
  30. # 定义方块的大小和间隙
  31. block_size = 30
  32. block_gap = 2
  33. # 初始化方块的位置
  34. x_pos = 3
  35. y_pos = 0
  36. # 初始化方块的形状
  37. shape = random.choice(SHAPES)
  38. # 初始化方块的颜色
  39. color = random.choice([RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW, ORANGE])
  40. # 设置游戏时钟
  41. clock = pygame.time.Clock()
  42. # 判断方块是否可以移动
  43. def can_move(x_offset, y_offset):
  44.     for i in range(len(shape)):
  45.         for j in range(len(shape[i])):
  46.             if shape[i][j]:
  47.                 x = x_pos + j + x_offset
  48.                 y = y_pos + i + y_offset
  49.                 if (x < 0 or x >= SCREEN_WIDTH // (block_size + block_gap) or
  50.                     y >= SCREEN_HEIGHT // (block_size + block_gap) or
  51.                     grid[y][x]):
  52.                     return False
  53.     return True
  54. # 绘制方块
  55. def draw_block(x, y, color):
  56.     pygame.draw.rect(screen, color, [(block_size + block_gap) * x,
  57.                                      (block_size + block_gap) * y,
  58.                                      block_size,
  59.                                      block_size])
  60. # 绘制网格
  61. def draw_grid(grid):
  62.     for i in range(len(grid)):
  63.         for j in range(len(grid[i])):
  64.             if grid[i][j]:
  65.                 draw_block(j, i, grid[i][j])
  66. # 更新网格
  67. def update_grid(x_offset, y_offset):
  68.     global x_pos, y_pos
  69.     x_pos += x_offset
  70.     y_pos += y_offset
  71.     for i in range(len(shape)):
  72.         for j in range(len(shape[i])):
  73.             if shape[i][j]:
  74.                 x = x_pos + j
  75.                 y = y_pos + i
  76.                 if y >= 0:
  77.                     grid[y][x] = color
  78. # 消除行
  79. def clear_rows():
  80.     full_rows = []
  81.     for i in range(len(grid)):
  82.         if all(grid[i]):
  83.             full_rows.append(i)
  84.     for row in full_rows:
  85.         del grid[row]
  86.         grid.insert(0, [BLACK] * (SCREEN_WIDTH // (block_size + block_gap)))
  87. # 初始化网格
  88. grid = [[BLACK] * (SCREEN_WIDTH // (block_size + block_gap))
  89.         for _ in range(SCREEN_HEIGHT // (block_size + block_gap))]
  90. # 游戏主循环
  91. running = True
  92. while running:
  93.     for event in pygame.event.get():
  94.         if event.type == pygame.QUIT:
  95.             running = False
  96.         elif event.type == pygame.KEYDOWN:
  97.             if event.key == pygame.K_LEFT and can_move(-1, 0):
  98.                 update_grid(-1, 0)
  99.             elif event.key == pygame.K_RIGHT and can_move(1, 0):
  100.                 update_grid(1, 0)
  101.             elif event.key == pygame.K_DOWN and can_move(0, 1):
  102.                 update_grid(0, 1)
  103.             elif event.key == pygame.K_SPACE:
  104.                 rot_shape = list(zip(*reversed(shape)))
  105.                 if can_move(0, 0):
  106.                     shape = rot_shape
  107.                 elif can_move(-1, 0):
  108.                     update_grid(-1, 0)
  109.                     shape = rot_shape
  110.                 elif can_move(1, 0):
  111.                     update_grid(1, 0)
  112.                     shape = rot_shape
  113.     if can_move(0, 1):
  114.         update_grid(0, 1)
  115.     else:
  116.         clear_rows()
  117.         x_pos = 3
  118.         y_pos = 0
  119.         shape = random.choice(SHAPES)
  120.         color = random.choice([RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW, ORANGE])
  121.         if not can_move(0, 1):
  122.             running = False
  123.     # 绘制背景
  124.     screen.fill(BLACK)
  125.     # 绘制方块
  126.     for i in range(len(shape)):
  127.         for j in range(len(shape[i])):
  128.             if shape[i][j]:
  129.                 draw_block(x_pos + j, y_pos + i, color)
  130.     # 绘制网格
  131.     draw_grid(grid)
  132.     # 设置帧率
  133.     clock.tick(5)
  134.     # 更新屏幕
  135.     pygame.display.flip()
  136. # 退出游戏
  137. pygame.quit()
复制代码
这段代码利用了Pygame库来实现游戏的图形界面,通过键盘控制方块的移动和旋转。游戏循环不绝更新方块的位置和网格状态,并绘制在屏幕上。在方块到达底部或无法继承移动时,判定是否有满行,并打扫满行的方块。游戏会根据方块的状态和移动情况不绝更新,直到无法继承着落为止,游戏竣事。
请留意,这只是一个简单的示例,大概另有一些功能和优化方面的改进。您可以根据本身的需求举行修改和扩展。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表