def changerEtatApresTransition(etat, action, joueur): '''Déterminer l'état obtenu lorsque le joueur effectue l'action dans l'état donné''' grille_copiee = Grille() grille_copiee.set(etat) grille_copiee.drop(joueur, action) nouvel_etat = grille_copiee.getName() return nouvel_etat
def sp(choix_ai_adversaire, num_tirages_MC = 3, num_descentes_dans_arbre = 7, facteur_uct = 0.0): '''Une partie opposant un joueur humain à une intelligence artificielle''' grid = Grille() ai = AI('O') if choix_ai_adversaire == 2: ai = MC('O', num_tirages_MC) elif choix_ai_adversaire == 3: ai = UCT('O', num_tirages_MC, num_descentes_dans_arbre, facteur_uct) le_joueur1_gagne = False mes_coups_possibles = grid.lookForAllowedSteps() input = [] player = 'X' while(input != 'q' and grid.checkVictory() is False and len(mes_coups_possibles)>0): grid.showGrid() input = raw_input("Number 1 through 7 = drop disc, q = quit. \nYour move:") if (input in ['1','2','3','4','5','6','7']): MonCoup = int(input) if grid.drop(player, MonCoup): le_joueur1_gagne = True mes_coups_possibles = grid.lookForAllowedSteps() if(grid.checkVictory() is False and len(mes_coups_possibles)>0): VotreCoup = ai.ai(grid) grid.drop(ai.player, VotreCoup) le_joueur1_gagne = False mes_coups_possibles = grid.lookForAllowedSteps() il_y_a_un_vainqueur = grid.checkVictory() print "The game ended in the following state:" grid.showGrid() print("Y a-t-il un gagnant ?"), print(il_y_a_un_vainqueur) print("Si oui, est-ce le joueur n 1 (X) ?"), print(le_joueur1_gagne)
def aiMonteCarlo(self, grille): '''Déterminer la meilleure action en fonction des résultats des simulations Monte-Carlo''' mes_coups_possibles = grille.lookForAllowedSteps() meilleure_action = None meilleure_evaluation = None for action in mes_coups_possibles: grille_simulee = Grille(grille) # Le joueur (A) joue un coup. grille_simulee.drop(self.player, action) # C'est au tour de l'autre joueur (B). symbole_dont_c_est_le_tour = getOtherSymbol(self.player) # Nous prenons l'opposé de la valeur simulée, car nous nous intéressons au joueur A. evaluation = - self.simulerMonteCarlo(grille_simulee, symbole_dont_c_est_le_tour) if(evaluation > meilleure_evaluation): meilleure_evaluation = evaluation meilleure_action = action return meilleure_action
def np(choix_ai_joueur, choix_ai_adversaire, num_tirages_MC = 3, num_descentes_dans_arbre = 7, facteur_uct = 0.0, show_grid = False): '''Une partie entre intelligences artificielles''' grid = Grille() ai1 = AI('X') if choix_ai_joueur == 2: ai1 = MC('X', num_tirages_MC) elif choix_ai_joueur == 3: ai1 = UCT('X', num_tirages_MC, num_descentes_dans_arbre, facteur_uct) ai2 = AI('O') if choix_ai_adversaire == 2: ai2 = MC('O') # paramètres par défaut elif choix_ai_adversaire == 3: ai2 = UCT('O') # paramètres par défaut le_joueur1_gagne = False mes_coups_possibles = grid.lookForAllowedSteps() while(grid.checkVictory() is False and len(mes_coups_possibles)>0): MonCoup = ai1.ai(grid) grid.drop(ai1.player, MonCoup) le_joueur1_gagne = True mes_coups_possibles = grid.lookForAllowedSteps() if show_grid: grid.showGrid() sleep(1) if(grid.checkVictory() is False and len(mes_coups_possibles)>0): VotreCoup = ai2.ai(grid) grid.drop(ai2.player, VotreCoup) le_joueur1_gagne = False mes_coups_possibles = grid.lookForAllowedSteps() if show_grid: grid.showGrid() il_y_a_un_vainqueur = grid.checkVictory() print "The game ended in the following state:" grid.showGrid() print("Y a-t-il un gagnant ?"), print(il_y_a_un_vainqueur) print("Si oui, est-ce le joueur 1 (X) ?"), print(le_joueur1_gagne) return (il_y_a_un_vainqueur, le_joueur1_gagne)
def pvp(): '''Une partie entre joueurs humains''' grid = Grille() input = [] player = 'X' while(input != 'q' and grid.checkVictory() is False): grid.showGrid() input = raw_input("1 2 3 4 5 6 7 = drop disc, q = quit. \nPlayer " +player+" to move:") if (input in ['1','2','3','4','5','6','7']): if grid.drop(player, int(input)): if(player == 'X'): player = 'O' else: player = 'X' print "The game ended in the following state:" grid.showGrid()