私は三目並べゲームを作るためのpythonコードを書いています。ボード、x、y の 3 つの入力を受け取る関数を作成する必要があります。Board はボードの現在の表示で、x と y は 0、1、または 2 の値です。ゲームは、ユーザーに座標を尋ねるように設定されています。
def CheckVictory(board, x, y):
#check if previous move was on vertical line and caused a win
if board[0][y] == ('X') and board[1][y] == ('X') and board [2][y] == ('X'):
return True
if board[0][y] == ('O') and board[1][y] == ('O') and board [2][y] == ('O'):
return True
#check if previous move was on horizontal line and caused a win
if board[x][0] == ('X') and board[x][1] == ('X') and board [x][2] == ('X'):
return True
if board[x][0] == ('O') and board[x][1] == ('O') and board [x][2] == ('O'):
return True
#check if previous move was on the main diagonal and caused a win
if board[0][0] == ('X') and board[1][1] == ('X') and board [2][2] == ('X'):
return True
if board[0][0] == ('O') and board[1][1] == ('O') and board [2][2] == ('O'):
return True
#check if previous move was on the secondary diagonal and caused a win
if board[0][2] == ('X') and board[1][1] == ('X') and board [2][0] == ('X'):
return True
if board[0][2] == ('O') and board[1][1] == ('O') and board [2][0] == ('O'):
return True
return False
#end of CheckVictory function
関数はゲームループで次のように呼び出されます
p_x, p_y = playerTurn(board) #let player take turn
displayBoard(board) #show board after move has been made
if CheckVictory(board, p_x, p_y): #see if user has won
print("CONGRATULATIONS, you win!")
newGame(board) #game over start new one
continue
コンピューターのターンでも同様です
この関数を書くためのより良い方法があるように感じます。x と y をもっと使うべきだと思います。あるいは、すべての可能性を書くよりも、もっと良いチェック方法があると思います。では、これを書くためのより良い方法は何ですか?短く簡潔にするために。