前回の記事pythonTic-Tac-Toe-Textバージョン(パート1)コンピューター側のチェス戦略はランダムです。再生できるポジションがある場合は、ランダムなポジションが選択されます。
実際には、そのような愚かな敵は存在しませんが、コンピュータに通常のIQを与える必要があります。
このようないくつかの簡単な戦略で、コンピューターには少しAI効果があります。
非常に明白な状況下では、コンピューターは失われません。ほとんどの場合、無敗のままである可能性があります。
完全なコード
もっとうまくやりたい場合は、プロンプトの説明、ゲームプレイの説明などを変更できます。
import random
def display_instruct():print("ゲームのルール")
def new_board():return[" "]*9
def display_board(board):print(
f"""
|{ board[0]}|{board[1]}|{board[2]}||{board[3]}|{board[4]}|{board[5]}||{board[6]}|{board[7]}|{board[8]}|"""
)
def pieces():
is_go_first =input("最初に行きますか? (y/n): ").lower()if is_go_first =="y":
human,computer ="X","O"else:
human, computer ="O","X"return human, computer
def legal_moves(board):
moves =[]for move inrange(9):if board[move]==" ":
moves.append(move)return moves
def human_move(board):
legal =legal_moves(board)
move =int(input("どこに行くの? (0 - 8):"))while move not in legal:
move =int(input("どこに行くの? (0 - 8):"))return move
def computer_move(board, computer, human):
# チェスボードをコピーする
board = board[:]
# 最適な場所
best_moves =(4,0,2,6,8,1,3,5,7)
# コンピューターが勝つことができる場合は、その位置に移動します
for move inlegal_moves(board):
board[move]= computer
ifwinner(board)== computer:return move
# テストは失敗し、キャンセルして最初からやり直します
board[move]=" "
# プレイヤーが勝つことができる場合は、その位置に移動します
for move inlegal_moves(board):
board[move]= human
ifwinner(board)== human:return move
# テストは失敗し、キャンセルして最初からやり直します
board[move]=" "
# 双方ができない場合は、プレイするのに最適なポジションを選択してください
for move in best_moves:if move inlegal_moves(board):return move
def next_turn(turn):if turn =="X":return"O"else:return"X"
def winner(board):
WAYS_TO_WIN =((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))for row in WAYS_TO_WIN:if board[row[0]]== board[row[1]]== board[row[2]]!=" ":
winner = board[row[0]]return winner
if" " not in board:return"ドロー"return None
def congrat_winner(winner,human,computer):if winner!="ドロー":print(winner,"won!\n")else:print("这是一场ドロー")if winner == human:print("勝利おめでとうございます! !")
elif winner == computer:print("あなたは負けます!")display_instruct()
human,computer =pieces()
turn ="X"
board =new_board()display_board(board)while not winner(board):if turn ==human:
move =human_move(board)
board[move]=human
else:
move =computer_move(board, computer, human)
board[move]= computer
display_board(board)
turn =next_turn(turn)
the_winner =winner(board)congrat_winner(the_winner,human,computer)
もちろん、これは比較的限られたステップしか持たないTic TacToe専用です。
Gobangの場合、コンピューターはより多くのステップを計算する必要があり、勝利の判断はより複雑になります。興味のある人はGobangゲームの実現について考えることができます。
パートII-pythonGobang(パート1)
私のコードの効果は次のとおりです。
xウォン
具体的なボードの実現と勝ち負けの実現については、次の記事で説明します。
( (全文の終わり)
Recommended Posts