Exemple #1
0
    def production_unite_defense_combat(self, X, Y):
        """
        Produit une unité de combat pour le défenseur, si celui-ci a suffisamment de ressources,
        sur la case qu'il a indiqué en entrée.
        Cette case doit cependant être comprise dans les emplacements de production
        disponibles.
        
        Paramètres :
        ------------
        X,Y : int
            Les coordonnées de la case sur laquelle le joueur veut placer l'unité.
        
        Renvoie :
        ----------
        Rien.
        
        """
        if (self.L_joueur[0].metal_tot >= Constante.cout_M_RC
                and self.L_joueur[0].energie_tot >= Constante.cout_E_RC):

            x_inf = (self.__xmax) // 2 - 1
            x_sup = (self.__xmax) // 2 + 2
            y_inf = (self.__ymax) // 2 - 1
            y_sup = (self.__ymax) // 2 + 2

            L_pos = self.placement_pos(x_inf, x_sup, y_inf, y_sup, ' ')

            if (X, Y) in L_pos:
                U = Robot_combat(self.L_joueur[0]._role, self._carte, X, Y)
                self.L_joueur[0]._liste_unite.append(U)
                self.L_joueur[0].metal_tot = self.L_joueur[
                    0].metal_tot - Constante.cout_M_P
                self.L_joueur[0].energie_tot = self.L_joueur[
                    0].energie_tot - Constante.cout_E_P
Exemple #2
0
    def production_unite_defense_combat(self):
        """
        Produit une unité de combat pour le défenseur, si celui-ci a suffisamment de ressources et avec son accord.
        Il doit également décider de la position de cette unité, parmi les positions possibles.
        
        Paramètres :
        ------------
        Aucun.
        
        Renvoie :
        ----------
        Rien.
        
        """
        if (self.L_joueur[0].metal_tot>=Constante.cout_M_RC and self.L_joueur[0].energie_tot>=Constante.cout_E_RC):
            choix_DH=input("construire un robot de combat?  (YES/NO)")
            if choix_DH=='YES':
                
                x_inf = (self.__xmax )//2 -1
                x_sup = (self.__xmax)//2 +2
                y_inf =  (self.__ymax)//2 - 1
                y_sup = (self.__ymax)//2 +2
                #A VERIF

                L_pos = self.placement_pos(x_inf,x_sup,y_inf,y_sup,' ')
                if len(L_pos) == 0:
                    print('Aucune position disponible, étape suivante. \n')
                else:
                    print('Positions possibles :', L_pos)
                    L = input('Envoyez la nouvelle position en x et en y (format x,y). \n')
                    k = L.find(',')
                    while k == -1:
                        print("Erreur de synthaxe. Recommencez svp")
                        L = input('Envoyez la nouvelle position en x et en y (format x,y). \n')
                        k = L.find(',')
                    X = int(L[0:k])
                    Y = int(L[k+1:])
                    while (X,Y) not in L_pos:
                        print("Position hors du rayon d'action de l'unité. \n")
                        L = input('Envoyez la nouvelle position en x et en y (format x,y). \n')
                        k = L.find(',')
                        X,Y = int(L[0:k]) , int(L[k+1:])
                U=Robot_combat(self.L_joueur[0]._role,self._carte,X,Y)
                self.L_joueur[0]._liste_unite.append(U)
                self.L_joueur[0].metal_tot=self.L_joueur[0].metal_tot-Constante.cout_M_P
                self.L_joueur[0].energie_tot=self.L_joueur[0].energie_tot-Constante.cout_E_P
                print("Energie restante :", self.L_joueur[0].energie_tot, "\n")
                print("Métal restant :", self.L_joueur[0].energie_tot, "\n")
                                                                    
            elif choix_DH=='NO':
                pass
Exemple #3
0
    def __init__(self,L_joueur,l =0):
        """
        Permet la création d'un objet carte.
        Cette initialisation a deux comportements différents, selon la variable 
        d'entrée l :
            *Si l = 0 : cela indique que l'objet carte crée ne correspond pas
            à une sauvegarde. Les variables de la carte sont donc initialisés 
            par rapport aux constantes ne correspondant pas à des variables de
            chargement.
            De plus, les objets de début de partie du défenseur (un QG, 4 unités
            de combat) sont créées.
            *Si l != 0 (l = 1 par convention): cela indique que l'objet carte crée 
            correspond à une sauvegarde. Les variables de la carte sont donc 
            initialisés par rapport aux constantes correspondant à des variables 
            de chargement. 
        
        Les murs délimitant la zone de construction, et impossible à traverser
        par les unités, sont également tracées dans la sous-carte de l'objet
        carte. 
        
        Paramètres
        ----------
        L_joueur : list
            La liste des objets Joueurs dans le jeu.
        
        l : int
            L'indice indiquant si l'objet carte doit être issu d'une sauvegarde
        ou non.
        
        Renvoie
        --------
        Rien

        """
        
        if l == 0 :
            
            self.__xmax = Constante.xmax
            self.__ymax = Constante.ymax  
            self.nbtour = Constante.nbt 
            self.tr_actuel = 0

            self.H=Constante.H_Z_Constructible
            self.L=Constante.L_Z_Constructible
            self.Epp = Constante.Ep_app
            self.Ltr_actuel = 0
            self.L_joueur = L_joueur
            self.ss_carte = np.array([[' ' for j in range(self.__ymax)] for i in range(self.__xmax)], dtype = object)
            B = QG(self.__xmax//2,self.__ymax//2,self)
            u1 = Robot_combat('DH',self,self.__xmax//2 -2,self.__ymax//2)
            u2 = Robot_combat('DH',self,self.__xmax//2,self.__ymax//2 +2)
            u3 = Robot_combat('DH',self,self.__xmax//2 +2,self.__ymax//2)
            u4 = Robot_combat('DH',self,self.__xmax//2,self.__ymax//2-2)
            
            self.L_joueur[0]._liste_bat[0].append(B)
            self.L_joueur[0]._liste_unite.append(u1)
            self.L_joueur[0]._liste_unite.append(u2)
            self.L_joueur[0]._liste_unite.append(u3)
            self.L_joueur[0]._liste_unite.append(u4)
            
        
        else : 
            self.__xmax = Constante.xL
            self.__ymax = Constante.yL  
            self.nbtour = Constante.Lnbt
            self.Ltr_actuel = Constante.Lnbta
            self.H=Constante.LH_Z_Constructible
            self.L=Constante.LL_Z_Constructible
            self.Epp = Constante.LEp_app
            self.L_joueur = L_joueur
            self.ss_carte = np.array([[' ' for j in range(self.__ymax)] for i in range(self.__xmax)], dtype = object)

            
        self.spawn_ress=Constante.spawn_ress

        self.TrHn = Un_Tour_Joueur_Hn(self)
        self.TrIA = Un_Tour_Joueur_IA(self)

        self.V_atta = 0


        # Trace les murs dans la sous-map
        for i in ( (self.__xmax - self.L )//2, (self.__xmax + self.L )//2-1 ):  # -1 ; -1
            #Trace les murs du haut et du bas, avec un trou au milieu de ces deux lignes.
            for j in range( (self.__ymax - self.H + 1)//2, self.__ymax//2 - 1):
                self.ss_carte[i][j] = '/'
            for j in range( self.__ymax//2 + 2, (self.__ymax + self.H )//2):
                self.ss_carte[i][j] = '/'
        for j in ( (self.__ymax -self.H)//2 , (self.__ymax + self.H )//2-1 ):
            # Trace les murs de gauche et de droite, avec un trou au milieu de ces deux colonnes
            for i in range( (self.__xmax - self.L +1)//2 , self.__xmax//2 -1 ):
                self.ss_carte[i][j] = '/'
            for i in range( self.__xmax//2 + 2, (self.__xmax + self.L )//2 ) :
                self.ss_carte[i][j] = '/'
    def process(self, L):
        """
        Effectue le processus de chargement de la partie, en testant les différentes chaînes de caractères de
        la liste L.
        
        Paramètres:
        ------------
        L : list
            Liste contenant toutes les chaînes de caractères de la sauvegarde; chaque élément de
            la liste correspond à une ligne de la sauvegarde.
            
        Renvoie : 
        ----------
        Rien.
        
        """
        Tst = ['S', 'R']
        if type(self.IHM) != str:
            self.IHM.tr_en_crs = 1
            self.IHM.tr_Hn_en_crs = 1
        while len(L) != 0:
            if L[0] == 'Carte':
                # Processus de recréation de la carte sauvegardée.
                Dims = L[2]
                Nbta = L[4]
                Nbt = L[6]
                U_disp = L[7]
                Jr_en_crs = L[8]
                L = L[9:]
                Dims = Dims[1:-1]
                k = Dims.find(',')
                X = int(Dims[0:k])
                Y = int(Dims[k + 1:])
                Constante.xL = X
                Constante.yL = Y
                if int(X / 2) % 2 == 0:
                    LL = int(X / 2) + 1
                else:
                    LL = int(X / 2)
                if int(Y / 2) % 2 == 0:
                    LH = int(Y / 2) + 1
                else:
                    LH = int(Y / 2)
                LEp = int(max(X, Y) / 20)
                Constante.LL_Z_Constructible = LL
                Constante.LH_Z_Constructible = LH
                Constante.LEp_app = LEp

                Constante.Lnbta = int(Nbta)

                Constante.Lnbt = int(Nbt)
                U_disp = float(U_disp)

                self.Lcarte = Map.Map([], 1, self.IHM)
                self.Lcarte.TrIA.unite_disp_par_tour = U_disp
                self.Lcarte.TrHn.unite_disp_par_tour = U_disp
                self.Lcarte.TrHn.Jr_en_crs = int(Jr_en_crs)
                print("Carte OK")

            while L[0] == 'Ressource':
                #Processus de chargement des ressources sauvegardées sur la carte.
                Val = L[1]
                Pos = L[2]
                L = L[4:]

                Pos = Pos[1:-1]
                k = Pos.find(',')
                X = int(Pos[0:k])
                Y = int(Pos[k + 1:])

                Val = int(Val)

                metal(X, Y, self.Lcarte, Val)
                print("Ressource OK")

            while L[0] == 'Joueur':
                # Processus de chargement des joueurs de la partie, et de leurs caractéristiques principales.
                Role = L[1]
                Metal_tot = int(L[2])
                Energie_tot = int(L[3])
                Ur = float(L[4])
                self.Jr = Joueur(Role)
                self.Lcarte.L_joueur.append(self.Jr)
                self.Jr.metal_tot = Metal_tot
                self.Jr.energie_tot = Energie_tot
                self.Jr.nbe_unite_restantes = Ur
                L = L[6:]
                while L[0] == 'Bat':

                    # Processus de chargement des batiments du joueur actuel.
                    Typ = L[1]
                    Sante = L[2]
                    Pos = L[3]
                    L = L[4:]
                    Sante = int(Sante)
                    Typ = Typ[-2:]
                    Pos = Pos[1:-1]
                    k = Pos.find(',')
                    X = int(Pos[0:k])
                    Y = int(Pos[k + 1:])
                    if Typ == "QG":
                        B = QG(X, Y, self.Lcarte)
                        B.sante = Sante
                        self.Jr._liste_bat[0].append(B)
                    elif Typ[0] == "P":
                        Id = int(Typ[1])
                        B = Panneau_solaire(X, Y, self.Lcarte)
                        B.sante = Sante
                        B.id = Id
                        self.Jr._liste_bat[1].append(B)
                    elif Typ[0] == "F":
                        Id = int(Typ[1])
                        B = Foreuse(X, Y, self.Lcarte)
                        B.sante = Sante
                        B.id = Id
                        self.Jr._liste_bat[2].append(B)
                if L[0] == "Fin bat":
                    print("Fin bat")
                    L = L[2:]

                while L[0] == "Unite":
                    # Processus de chargement des unités du joueur actuel.
                    k = -2
                    Typ = L[1]
                    Num_joueur = L[2]
                    Sante = L[3]
                    Pos = L[4]
                    if Role[1] == 'H':
                        Capmvt = int(L[5])
                        L = L[6:]
                    else:
                        L = L[5:]
                    tTyp = Typ[k:]
                    while tTyp[0] not in Tst:
                        k = k - 1
                        tTyp = Typ[k:]
                    Typ = tTyp
                    Num_joueur = int(Num_joueur)
                    Sante = int(Sante)
                    Pos = Pos[1:-1]
                    k = Pos.find(',')
                    X = int(Pos[0:k])
                    Y = int(Pos[k + 1:])
                    if Typ[0:2] == "RC":
                        Id = int(Typ[2:])
                        U = Robot_combat(Role, self.Lcarte, X, Y)
                        U.sante = Sante
                        U.capmvt = Capmvt
                        self.Jr._liste_unite.append(U)

                    elif Typ[0:2] == "RO":
                        Id = int(Typ[2:])
                        U = Robot_Ouvrier(Role, self.Lcarte, X, Y)
                        U.sante = Sante
                        U.capmvt = Capmvt
                        self.Jr._liste_unite.append(U)

                    elif Typ[0] == "S":
                        if len(Role) > 3 and Role[3] == "0":
                            Id = int(Typ[3:])
                            U = Scorpion0(Role, self.Lcarte, X, Y, Num_joueur)
                            U.sante = Sante
                            U.id = Id
                            self.Jr._liste_unite.append(U)

                        elif len(Role) > 3 and Role[3] == "1":
                            Id = int(Typ[3:])
                            U = Scorpion1(Role, self.Lcarte, X, Y, Num_joueur)
                            U.sante = Sante
                            U.id = Id
                            self.Jr._liste_unite.append(U)

                        elif Role[1] == "H":
                            Id = int(Typ[1:])
                            U = Scorpion(Role, self.Lcarte, X, Y, Num_joueur)
                            U.sante = Sante
                            U.id = Id
                            U.capmvt = Capmvt
                            self.Jr._liste_unite.append(U)

                if L[0] == "Fin unite":
                    print("Fin unite")
                    L = L[1:]

            if L[0] == "Fin sauvegarde":
                L = []
            else:
                L = L[1:]