この記事では、tic-tac-toeゲームのpython実装をすべての人に共有しています。参考までに、具体的な内容は次のとおりです。
金曜日の夜にパイソンの選択科目を受講しました。先生はパイソンの基本的な文法から始めたと思いましたが、タートルドローイングから始まるとは思っていませんでした。少し。
以前、図書館からパイソンゲームプログラミングの本を借りていましたが、最初の数章を読んだ後はあまり読みませんでした。突然夜に読みたくなり、チュートリアルに従ってゲームを書きました。ついにTic-Tac-Toeが誕生しましたが、実際、コードはそれほど長くはありませんが、主にアイデアであり、十分に検討する必要があります。コードを書いた後、長い間コンピューターでtic-tac-toeをプレイしましたが、ラウンドに勝てませんでした。本当に無力で、比較できませんでした。
開発環境:windows10 + pycharm(チェスをプレイするときに入力が必要なため、sublimeは入力方法を知らないため、pycharmが使用されます)
使用する必要があるパッケージは1つだけです:ランダム
ゲームの場合、最初に理解することは、ゲームの流れ、最初に何をすべきか、次に何をすべきかです。 Tic-tac-toeは比較的複雑なゲームではないので、プロセスについては説明しません。最初に行うのは、チェス盤、コンピューター、プレーヤーのピースを描画し、ピースを最初に配置するなどです。以下はコードで説明されています。
# チェスボードを描画し、チェスピースのリストを渡す機能
def drawBoard(board):print(" "+ board[7]+" | "+ board[8]+" | "+ board[9])print("------------")print(" "+ board[4]+" | "+ board[5]+" | "+ board[6])print("------------")print(" "+ board[1]+" | "+ board[2]+" | "+ board[3])
# プレイヤーは使用したいチェスピースのタイプを選択します
def inputPlayerLetter():
letter =''whilenot(letter =='X' or letter =='O'):print("Do you want to be X or O")
# 小文字を大文字に自動的に変換
letter =input().upper()
# プレーヤーがXを選択すると、Oが自動的にコンピューターに割り当てられ、その逆も同様です。
if letter =='X':return['X','O']else:return['O','X']
# ここでは、0または1がランダムに生成され、誰が最初に解決するかを示します。
def whoGoesFirst():if random.randint(0,1)==0:return'computer'else:return'player'
# プレイヤーがyまたはYを選択すると、ゲームが再開します
def playAgain():print("Do you want to play again?(yes or no)")returninput().lower().startswith('y')
# チェスピースをボードに置きます
# ボードパラメータは、保存されているチェスピースのリストです。
# 文字パラメータは、チェスピースのタイプです。
# 移動は、チェスピースを配置する場所を選択することです
def makeMove(board, letter, move):
board[move]= letter
# Tic TacToeのルールに従って勝つかどうかを決定します
def isWinner(bo, le):return((bo[7]== le and bo[8]== le and bo[9]== le)or(bo[4]== le and bo[5]== le and bo[6]== le)or(bo[1]== le and bo[2]== le and bo[3]== le)or(bo[7]== le and bo[4]== le and bo[1]== le)or(bo[8]== le and bo[5]== le and bo[2]== le)or(bo[9]== le and bo[6]== le and bo[3]== le)or(bo[7]== le and bo[5]== le and bo[3]== le)or(bo[9]== le and bo[5]== le and bo[1]== le))
# すでにボード上にあるピースをバックアップします,いつでも更新
def getBoardCopy(board):
dupeBoard =[]for i in board :
dupeBoard.append(i)return dupeBoard
# チェス盤を置く場所があるかどうかを判断します
def isSpaceFree(board, move):return board[move]==' '
# プレーヤーの位置を取得する
def getPlayerMove(board):
move =' '
# 移動の位置が正しいかどうか、およびボードをまだ配置できるかどうかを判断します
while move not in'1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board,int(move)):print("What is your next move?(1-9)")
move =input()returnint(move)
# 主にコンピューター用に降車できる場所を探す
def chooseRandomMoveFromList(board, moveList):
possibleMoves =[]for i in moveList :ifisSpaceFree(board, i):
possibleMoves.append(i)iflen(possibleMoves)!=0:return random.choice(possibleMoves)else:return None
上記のコードは、いくつかの簡単な機能を実装してから、コンピューターの一部を実装します。結局のところ、コンピューターなので、見た目が悪くないので、以下は小さなAIに相当します。コンピューターはバックアップコピーで判断できます。結果は、ドロップの位置を指定することです。
# コンピューターの配置
def getComputerMove(board, computerLetter):
# ボード上のコンピューターとプレーヤーのピースのタイプを指定します
if computerLetter =='X':
playerLetter ='O'else:
playerLetter ='X'for i inrange(1,10):
# バックアップボードにピースを配置する場所があるかどうかを判断します
copy =getBoardCopy(board)ifisSpaceFree(copy, i):
# 落ち着く場所があれば,まず、バックアップボードにピースを置きます
makeMove(copy, computerLetter, i)
# コンピュータがポジションの後に勝つことができるかどうかを判断します,そして、勝ちポジションのポジションに戻ります
ifisWinner(copy, computerLetter):return i
for i inrange(1,10):
copy =getBoardCopy(board)ifisSpaceFree(copy, i):
# バックアップボード上でプレーヤーの動きをシミュレートする
makeMove(copy, playerLetter, i)
# 次回プレイヤーが移動した場合、彼らは勝つことができます,プレイヤーの場所の位置を返します,プレーヤーをブロックするために使用されます
ifisWinner(copy, playerLetter):return i
# 四隅にランダムに配置
move =chooseRandomMoveFromList(board,[1,3,7,9])if move != None :return move
# コーナーがいっぱいの場合,次に、ドロップは中央の位置にあります5。
ifisSpaceFree(board,5):return5
# コーナーと中央が占有されている場合,ランダム選択
returnchooseRandomMoveFromList(board,[2,4,6,8])
# ボードがいっぱいかどうかを確認します
def isBoardFull(board):for i inrange(1,10):ifisSpaceFree(board, i):return False
return True
print("Welcome to Tictactoe !!!")while True :
# ボードを初期化して空にします
theBoard =[' ']*10
# プレーヤーとコンピューターのチェスタイプの選択
playerLetter, computerLetter =inputPlayerLetter()
# 優先順位の決定
turn =whoGoesFirst()print('The '+ turn +' will go first')
# ゲーム開始フラグ,ゲームが終了するとFalseになります
gameIsPlaying = True
while gameIsPlaying :
# プレイヤーファースト
if turn =='player':drawBoard(theBoard)
# プレーヤーのチェスの位置を取得します
move =getPlayerMove(theBoard)
# プレーヤーの駒をリスト内の対応する位置に渡します
makeMove(theBoard, playerLetter, move)
# プレイヤーが勝った場合,フラグがFalseになります
ifisWinner(theBoard, playerLetter):drawBoard(theBoard)print("You win !")
gameIsPlaying = False
# それ以外の場合は、ボードがいっぱいかどうかを判断します
else:ifisBoardFull(theBoard):drawBoard(theBoard)print("Tie")break
# ボードがいっぱいでない場合,そして、プレイヤーは落ち着きました,その後、それは次回コンピュータに落ちます
else:
turn ='computer'
# コンピューターファースト
else:
# コンピューターがランダムに場所を選択します
move =getComputerMove(theBoard, computerLetter)makeMove(theBoard, computerLetter, move)
# コンピューターが勝った場合,ゲームは終りだ
ifisWinner(theBoard, computerLetter):drawBoard(theBoard)print("You lose !")
gameIsPlaying = False
else:ifisBoardFull(theBoard):drawBoard(theBoard)print("Tie")breakelse:
turn ='player'
# プレイヤーはゲームを再開しませんでした,ループ外
if not playAgain():break
上記のコードはすべて、統合後にプレイできるTic-Tac-Toeのヒューマンマシンバトルを実現しています。とにかく、私は勝ったことがありません。
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts