俄罗斯方块代码示例:Python实现经典游戏
俄罗斯方块是一种经典的游戏,下面是一个简单的俄罗斯方块的代码示例:\n\npython\nimport pygame\nimport random\n\n# 游戏窗口的大小\nWINDOW_WIDTH = 800\nWINDOW_HEIGHT = 600\n\n# 方块的大小和颜色\nBLOCK_SIZE = 30\nWHITE = (255, 255, 255)\nBLACK = (0, 0, 0)\nRED = (255, 0, 0)\nGREEN = (0, 255, 0)\nBLUE = (0, 0, 255)\nYELLOW = (255, 255, 0)\nCYAN = (0, 255, 255)\nMAGENTA = (255, 0, 255)\nORANGE = (255, 165, 0)\n\n# 方块的形状\nSHAPES = [\n [[1, 1, 1, 1]], # I\n [[1, 1], [1, 1]], # O\n [[1, 1, 1], [0, 1, 0]], # T\n [[1, 1, 0], [0, 1, 1]], # Z\n [[0, 1, 1], [1, 1, 0]], # S\n [[1, 1, 1], [0, 0, 1]], # J\n [[1, 1, 1], [1, 0, 0]] # L\n]\n\n\ndef draw_block(x, y, color):\n pygame.draw.rect(screen, color, (x, y, BLOCK_SIZE, BLOCK_SIZE))\n\n\ndef draw_board(board):\n for row in range(len(board)):\n for col in range(len(board[row])):\n if board[row][col] != 0:\n draw_block(col * BLOCK_SIZE, row * BLOCK_SIZE, block_colors[board[row][col]])\n\n\ndef check_collision(board, shape, x, y):\n for row in range(len(shape)):\n for col in range(len(shape[row])):\n if shape[row][col] != 0 and (y + row >= len(board) or x + col < 0 or x + col >= len(board[row]) or\n board[y + row][x + col] != 0):\n return True\n return False\n\n\ndef rotate_shape(shape):\n return list(zip(*reversed(shape)))\n\n\ndef clear_rows(board):\n full_rows = [row for row in range(len(board)) if all(board[row])]\n for row in full_rows:\n del board[row]\n board.insert(0, [0] * len(board[0]))\n return len(full_rows)\n\n\ndef new_shape():\n shape = random.choice(SHAPES)\n return shape, (WINDOW_WIDTH // 2 - len(shape[0]) // 2, 0)\n\n\ndef game_over():\n global running\n running = False\n\n# 初始化 Pygame\npygame.init()\n\n# 创建游戏窗口\nscreen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))\npygame.display.set_caption("俄罗斯方块")\n\n# 游戏循环\nrunning = True\nclock = pygame.time.Clock()\n\n# 初始化游戏状态\nboard = [[0] * (WINDOW_WIDTH // BLOCK_SIZE) for _ in range(WINDOW_HEIGHT // BLOCK_SIZE)]\nshape, (x, y) = new_shape()\nblock_colors = [BLACK, RED, GREEN, BLUE, YELLOW, CYAN, MAGENTA, ORANGE]\nscore = 0\n\nwhile running:\n # 处理事件\n for event in pygame.event.get():\n if event.type == pygame.QUIT:\n running = False\n elif event.type == pygame.KEYDOWN:\n if event.key == pygame.K_LEFT:\n if not check_collision(board, shape, x - 1, y):\n x -= 1\n elif event.key == pygame.K_RIGHT:\n if not check_collision(board, shape, x + 1, y):\n x += 1\n elif event.key == pygame.K_DOWN:\n if not check_collision(board, shape, x, y + 1):\n y += 1\n elif event.key == pygame.K_UP:\n rotated_shape = rotate_shape(shape)\n if not check_collision(board, rotated_shape, x, y):\n shape = rotated_shape\n\n # 更新游戏状态\n if not check_collision(board, shape, x, y + 1):\n y += 1\n else:\n for row in range(len(shape)):\n for col in range(len(shape[row])):\n if shape[row][col] != 0:\n board[y + row][x + col] = shape[row][col]\n score += clear_rows(board)\n shape, (x, y) = new_shape()\n if check_collision(board, shape, x, y):\n game_over()\n\n # 绘制游戏界面\n screen.fill(WHITE)\n draw_board(board)\n for row in range(len(shape)):\n for col in range(len(shape[row])):\n if shape[row][col] != 0:\n draw_block((x + col) * BLOCK_SIZE, (y + row) * BLOCK_SIZE, block_colors[shape[row][col]])\n pygame.display.flip()\n\n # 控制游戏帧率\n clock.tick(5)\n\n# 退出游戏\npygame.quit()\n\n\n这个代码使用 Pygame 库来创建游戏窗口和处理游戏的绘制、事件等操作。游戏中使用一个二维数组 board 来表示游戏界面,每个元素表示一个方块的颜色。SHAPES 列表定义了所有可能的方块形状。游戏的主循环中,通过处理事件和更新游戏状态来实现游戏逻辑。draw_board 函数用于绘制游戏界面,check_collision 函数用于检查方块和边界/其他方块的碰撞,rotate_shape 函数用于旋转方块,clear_rows 函数用于消除满行并更新得分,new_shape 函数用于生成新的方块。游戏结束时,调用 game_over 函数来结束游戏。
原文地址: https://www.cveoy.top/t/topic/pvpw 著作权归作者所有。请勿转载和采集!