下面是一个简单的俄罗斯方块的Python代码:\n\npython\nimport pygame\nimport random\n\npygame.init()\n\n# 设置游戏窗口尺寸\nwin_width, win_height = 800, 600\nwin = pygame.display.set_mode((win_width, win_height))\npygame.display.set_caption("俄罗斯方块")\n\n# 定义方块的大小和颜色\nblock_size = 30\nblock_colors = [(0, 0, 0), (255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255), (192, 192, 192)]\n\n# 定义游戏界面的尺寸\nplay_width, play_height = 10, 20\nplay_area = [[(0,0,0) for _ in range(play_width)] for _ in range(play_height)]\n\n# 定义方块的形状\ntetrominoes = [\n [[1, 1, 1, 1]],\n [[1, 1], [1, 1]],\n [[1, 1, 0], [0, 1, 1]],\n [[0, 1, 1], [1, 1, 0]],\n [[1, 1, 1], [0, 1, 0]],\n [[1, 1, 1], [1, 0, 0]],\n [[1, 1, 1], [0, 0, 1]]\n]\n\n# 初始化方块\ndef create_block():\n index = random.randint(0, len(tetrominoes) - 1)\n block = tetrominoes[index]\n color = block_colors[index + 1]\n return block, color\n\ncurrent_block, current_color = create_block()\ncurrent_x, current_y = play_width // 2 - len(current_block[0]) // 2, 0\n\n# 检查方块是否合法\ndef check_collision(block, x, y):\n for row in range(len(block)):\n for col in range(len(block[row])):\n if block[row][col] and (play_area[y + row][x + col] != (0, 0, 0) or x + col < 0 or x + col >= play_width or y + row >= play_height):\n return True\n return False\n\n# 绘制方块和游戏界面\ndef draw_area():\n for row in range(play_height):\n for col in range(play_width):\n pygame.draw.rect(win, play_area[row][col], (col * block_size, row * block_size, block_size, block_size))\n for row in range(len(current_block)):\n for col in range(len(current_block[row])):\n if current_block[row][col]:\n pygame.draw.rect(win, current_color, ((current_x + col) * block_size, (current_y + row) * block_size, block_size, block_size))\n\n# 方块下落\ndef move_down():\n global current_x, current_y, current_block, current_color\n if not check_collision(current_block, current_x, current_y + 1):\n current_y += 1\n else:\n for row in range(len(current_block)):\n for col in range(len(current_block[row])):\n if current_block[row][col]:\n play_area[current_y + row][current_x + col] = current_color\n current_block, current_color = create_block()\n current_x, current_y = play_width // 2 - len(current_block[0]) // 2, 0\n\n# 方块移动\ndef move(direction):\n global current_x, current_y, current_block\n if direction == "left" and not check_collision(current_block, current_x - 1, current_y):\n current_x -= 1\n elif direction == "right" and not check_collision(current_block, current_x + 1, current_y):\n current_x += 1\n elif direction == "down" and not check_collision(current_block, current_x, current_y + 1):\n current_y += 1\n\n# 方块旋转\ndef rotate():\n global current_block\n new_block = list(zip(*current_block[::-1]))\n if not check_collision(new_block, current_x, current_y):\n current_block = new_block\n\n# 消除满行\ndef clear_rows():\n global play_area\n rows_to_clear = []\n for row in range(play_height):\n if all(play_area[row]):\n rows_to_clear.append(row)\n for row in rows_to_clear:\n play_area.pop(row)\n play_area.insert(0, [(0, 0, 0) for _ in range(play_width)])\n\nclock = pygame.time.Clock()\nrunning = True\nwhile running:\n clock.tick(10) # 控制游戏速度\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 move("left")\n elif event.key == pygame.K_RIGHT:\n move("right")\n elif event.key == pygame.K_DOWN:\n move("down")\n elif event.key == pygame.K_UP:\n rotate()\n\n move_down()\n clear_rows()\n\n win.fill((255, 255, 255))\n draw_area()\n pygame.display.update()\n\npygame.quit()\n\n\n这个代码使用了pygame库来实现游戏窗口的创建和游戏界面的绘制。通过不断地检测用户的按键事件,实现方块的移动和旋转。游戏的主循环中,方块会不断下落,当方块无法继续下落时,会被固定在游戏界面上,并检查是否有满行,然后进行消除。

Python 俄罗斯方块游戏代码示例 - 简单易懂

原文地址: https://www.cveoy.top/t/topic/qBDR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录