python代码实现攒小人书游戏

代码说明:
print_board(board): 打印当前棋盘的状态。

check_winner(board, player): 检查是否有玩家获胜。通过检查所有可能的胜利条件(行、列、对角线)来判断。

check_draw(board): 检查是否平局,即棋盘上所有位置都已被填充。

make_move(board, row, col, player): 在指定的位置放置玩家的标记("X" 或 "O"),并返回是否成功。

main(): 游戏的主逻辑,控制游戏的进行,包括用户输入、回合切换、胜负判断等。

游戏运行:
运行代码后,玩家可以依次输入行和列的坐标来进行游戏。
游戏会自动判断胜负或平局,并显示结果。

def print_board(board):
    for row in board:
        print(" | ".join(row))
        print("-" * 5)

def check_winner(board, player):
    # Check rows, columns and diagonals
    win_conditions = [
        [board[0][0], board[0][1], board[0][2]],
        [board[1][0], board[1][1], board[1][2]],
        [board[2][0], board[2][1], board[2][2]],
        [board[0][0], board[1][0], board[2][0]],
        [board[0][1], board[1][1], board[2][1]],
        [board[0][2], board[1][2], board[2][2]],
        [board[0][0], board[1][1], board[2][2]],
        [board[2][0], board[1][1], board[0][2]],
    ]
    
    return [player, player, player] in win_conditions

def check_draw(board):
    return all(cell != " " for row in board for cell in row)

def make_move(board, row, col, player):
    if board[row][col] == " ":
        board[row][col] = player
        return True
    return False

def main():
    board = [[" " for _ in range(3)] for _ in range(3)]
    players = ["X", "O"]
    turn = 0
    
    print("欢迎来到攒小人游戏!")
    print_board(board)
    
    while True:
        player = players[turn % 2]
        print(f"玩家 {player} 的回合")
        
        while True:
            try:
                row = int(input("输入行 (0, 1, 2): "))
                col = int(input("输入列 (0, 1, 2): "))
                if row in [0, 1, 2] and col in [0, 1, 2]:
                    if make_move(board, row, col, player):
                        break
                    else:
                        print("这个位置已经被占用,请选择其他位置。")
                else:
                    print("无效的输入,请输入 0、1 或 2。")
            except ValueError:
                print("无效的输入,请输入数字。")
        
        print_board(board)
        
        if check_winner(board, player):
            print(f"玩家 {player} 胜利!")
            break
        if check_draw(board):
            print("平局!")
            break
        
        turn += 1

if __name__ == "__main__":
    main()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值