第五回

今回私達の班では〇☓ゲームを作りました。

ソースコード

  1. import random
  2. gameBoard = [0,1,2,3,4,5,6,7,8] # ゲームに利用する盤面
  3. # 盤面を3x3で表示する
  4. def displayBoard():
  5.     # gameBoardの要素を1つずつ表示
  6.     print("--+---+--") # デコレーション
  7.     for i in range(0, len(gameBoard)):
  8.         if(i%3 == 2): # 3回に1回は改行
  9.             print(gameBoard[i]) # 改行する
  10.             print("--+---+--") # デコレーション
  11.         elif(i%3 == 1):
  12.             print(" | " + str(gameBoard[i]) + " | ", end="") # 改行しない
  13.         else :
  14.             print(gameBoard[i], end="") # 改行しない
  15.     print()
  16. # ターンを進める
  17. def inputBoard(playerType):
  18.     # 1.座標を入力させる
  19.     if(playerType == "o"): # o が渡されたら座標を入力
  20.         tgt = int(input("0~8の座標を入れてください: "))
  21.     else: # xが渡されたらランダムで座標を入力
  22.         tgt = random.randint(0,8)
  23.     # 2.入力座標に 'o''x' が入っていないことを確認
  24.     if(gameBoard[tgt] == 'o' or gameBoard[tgt] == 'x'):
  25.         inputBoard(playerType)
  26.     # 3.gameBoardに反映
  27.     else:
  28.         gameBoard[tgt] = playerType
  29. # 勝利判定
  30. def winner():
  31.     # 勝ち手を列挙
  32.     lines = [
  33.       [0, 1, 2],
  34.       [3, 4, 5],
  35.       [6, 7, 8],
  36.       [0, 3, 6],
  37.       [1, 4, 7],
  38.       [2, 5, 8],
  39.       [0, 4, 8],
  40.       [2, 4, 6],
  41.     ]
  42.     # forで勝ち手を1パターンずつ見ていく
  43.     for i in range(0, len(lines)):
  44.         [a, b, c] = lines[i]
  45.         # 勝ち手の場所に同じ記号が入っていないかを確認
  46.         if gameBoard[a] and gameBoard[a] == gameBoard[b] and gameBoard[a] == gameBoard[c]:
  47.             # 同じ記号が入っていたら、入っている記号を返す
  48.             return gameBoard[a]
  49.     # どちらも勝っていない場合はNoneを返す
  50.     return None
  51. displayBoard() # 実行時に初めに表示される盤面
  52. # ゲームを実行する
  53. for turn in range(0,9):
  54.     # 誰のターンかを判定する
  55.     if(turn %2 == 0) : # あなたのターン
  56.         print("You")
  57.         inputBoard("o")
  58.     else: # CPUのターン
  59.         print("CPU")
  60.         inputBoard("x")
  61.     displayBoard() # 盤面表示
  62.     if winner(): # 勝敗判定
  63.         print(winner() + "の勝ち")
  64.         break
  65.     if turn == 8: # 8手目で引き分け
  66.         print("引き分け")
  67.         break