2017-06-04 1 views
1

Je possède ce jeu de tic tac toe:Tic Tac Toe AI ne 2+ se déplace en même temps pour bloquer

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) 

Mais quand mon entrée était this, il a fait 2 tour parce que l'AI a voulu bloquer tout de mes positions.

  1. Y a-t-il un moyen de le réparer?
  2. Y a-t-il un moyen de forcer l'IA à gagner, puis de le bloquer?

Répondre

0

Écrire en retour après avoir appelé récursivement turnX ou turnY. Editer: Ou mettre le reste de la fonction dans un autre bloc ou mettre le test de l'entrée dans une boucle while.