ai五子棋编程代码是什么

fiy 其他 67

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    AI五子棋编程代码是指使用人工智能技术来实现自动下棋的程序代码。下面是一个简单的AI五子棋编程代码示例:

    import random
    
    def create_board():
        # 创建一个15*15的空棋盘
        board = [[0] * 15 for _ in range(15)]
        return board
    
    def display_board(board):
        # 打印棋盘
        for row in board:
            for cell in row:
                print(cell, end=" ")
            print()
    
    def is_valid_move(board, row, col):
        # 判断是否为合法落子位置
        if row < 0 or row >= 15 or col < 0 or col >= 15:
            return False
        if board[row][col] != 0:
            return False
        return True
    
    def get_valid_moves(board):
        # 获取所有合法落子位置
        valid_moves = []
        for row in range(15):
            for col in range(15):
                if is_valid_move(board, row, col):
                    valid_moves.append((row, col))
        return valid_moves
    
    def make_move(board, row, col, player):
        # 在指定位置落子
        board[row][col] = player
    
    def check_winner(board, player):
        # 检查是否有玩家获胜
        for row in range(15):
            for col in range(15):
                if board[row][col] == player:
                    # 检查水平方向是否有五子相连
                    if col + 4 < 15 and all(board[row][col+i] == player for i in range(5)):
                        return True
                    # 检查垂直方向是否有五子相连
                    if row + 4 < 15 and all(board[row+i][col] == player for i in range(5)):
                        return True
                    # 检查正斜方向是否有五子相连
                    if row + 4 < 15 and col + 4 < 15 and all(board[row+i][col+i] == player for i in range(5)):
                        return True
                    # 检查反斜方向是否有五子相连
                    if row + 4 < 15 and col - 4 >= 0 and all(board[row+i][col-i] == player for i in range(5)):
                        return True
        return False
    
    def ai_make_move(board, player):
        # AI落子策略
        valid_moves = get_valid_moves(board)
        for move in valid_moves:
            row, col = move
            board[row][col] = player
            if check_winner(board, player):
                return
            board[row][col] = 0
        # 如果没有获胜的落子位置,则随机选择一个合法位置落子
        row, col = random.choice(valid_moves)
        board[row][col] = player
    
    def play_game():
        board = create_board()
        display_board(board)
        while True:
            # 玩家落子
            row = int(input("请输入行号(0-14):"))
            col = int(input("请输入列号(0-14):"))
            if not is_valid_move(board, row, col):
                print("无效的落子位置,请重新输入!")
                continue
            make_move(board, row, col, 1)
            display_board(board)
            if check_winner(board, 1):
                print("玩家获胜!")
                break
            # AI落子
            ai_make_move(board, 2)
            display_board(board)
            if check_winner(board, 2):
                print("AI获胜!")
                break
    
    play_game()
    

    以上代码实现了一个简单的AI五子棋游戏,其中包括棋盘的创建、显示、落子的合法性判断、获胜判断和AI落子策略等功能。玩家可以通过输入行号和列号来落子,AI则根据简单的策略进行落子。游戏会在玩家或AI获胜时结束并显示结果。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    AI五子棋编程代码可以使用不同的编程语言来实现,下面是一个使用Python编写的简单示例代码:

    import random
    
    # 创建五子棋棋盘
    def create_board():
        board = [[' ' for _ in range(15)] for _ in range(15)]
        return board
    
    # 打印棋盘
    def print_board(board):
        print('  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14')
        for i in range(15):
            print(i, end=' ')
            for j in range(15):
                print(board[i][j], end=' ')
            print()
    
    # 判断落子是否合法
    def is_valid_move(board, row, col):
        return row >= 0 and row < 15 and col >= 0 and col < 15 and board[row][col] == ' '
    
    # 判断游戏是否结束
    def is_game_over(board, row, col):
        return is_win(board, row, col) or is_draw(board)
    
    # 判断是否胜利
    def is_win(board, row, col):
        directions = [(1, 0), (0, 1), (1, 1), (1, -1)]
        for d in directions:
            count = 1
            for i in range(1, 5):
                r = row + d[0] * i
                c = col + d[1] * i
                if r >= 0 and r < 15 and c >= 0 and c < 15 and board[r][c] == board[row][col]:
                    count += 1
                else:
                    break
            for i in range(1, 5):
                r = row - d[0] * i
                c = col - d[1] * i
                if r >= 0 and r < 15 and c >= 0 and c < 15 and board[r][c] == board[row][col]:
                    count += 1
                else:
                    break
            if count >= 5:
                return True
        return False
    
    # 判断是否平局
    def is_draw(board):
        for i in range(15):
            for j in range(15):
                if board[i][j] == ' ':
                    return False
        return True
    
    # AI下棋
    def ai_move(board):
        empty_cells = []
        for i in range(15):
            for j in range(15):
                if board[i][j] == ' ':
                    empty_cells.append((i, j))
        row, col = random.choice(empty_cells)
        board[row][col] = 'X'
    
    # 主函数
    def main():
        board = create_board()
        print_board(board)
        while True:
            row = int(input('请输入行号:'))
            col = int(input('请输入列号:'))
            if is_valid_move(board, row, col):
                board[row][col] = 'O'
                print_board(board)
                if is_game_over(board, row, col):
                    print('游戏结束,你赢了!')
                    break
                ai_move(board)
                print_board(board)
                if is_game_over(board, row, col):
                    print('游戏结束,AI赢了!')
                    break
            else:
                print('无效的落子位置,请重新输入!')
    
    if __name__ == '__main__':
        main()
    

    以上代码实现了一个简单的AI五子棋游戏,玩家执黑棋(O),AI执白棋(X),通过交替下棋直到有一方获胜或平局。AI的落子位置是随机选择的。你可以根据需求对代码进行修改和优化,比如实现更强的AI算法或增加其他功能。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    AI五子棋编程代码可以使用Python语言来实现。下面是一个简单的AI五子棋编程代码示例:

    import numpy as np
    
    def create_board():
        board = np.zeros((15, 15), dtype=int)
        return board
    
    def is_valid_move(board, row, col):
        if board[row][col] == 0:
            return True
        else:
            return False
    
    def make_move(board, row, col, player):
        board[row][col] = player
    
    def get_winner(board):
        # 检查横向是否有五子连珠
        for i in range(15):
            for j in range(11):
                if board[i][j] != 0 and board[i][j] == board[i][j+1] == board[i][j+2] == board[i][j+3] == board[i][j+4]:
                    return board[i][j]
        
        # 检查纵向是否有五子连珠
        for i in range(11):
            for j in range(15):
                if board[i][j] != 0 and board[i][j] == board[i+1][j] == board[i+2][j] == board[i+3][j] == board[i+4][j]:
                    return board[i][j]
        
        # 检查左上到右下的对角线是否有五子连珠
        for i in range(11):
            for j in range(11):
                if board[i][j] != 0 and board[i][j] == board[i+1][j+1] == board[i+2][j+2] == board[i+3][j+3] == board[i+4][j+4]:
                    return board[i][j]
        
        # 检查右上到左下的对角线是否有五子连珠
        for i in range(11):
            for j in range(4, 15):
                if board[i][j] != 0 and board[i][j] == board[i+1][j-1] == board[i+2][j-2] == board[i+3][j-3] == board[i+4][j-4]:
                    return board[i][j]
        
        return 0
    
    def get_available_moves(board):
        moves = []
        for i in range(15):
            for j in range(15):
                if board[i][j] == 0:
                    moves.append((i, j))
        return moves
    
    def evaluate_position(board, player):
        score = 0
        opponent = 3 - player
        
        # 检查横向是否有四子连珠
        for i in range(15):
            for j in range(12):
                window = [board[i][j], board[i][j+1], board[i][j+2], board[i][j+3], board[i][j+4]]
                if window.count(player) == 4 and window.count(0) == 1:
                    score += 100
            
                elif window.count(opponent) == 4 and window.count(0) == 1:
                    score -= 100
        
        # 检查纵向是否有四子连珠
        for i in range(12):
            for j in range(15):
                window = [board[i][j], board[i+1][j], board[i+2][j], board[i+3][j], board[i+4][j]]
                if window.count(player) == 4 and window.count(0) == 1:
                    score += 100
            
                elif window.count(opponent) == 4 and window.count(0) == 1:
                    score -= 100
        
        # 检查左上到右下的对角线是否有四子连珠
        for i in range(12):
            for j in range(12):
                window = [board[i][j], board[i+1][j+1], board[i+2][j+2], board[i+3][j+3], board[i+4][j+4]]
                if window.count(player) == 4 and window.count(0) == 1:
                    score += 100
            
                elif window.count(opponent) == 4 and window.count(0) == 1:
                    score -= 100
        
        # 检查右上到左下的对角线是否有四子连珠
        for i in range(12):
            for j in range(4, 15):
                window = [board[i][j], board[i+1][j-1], board[i+2][j-2], board[i+3][j-3], board[i+4][j-4]]
                if window.count(player) == 4 and window.count(0) == 1:
                    score += 100
            
                elif window.count(opponent) == 4 and window.count(0) == 1:
                    score -= 100
        
        return score
    
    def minimax(board, depth, alpha, beta, maximizing_player):
        if depth == 0 or get_winner(board) != 0:
            return evaluate_position(board, 1)
        
        if maximizing_player:
            max_eval = float('-inf')
            moves = get_available_moves(board)
            for move in moves:
                new_board = board.copy()
                make_move(new_board, move[0], move[1], 1)
                eval = minimax(new_board, depth-1, alpha, beta, False)
                max_eval = max(max_eval, eval)
                alpha = max(alpha, eval)
                if beta <= alpha:
                    break
            return max_eval
        
        else:
            min_eval = float('inf')
            moves = get_available_moves(board)
            for move in moves:
                new_board = board.copy()
                make_move(new_board, move[0], move[1], 2)
                eval = minimax(new_board, depth-1, alpha, beta, True)
                min_eval = min(min_eval, eval)
                beta = min(beta, eval)
                if beta <= alpha:
                    break
            return min_eval
    
    def get_best_move(board):
        max_eval = float('-inf')
        best_move = None
        moves = get_available_moves(board)
        for move in moves:
            new_board = board.copy()
            make_move(new_board, move[0], move[1], 1)
            eval = minimax(new_board, 3, float('-inf'), float('inf'), False)
            if eval > max_eval:
                max_eval = eval
                best_move = move
        return best_move
    
    def play_game():
        board = create_board()
        player = 1
        while True:
            if player == 1:
                row, col = get_best_move(board)
                make_move(board, row, col, player)
                print("Player 1 (AI) makes a move at: (" + str(row) + ", " + str(col) + ")")
            else:
                valid_move = False
                while not valid_move:
                    row = int(input("Enter row: "))
                    col = int(input("Enter column: "))
                    if is_valid_move(board, row, col):
                        make_move(board, row, col, player)
                        valid_move = True
                    else:
                        print("Invalid move. Try again.")
            
            print(board)
            winner = get_winner(board)
            if winner == 1:
                print("Player 1 (AI) wins!")
                break
            elif winner == 2:
                print("Player 2 wins!")
                break
            
            player = 3 - player
    
    play_game()
    

    以上代码实现了一个简单的AI五子棋游戏。其中,create_board()函数用于创建一个15×15的棋盘,is_valid_move()函数用于判断一个落子是否合法,make_move()函数用于在棋盘上落子,get_winner()函数用于判断胜负,get_available_moves()函数用于获取当前可行的落子位置,evaluate_position()函数用于评估当前棋局的得分,minimax()函数用于实现极小极大算法,get_best_move()函数用于获取AI的最佳落子位置,play_game()函数用于控制游戏的进行。

    play_game()函数中,玩家1为AI,玩家2为人类玩家。游戏开始时,玩家1会根据当前棋局使用get_best_move()函数来计算最佳落子位置,并落子于该位置。然后,玩家2可以输入自己的落子位置。游戏会不断进行直到有一方获胜或者平局。

    以上代码只是一个简单的示例,AI五子棋编程还有很多优化的空间,比如增加更复杂的评估函数、增加搜索深度等。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部