Python 实现羊了个羊游戏:消消乐代码解析

本文将带你用 Python 代码实现一个类似羊了个羊的消消乐游戏。我们将使用递归算法来消除相邻相同颜色的羊,并通过列表记录空行进行移动。代码简洁易懂,适合学习 Python 游戏编程入门。

import random

# 定义游戏面板大小
ROWS = 6
COLS = 6

# 定义不同颜色的羊
COLORS = ['red', 'green', 'blue', 'yellow', 'purple', 'orange']

# 初始化游戏面板
board = [[random.choice(COLORS) for j in range(COLS)] for i in range(ROWS)]

# 打印游戏面板
def print_board():
    for row in board:
        print(row)

# 检查某个位置是否为空
def is_empty(row, col):
    return board[row][col] == '-'

# 消除相邻的相同颜色的羊
def eliminate(row, col, color):
    if row < 0 or row >= ROWS or col < 0 or col >= COLS:
        return
    if board[row][col] != color:
        return
    board[row][col] = '-'
    eliminate(row-1, col, color)
    eliminate(row+1, col, color)
    eliminate(row, col-1, color)
    eliminate(row, col+1, color)

# 移动羊
def move():
    for col in range(COLS):
        empty_rows = []
        for row in range(ROWS-1, -1, -1):
            if board[row][col] == '-':
                empty_rows.append(row)
            elif empty_rows:
                new_row = empty_rows.pop(0)
                board[new_row][col] = board[row][col]
                board[row][col] = '-'
                empty_rows.append(row)

# 游戏主循环
while True:
    print_board()
    print('Enter row and column to eliminate (0-5), or q to quit:')
    user_input = input()
    if user_input == 'q':
        break
    try:
        row, col = map(int, user_input.split())
        if is_empty(row, col):
            print('Invalid move.')
        else:
            eliminate(row, col, board[row][col])
            move()
    except:
        print('Invalid input.')

这个程序使用递归来消除相邻的相同颜色的羊,并使用一个列表来记录每列中空的行。在玩家输入行和列以消除羊时,程序将检查输入是否有效,并在移动羊之前消除相邻的相同颜色的羊。游戏将在玩家输入'q'时退出。

代码解释:

  • 游戏面板初始化: board 变量代表游戏面板,每个元素代表一个羊的顏色。
  • 消除羊: eliminate 函数使用递归,将相邻相同颜色的羊设置为 -,表示消除。
  • 移动羊: move 函数遍历每一列,将空行往上移动。
  • 游戏循环: 主循环接受玩家输入,判断输入是否有效,进行消除和移动操作。

扩展:

  • 可以添加计分系统和胜利判定逻辑。
  • 可以根据需要调整游戏面板大小和羊的颜色数量。
  • 可以加入图形界面,让游戏更直观。

希望本文能帮助你理解 Python 实现消消乐游戏的基本原理。如果你对游戏编程感兴趣,可以尝试根据自己的想法扩展和改进这个程序。


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

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