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
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))