ai五子棋编程代码是什么
-
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年前 -
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年前 -
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年前