python tic-tac-toe-textバージョン(パート2)

前回の記事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ゲームの実現について考えることができます。

  1. チェスボードはどのようなデータ構造を採用していますか?
  2. 勝ち負けを判断する方法は?
  3. コンピューターチェス戦略?

パートII-pythonGobang(パート1)

私のコードの効果は次のとおりです。

xウォン

具体的なボードの実現と勝ち負けの実現については、次の記事で説明します。

( (全文の終わり)

Recommended Posts

python tic-tac-toe-textバージョン(パート2)
python Tic-Tac-Toe-テキストバージョン(オン)
Ubuntu16.04スイッチpythonバージョン
PyCharmセットPythonバージョン
Pythonでの同時リクエスト(パート2)
Pythonはテキストバージョンのminesweeperを実装しています
OpenCVインストールのPythonバージョン
Python版名刺管理システム
UbuntuにTensorFlow(python2.7バージョン)をインストールします
Ubuntuに最新のPython3.6バージョンをインストールします
WindowsがサポートしているPythonのバージョン
PythonはAI自動バージョンの貪欲なヘビを実装しています