示例#1
0
def Fonction_Ckeck_Coulage_Fin():
    #On globalise les variables
    global Grille1
    global bas
    global haut
    global gauche
    global droite
    global NbCoulIANavire
    global Reference
    j = Grille1.index(Reference) #J permet de manipuler IndexCase sans le modifier lui même
    print("DEBUT CHECK COULAGE DU NAVIRE")
    print("IndexCase = " + str(j))
    print("1er case: " + str(Reference))
    #Variable Bolléenne qui détermine si il existe des cases en dessous/dessus/droite/gauche 
    #de la case choisi (on part du principe que "oui"), True = la (les) case(s) existe(nt)
    #Variable qui détermine le sens du navire (Horizontale/Verticale)
    TupleCoord = list(Grille1[j][0])
    case_dessus = True
    case_dessous = True
    case_gauche = True
    case_droite = True
    #détermination des cases existante (quatre test)
    #Si les test sont "Vrais", alors les cases en question n'existent pas
    if TupleCoord[0]-20 < 105: #Y a-t-il une case à gauche ?
        case_gauche = False
    if TupleCoord[0]+20 > 485: #Y a-t-il une case à droite ?
        case_droite = False
    if TupleCoord[1]+20 > 485: #Y a-t-il une case en dessous ?
        case_dessous = False
    if TupleCoord[1]-20 < 105: #Y a-t-il une case au dessus ?
        case_dessus = False
                    
    #Travail sur les cases du dessus (si elles existent):
    if case_dessus == True: #Cases supérieures
        print("passage --> case dessus")
        Grille1[j-20][2] = 1 #On touche la case
        if case_droite == True: #Case supérieure droite (diagonale)
            print("passage --> case dessus droite")
            Grille1[j-19][2] = 1 #On touche la case
        if case_gauche == True: #Case  supérieure gauche (diagonale)
            print("passage --> case gauche")
            Grille1[j-21][2] = 1 #On touche la case 
        
    #Travail sur les cases du dessous (si elles existent):        
    if case_dessous == True: 
        print("passage --> case dessous")
        Grille1[j+20][2] = 1  #On touche la case
        if case_droite == True: #Case inférieure droite (diagonale)
            print("passage --> case dessous droite")
            Grille1[j+21][2] = 1 #On touche la case
        if case_gauche == True: #Case inférieure gauche (diagonale)
            print("passage --> case dessous gauche")
            Grille1[j+19][2] = 1 #On touche la case                          
            
    #Travail sur la case à gauche (si elle existe):          
    if case_gauche == True:
        print("passage --> case gauche")
        Grille1[j-1][2] = 1 #On touche la case
    #Travail sur la case à droite (si elle existe):        
    if case_droite == True:
        print("passage --> case droite")
        Grille1[j+1][2] = 1  #On touche la case                        
                
    #Détermination du type de navire (Horizontale/Verticale) à l'aide des variable H/V:                   
    if droite == True or gauche == True: #Le bateau est-il Horizontal ?
        #La technique utilisé pourra être réutiliser pour la programme "Coulage des Navires" de l'IA
        print("Check_Coulage_NavireH")                        
        Check_Coulage_NavireH(j, case_dessus, case_dessous)
    elif bas == True or haut == True: #Le bateau est-il Verticale ?
        #La technique utilisé pourra être réutiliser pour la programme "Coulage des Navires" de l'IA
        print("Check_Coulage_NavireV")                        
        Check_Coulage_NavireV(j, case_gauche, case_droite)
    print("FIN CHECK COULAGE DU NAVIRE") #Utile à savoir
示例#2
0
def Search_Ship(fenetre, CasePlayer1, RondBleu, CroixRouge, TextEAU, TextTOUCHE, TextCOULE, A_Z, Z_A, Random, Dico_IA, font, ImageBlanche): #On utilise certaines variables du Main
    global CaseIA
    global Choice
    global InAttaque
    global NbCoulIA
    global droite
    global gauche
    global haut
    global bas
    global NbAttaque
    global IndexCible
    global Reference
    global FirstCase
    #global IndexIntermforAttaque
    print("In Tour IA")
    print("NbAttaque = " + str(NbAttaque))
    Tour = False #Ini du Tour
    Choice = 0 #On prend en compte que la stratégie peut avoir changé entre temps, la réinitialisation de "Choice" s'impose donc
    if InAttaque == True: #l'IA essaie-t-il maintenant de couler un navire ?
        #IndexCible = IndexIntermforAttaque
        Attaque_Base_IA(Tour, Grille1, fenetre, CroixRouge, RondBleu, TextTOUCHE, TextEAU, TextCOULE, Dico_IA, font, ImageBlanche)
    else: #Alors il en recherche un
        print("\nIn Search Ship")
        while Tour == False: #Le tour est-il terminé ?
            #réini de l'attaque (une fois dans cette boucle, toute attaque est terminé)
            NbAttaque = 0
            droite = False
            gauche = False
            haut = False
            bas = False
            if A_Z == True: #Si Stratégie "Début vers Fin"
                #Détermination de la case
                IndexCible = Choice 
                Cible = CaseIA[IndexCible]
                print("cible = " + str(Cible))
                #Test de la case: A-t-elle déjà été touché ? (inclus, "est-t-elle à côté d'un bateau coulé ?")
                if Cible[2] == 0:
                    Code = Dico_IA[Cible[0]]
                    print(Code)
                    TextCase = font.render(Code, 1, (0,0,0))
                    fenetre.blit(TextCase, (115, 530))
                    CaseIA[IndexCible][2] = 1 #La case est maintenant touché
                    #print [c for c,Cible[0] in CasePlayer1.items() if CasePlayer1[c]==Cible[0]]
                    #Il y a-t-il un bateau sur la case touché ?
                    if Cible[1] == 0: 
                        #On affiche dans l'eau et on place un carrée bleu
                        print("DANS L'EAU")
                        fenetre.blit(RondBleu, CaseIA[IndexCible][0])  #Placement rond
                        fenetre.blit(TextEAU, (258, 530)) #Affichage du texte "Dans l'eau" sur le plateau
                        a = random.randint(1, 3)
                        if a == 1 :
                            TexteIAEauF(fenetre, font)
                    else:
                        #On affiche touché et on place un carrée rouge
                        print("TOUCHE")
                        print("IndexCible in CaseIA = " + str(IndexCible))
                        fenetre.blit(CroixRouge, CaseIA[IndexCible][0]) #Placement croix
                        fenetre.blit(TextTOUCHE, (258, 530)) #Affichage du texte "Touché" sur le plateau
                        a = random.randint(1, 2)
                        if a == 1 :
                            TexteIAImpactF(fenetre, font)
                        IndexCible = Grille1.index(Cible)
                        print("IndexCible in Grille1 = " + str(IndexCible))
                        #appelle fonction attaque
                        InAttaque = True
                        NbAttaque = NbAttaque + 1
                        Reference = Cible #On considère qu'on a touché la case de référence (ceci pourras être démenti par la suite)
                        FirstCase = IndexCible #Voici la première case touché (ne change plus jusqu'au prochain navire)
                    Tour = True #Fin du Tour de l'IA
            elif Z_A == True: #Si Stratégie "Fin vers Début"
                #Détermination de la case
                IndexCible = (-Choice)-1 # ==> Depuis la fin, ex: si Choice = 1, IndexCible = (-1)-1 = -2 (avant dernière case)
                Cible = CaseIA[IndexCible]
                print("cible = " + str(Cible))
                #Test de la case: A-t-elle déjà été touché ? (inclus, "est-t-elle à côté d'un bateau coulé ?")
                if Cible[2] == 0:
                    Code = Dico_IA[Cible[0]]
                    print(Code)
                    TextCase = font.render(Code, 1, (0,0,0))
                    fenetre.blit(TextCase, (115, 530))
                    CaseIA[IndexCible][2] = 1 #La case est maintenant touché
                    #print [c for c,Cible[0] in CasePlayer1.items() if CasePlayer1[c]==Cible[0]]
                    #Il y a-t-il un bateau sur la case touché ?
                    if Cible[1] == 0:
                        #On affiche dans l'eau et on place un carrée bleu
                        print("DANS L'EAU")
                        fenetre.blit(RondBleu, CaseIA[IndexCible][0])  #Placement rond
                        fenetre.blit(TextEAU, (258, 530)) #Affichage du texte "Dans l'eau" sur le plateau
                        a = random.randint(1, 3)
                        if a == 1 :
                            TexteIAEauF(fenetre, font)
                    else:
                        #On affiche touché et on place un carrée rouge
                        print("TOUCHE")
                        print("IndexCible in CaseIA = " + str(IndexCible))
                        fenetre.blit(CroixRouge, CaseIA[IndexCible][0]) #Placement croix
                        fenetre.blit(TextTOUCHE, (258, 530)) #Affichage du texte "Touché" sur le plateau
                        a = random.randint(1, 2)
                        if a == 1 :
                            TexteIAImpactF(fenetre, font)
                        IndexCible = Grille1.index(Cible)
                        print("IndexCible in Grille1 = " + str(IndexCible))
                        #appelle fonction attaque
                        InAttaque = True
                        NbAttaque = NbAttaque + 1
                        Reference = Cible #On considère qu'on a touché la case de référence (ceci pourras être démenti par la suite)
                        FirstCase = IndexCible #Voici la première case touché (ne change plus jusqu'au prochain navire)
                    Tour = True #Fin du Tour de l'IA
            elif Random == True: #Si Stratégie "Case Aléatoire"
                #Détermination de la case
                IndexCible = randint(0, (len(CaseIA)-1)) #==> Une case au hasard dans la liste
                Cible = CaseIA[IndexCible]
                print("cible = " + str(Cible))
                #Test de la case: A-t-elle déjà été touché ? (inclus, "est-t-elle à côté d'un bateau coulé ?")
                if Cible[2] == 0:
                    Code = Dico_IA[Cible[0]]
                    print(Code)
                    TextCase = font.render(Code, 1, (0,0,0))
                    fenetre.blit(TextCase, (115, 530))
                    CaseIA[IndexCible][2] = 1 #La case est maintenant touché
                    #print [c for c,Cible[0] in CasePlayer1.items() if CasePlayer1[c]==Cible[0]]
                    #Il y a-t-il un bateau sur la case touché ?
                    if Cible[1] == 0:
                        #On affiche dans l'eau et on place un carrée bleu
                        print("DANS L'EAU")
                        fenetre.blit(RondBleu, CaseIA[IndexCible][0])  #Placement rond
                        fenetre.blit(TextEAU, (258, 530)) #Affichage du texte "Dans l'eau" sur le plateau
                        a = random.randint(1, 3)
                        if a == 1 :
                            TexteIAEauF(fenetre, font)
                    else:
                        #On affiche touché et on place un carrée rouge
                        print("TOUCHE")
                        print("IndexCible in CaseIA = " + str(IndexCible))
                        fenetre.blit(CroixRouge, CaseIA[IndexCible][0]) #Placement croix
                        fenetre.blit(TextTOUCHE, (258, 530)) #Affichage du texte "Touché" sur le plateau
                        a = random.randint(1, 2)
                        if a == 1 :
                            TexteIAImpactF(fenetre, font)
                        IndexCible = Grille1.index(Cible)
                        print("IndexCible in Grille1 = " + str(IndexCible))
                        #appelle fonction attaque
                        InAttaque = True
                        NbAttaque = NbAttaque + 1
                        Reference = Cible #On considère qu'on a touché la case de référence (ceci pourras être démenti par la suite)
                        FirstCase = IndexCible #Voici la première case touché (ne change plus jusqu'au prochain navire)
                    Tour = True #Fin du Tour de l'IA
            Choice = Choice+1 #On passe à la case suivante (en cas d'échec)
    print("NbCoulIA in TourIA = " + str(NbCoulIA))