Python Tic Tac Toe AI执行2+;同时移动到块

Python Tic Tac Toe AI执行2+;同时移动到块,python,python-2.7,artificial-intelligence,tic-tac-toe,Python,Python 2.7,Artificial Intelligence,Tic Tac Toe,我有一个井字游戏: import random boardX = int(raw_input("How many X boards do you want? > ")) boardY = int(raw_input("How many Y boards do you want? > ")) Matrix = [[0-0 for x in range(boardX)] for y in range(boardY)] Matrix_2 = [[" "for x in range(boar

我有一个井字游戏:

import random
boardX = int(raw_input("How many X boards do you want? > "))
boardY = int(raw_input("How many Y boards do you want? > "))
Matrix = [[0-0 for x in range(boardX)] for y in range(boardY)]
Matrix_2 = [[" "for x in range(boardX)] for y in range(boardY)]
l = len(Matrix)

def turnX():
    global Player1_row
    global Player1_column
    Player1_row = int(raw_input("P1 What row do you want?"))
    Player1_row = Player1_row - 1
    Player1_column = int(raw_input("P1 What column do you want?"))
    Player1_column = Player1_column - 1
    if Player1_row > boardX:
        turnX()
    if Player1_column > boardY:
        turnX()
    if (1 == Matrix[Player1_column][Player1_row] or 500 == Matrix[Player1_column][Player1_row]):
        print "This is an invaild move!"
        turnX()
    else:
        Matrix[Player1_column][Player1_row] = 1
        Matrix_2[Player1_column][Player1_row] = "X"

def turnY():
    Player2_row = random.randint(1, boardX)
    Player2_column = random.randint(1, boardY)
    Player2_column = Player2_column - 1 
    Player2_row = Player2_row - 1
    if (1 == Matrix[Player2_column][Player2_row] or 500 == Matrix[Player2_column][Player2_row]):
      turnY()
    print "AI Turn:"
    if result[e] == boardY - 1 * 500:
      Matrix[Player1_column - 1][Player1_row] = 500
      Matrix_2[Player1_column - 1][Player1_row] = "O"
    if Player1_column == boardY - 1:
      Matrix[Player1_column][Player1_row - 1] = 500
      Matrix_2[Player1_column][Player1_row - 1] = "O"
    if Player1_column != boardY - 1:
      Matrix[Player2_column][Player2_row] = 500
      Matrix_2[Player2_column][Player2_row] = "O"


def printArray(boardX, boardY):
    for i in range(boardX):
        print ""
        print boardY * "  _    "
        for j in range(boardY):
            print "|", Matrix_2[i][j],"| ",
    print ""
    print boardY * "  _    "
win = False

def win_condition():
      global Row
      global result
      global diagonal1
      global diagonal2
      global e
      #Row
      row = [sum(row) for row in Matrix]
    #Column
      result = [sum(row[i] for row in Matrix) for i in range(len(Matrix[0]))]


    #Diagonal
      diagonal1 = [sum(Matrix[i][i] for i in range(l))]
      diagonal2 = [sum(Matrix[l-1-i][i] for i in range(l-1,-1,-1))]


    #Column

      result = [sum(row[i] for row in Matrix) for i in range(len(Matrix[0]))]
      for h in range(0, boardX):
        if row[h] == boardX * 500:
          print "The AI won! Row!"
          win = True
          printArray(boardX, boardY)
          quit()
        if row[h] == boardX:
          print "Player 1 won! Row!"
          win = True
          printArray(boardX, boardY)
          quit()

        for e in range(0, boardY):
          if result[e] == boardY * 500:
            print "The AI won! Column!"
            win = True
            printArray(boardX, boardY)
            quit()
          if result[e] == boardY:
            print "Player 1 won! Column!"
            win = True
            printArray(boardX, boardY)
            quit()
      if diagonal1[0] == boardY:
        print "Player 1 Won! Diagonal!"
        win = True
        printArray(boardX, boardY)
        quit()
      if diagonal1[0] == boardY * 500:
        print "The AI won! Diagonal!"
        win = True
        printArray(boardX, boardY)
        quit()
      if diagonal2[0] == boardY:
        print "Player 1 Won! Diagonal!"
        win = True
        printArray(boardX, boardY)
        quit()
      if diagonal2[0]== boardY * 500:
        print "The AI won! Diagonal!"
        win = True
        printArray(boardX, boardY)
        quit()

while win == False:
      win_condition()
      turnX()
      win_condition()
      printArray(boardX, boardY)
      win_condition()
      turnY()
      win_condition()
      printArray(boardX, boardY)
但当我的输入是,它做了2转,因为人工智能想阻止我所有的立场

  • 有什么办法可以解决吗
  • 有没有办法让AI试着赢,然后让他挡

  • 在递归调用turnX或turnY后写入return


    编辑:或将函数的其余部分放在else块中,或将输入的测试放在while循环中。

    递归调用turnX或turnY后写入return

    编辑:或者将函数的其余部分放在else块中,或者将输入的测试放在while循环中