📜  使用随机数的自动井字游戏的Python实现(1)

📅  最后修改于: 2023-12-03 15:36:42.298000             🧑  作者: Mango

使用随机数的自动井字游戏的Python实现

本文介绍一个使用Python实现的自动井字游戏,该游戏使用随机数来模拟人类玩家,可以自动决策并下棋。下面我们来一步步介绍实现方法。

模块导入
import random

我们需要用到Python的内置模块random,所以在代码开头先进行导入。

游戏棋盘

我们可以使用一个3*3的二维列表来表示井字游戏的棋盘。其中,'X'表示玩家1下的棋子,'O'表示玩家2下的棋子,'-'表示棋盘上还没有下棋的位置。

board = [['-', '-', '-'],
         ['-', '-', '-'],
         ['-', '-', '-']]

在开始游戏前,我们要将棋盘初始化为全空。

玩家下棋

玩家可以通过鼠标或键盘来下棋,但是在自动井字游戏中,我们需要使用程序来自动下棋。我们可以采用随机数来帮助我们决策。

def player_move(board, player):
    '''让玩家下棋'''
    row = random.randint(0,2)
    col = random.randint(0,2)
    while board[row][col] != '-':
        row = random.randint(0,2)
        col = random.randint(0,2)
    board[row][col] = player

这里我们定义了一个函数player_move,该函数接受棋盘board和选手player作为参数。在函数中,我们使用random模块中的randint函数来随机生成0~2之间的整数,分别表示行和列。接着,我们使用while循环来判断随机生成的位置是否已被占用。如果已被占用,我们就重新生成一个随机数,直到找到一个空位置为止。最后,我们将选手player下的棋子放到该位置上。

判断游戏结果

在井字游戏中,胜利的条件是在同一行、列或对角线上占满了三个格子。我们可以编写一个函数来判断当前棋盘上是否有人胜利。

def game_over(board):
    '''判断游戏是否结束'''
    for i in range(3):
        # 检查每行
        if board[i][0] == board[i][1] == board[i][2] != '-':
            return board[i][0]
        # 检查每列
        elif board[0][i] == board[1][i] == board[2][i] != '-':
            return board[0][i]
    # 检查每对角线
    if board[0][0] == board[1][1] == board[2][2] != '-':
        return board[0][0]
    elif board[0][2] == board[1][1] == board[2][0] != '-':
        return board[0][2]
 
    # 检查是否平局
    if '-' not in board[0] and '-' not in board[1] and '-' not in board[2]:
        return '平局'
 
    # 游戏继续
    return None

该函数首先检查每行和每列是否有一方占满了格子,然后再检查两个对角线是否有一方胜利。如果没有人胜利,我们再判断棋盘是否已经满了。如果棋盘已满且没有人胜利,我们就宣布游戏结束,是平局。

程序主流程

了解完上述函数后,我们可以编写程序的主流程了。该程序可以让玩家和电脑对战,直到游戏结束为止。

def main():
    print('欢迎来到井字游戏!')
    print('玩家1的棋子为X,电脑的棋子为O。')
    print_board(board)
    player = 'X'
    while not game_over(board):
        if player == 'X':
            x, y = get_move(board)
            board[x][y] = player
        else:
            player_move(board, player)
        print_board(board)
        player = 'O' if player == 'X' else 'X'
    print('游戏结束!')
    result = game_over(board)
    if result == '平局':
        print('平局!')
    else:
        print(f'{result}胜利!')

在主函数中,我们首先打印欢迎语,并让玩家知道X代表他们自己,O代表电脑。接着,我们开始循环,直到游戏结束。当玩家为X时,我们获取玩家的下棋位置,并将其填写到棋盘上。否则,我们让程序自动下棋。每次下完后,我们都打印一下最新的棋盘,并切换选手。当游戏结束后,我们将宣布胜利者(如果有的话)或宣布平局。

总结

到此为止,我们已经完成了自动井字游戏的Python实现。本文介绍了随机数、列表和函数等Python编程中的基本知识,希望大家可以在实践中学以致用。下面是完整的代码: