欢迎访问宙启技术站
智能推送

使用Python编写一个简单的拼图游戏

发布时间:2023-12-04 15:17:27

以下是一个使用Python编写的简单拼图游戏的代码:

import random

def create_board(size):
    """创建一个初始拼图板"""
    board = []
    num = 1
    for _ in range(size):
        row = []
        for _ in range(size):
            row.append(num)
            num += 1
        board.append(row)
    board[size-1][size-1] = " "
    return board

def display_board(board):
    """显示当前拼图板"""
    size = len(board)
    for i in range(size):
        print(" | ".join(str(x) for x in board[i]))
        if i != size - 1:
            print("--"*(size-1))

def get_blank_position(board):
    """获取空格的位置"""
    size = len(board)
    for i in range(size):
        for j in range(size):
            if board[i][j] == " ":
                return i, j

def move(board, direction):
    """移动"""
    size = len(board)
    blank_i, blank_j = get_blank_position(board)
    if direction == "up" and blank_i > 0:
        board[blank_i][blank_j], board[blank_i-1][blank_j] = board[blank_i-1][blank_j], board[blank_i][blank_j]
    elif direction == "down" and blank_i < size-1:
        board[blank_i][blank_j], board[blank_i+1][blank_j] = board[blank_i+1][blank_j], board[blank_i][blank_j]
    elif direction == "left" and blank_j > 0:
        board[blank_i][blank_j], board[blank_i][blank_j-1] = board[blank_i][blank_j-1], board[blank_i][blank_j]
    elif direction == "right" and blank_j < size-1:
        board[blank_i][blank_j], board[blank_i][blank_j+1] = board[blank_i][blank_j+1], board[blank_i][blank_j]
    else:
        print("Invalid move!")

def is_win(board):
    """判断是否拼图完成"""
    size = len(board)
    num = 1
    for i in range(size):
        for j in range(size):
            if i == size-1 and j == size-1:
                if board[i][j] != " ":
                    return False
            elif board[i][j] != num:
                return False
            num += 1
    return True

def play_game(size):
    """拼图游戏主函数"""
    board = create_board(size)
    random.shuffle(board)  #使用随机移动初始化拼图板
    while not is_win(board):
        display_board(board)
        direction = input("Enter a move (up, down, left, right): ")
        move(board, direction.lower())
    print("Congratulations! You win!")

# 使用例子
play_game(3)

这个拼图游戏使用一个二维列表来表示拼图板,其中数字代表拼图的位置,空格代表空位。游戏开始时,会随机移动拼图,玩家需要输入移动方向来将拼图复原到正确的位置。

首先,create_board 函数根据输入的尺寸创建一个初始的拼图板。然后 display_board 函数用来显示当前的拼图板。get_blank_position函数用来获取空格的位置。move函数用来移动拼图。is_win函数判断当前的拼图是否已经完成。最后,play_game函数是拼图游戏的主函数,它通过调用其他函数来执行游戏的整个过程。

使用例子中,play_game(3) 表示创建一个3x3的拼图板,然后开始游戏。玩家需要根据提示输入移动的方向("up", "down", "left", "right"),直到将拼图还原完成。

希望以上内容对您有帮助!