def envoyerFlotte(self): if(self.vue.choisirNbVaisseaux.get() > 0): self.modele.humain.listeFlottes.append(Classes.flotteDeVaisseaux(self.vue.choisirNbVaisseaux.get(), self.modele.listeEtoiles[self.modele.etoileDepart], self.modele.listeEtoiles[self.modele.etoileArrivee], 1, self.modele.temps_courant)) self.modele.listeEtoiles[self.modele.etoileDepart].nbVaisseaux -= self.vue.choisirNbVaisseaux.get() etoileDepart = None etoileDepart = None self.vue.surfaceJeu.delete("selection") self.vue.choisirNbVaisseaux.set(0) self.vue.choisirNbVaisseaux.place_forget() self.vue.boutonEnvoyerFlotte.place_forget()
def deroulerTour(self): #Tour des Gubrus if(not self.modele.gubrus.mort): #Envoyer flottes vers planete la plus proche self.modele.gubrus.listeFlottes.append(Classes.flotteDeVaisseaux(self.modele.listeEtoiles[self.modele.gubrus.etoileMere].nbVaisseaux,self.modele.listeEtoiles[self.modele.gubrus.etoileMere],self.modele.gubrus.strategieAttaque(self.modele),2,self.modele.temps_courant)) #Tour des Czin #Si les Czins sont toujours en vie if(not self.modele.czin.mort): #Si les Czins sont en mode rassemblement_force if(self.modele.czin.rassemblement_force): #Si on possede une armada soit 3 x force_attaque if(self.modele.listeEtoiles[self.modele.czin.base].nbVaisseaux >= self.modele.czin.forceAttaque(self.modele.temps_courant)*3): #Envoyer l'Armada vers la base prospective self.modele.listeFlottes.append(Classes.flotteDeVaisseaux(self.modele.listeEtoiles[self.modele.czin.base].nbVaisseaux, self.modele.listeEtoiles[self.modele.czin.base], self.modele.czin.etablirBase(self.modele), 3, self.modele.temps_courant)) self.self.modele.listeEtoiles[self.modele.czin.base].nbVaisseaux = 0 self.modele.czin.listePossessionsFlottes.append(len(self.modele.listeFlottes)-1) self.modele.czin.rassemblement_force = False self.modele.czin.etablir_base = True #Si les Czins on plusieurs Etoiles elif(len(self.modele.czin.listePossessions) > 1): planeteProche = False #Pour tous les numeros d'etoile que les Czins possedent for numero in self.modele.czin.listePossession: print("infinie") #Pour calculer la distance differenceX = abs(self.modele.listeEtoiles[numero].posX - modele.listeEtoiles[sel.modele.czin.base].posX) differenceY = abs(self.modele.listeEtoiles[numero].posY - modele.listeEtoiles[sel.modele.czin.base].posY) #Calculer la distance a l'aide du theoreme de pythagore distance=math.sqrt(math.pow(differenceX, 2)+math.pow(differenceY, 2)) #Si les etoiles sont a distance rassemblement if(distance <= 6): planeteProche = True #Si le nombre de vaisseau sur cette etoile est plus grand que 3 if(self.modele.listeEtoile[numero] > 3): #Choisir le nombre de vaisseaux a envoyer sur la base soit nbVaisseaux - 3 vaisseauxAEnvoyer = self.modele.listeEtoile[numero].nbVaisseaux - 3 #Creation de la flotte de Vaisseau self.modele.listeFlottes.append(Classes.flotteDeVaisseaux(vaisseauxAEnvoyer, self.modele.listeEtoile[numero], self.modele.listeEtoile[self.modele.czin.base], 3, self.modele.temps_courant)) self.modele.listeEtoile[numero].nbVaisseaux -= vaisseauxAEnvoyer self.modele.listeFlottes[len(self.modele.listeFlottes)-1].armada = True self.modele.czin.listePossessionsFlottes.append(len(self.modele.listeFlottes)-1) #On enleve les vaisseaux sur l'etoile une fois la flotte creee self.modele.listeEtoile[numero].nbVaisseaux = self.modele.listeEtoile[numero].nbVaisseaux - vaiseauxAEnvoyer #Si il n'y a pas d'etoile a distance rassemblement de la base changer la base pour l'etoile mere if(not planeteProche): self.modele.czin.base = self.modele.czin.etoileMere #Si on est en mode conquerir_grappe if(self.modele.czin.conquerir_grappe): etoileABonneDistance = False for etoileAConquerir in self.modele.listeEtoiles: #Pour calculer la distance differenceX = abs(etoile.posX - modele.listeEtoiles[sel.modele.czin.base].posX) differenceY = abs(etoile.posY - modele.listeEtoiles[sel.modele.czin.base].posY) #Calculer la distance a l'aide du theoreme de pythagore distance=math.sqrt(math.pow(differenceX, 2)+math.pow(differenceY, 2)) #Si cette toile est a distance grappe if(distance <= self.czin.DISTANCE_GRAPPE): #Si il y a une etoile a la bonne distance etoileABonneDistance = True #Si le nombre de vaisseau sur la base est plus grand ou egal a froce_attaque if(self.modele.listeEtoiles[self.modele.czin.base] >= self.modele.czin.forceAttaque(self.modele.temps_courant)): self.modele.listeFlottes.append(Classes.flotteDeVaisseaux(self.modele.czin.forceAttaque(self.modele.temps_courant), self.modele.listeEtoile[self.modele.czin.base], etoileAConquerir, 3, self.modele.listeEtoiles.index(etoileAConquerir), self.modele.temps_courant)) self.modele.listeEtoile[self.modele.czin.base].nbVaisseaux -= self.modele.czin.forceAttaque(self.modele.temps_courant) self.modele.czin.listePossessionsFlottes.append(len(self.modele.listeFlottes)-1) #Sinon on sort de la boucle puisqu'il n'y a pas assez de vaisseaux sur la base else: break if(not etoileABonneDistance): self.modele.czin.rassemblement_force = True self.modele.czin.conquerir_grappe = False #Evaluer chaque dixieme d'annee for i in range(0,10): #Pour chaque flotte Czin for flotte in self.modele.czin.listeFlottes: #Si la flotte est arrivee a destination if(round(flotte.anneeArrivee, 1) == self.modele.temps_courant+(i/10)): print("Une flotte Czin est arrivee!") #Si la planete est ennemi self.combatVaisseau(flotte, flotte.destination) if(flotte.armada): self.modele.czin.etablir_base = False self.modele.czin.conquerir_grappe = True #Pour chaque flotte Humaine for flotte in self.modele.humain.listeFlottes: #Si la flotte est arrivee a destination if(round(flotte.anneeArrivee, 1) == self.modele.temps_courant+(i/10)): print("Une flotte Humaine est arrivee!") #Si la planete est ennemi self.combatVaisseau(flotte, flotte.destination) #Pour chaque flotte Gubrus for flotte in self.modele.gubrus.listeFlottes: #Si la flotte est arrivee a destination if(round(flotte.anneeArrivee, 1) == self.modele.temps_courant+(i/10)): print("Une flotte Gubru est arrivee!") #Si la planete est ennemi self.combatVaisseau(flotte, flotte.destination) #Generer des vaisseaux for etoile in self.modele.listeEtoiles: etoile.genererVaisseau() print(etoile.nbVaisseaux) #Update les informations self.vue.choisirNbVaisseaux.place_forget() self.vue.boutonEnvoyerFlotte.place_forget() self.vue.surfaceJeu.delete("selection") self.vue.surfaceJeu.delete("info") self.modele.temps_courant += 1 self.vue.labelAnnee.config(text="Annee : "+str(self.modele.temps_courant)) #Update les logo ainsi que la map self.vue.afficherProprietaire(self.modele) self.vue.afficherMap(self.modele)