def placer_un_Panneau_solaire(self):
        """
        Permet au joueur s'il le souhaite et s'il en a le droit de construire le batiment Panneau solaire
        Mets également à jour la quantité de ressource à sa disposition
        """

        if (self.L_joueur[0].metal_tot >= Constante.cout_M_P
                and self.L_joueur[0].energie_tot >= Constante.cout_E_P):
            choix2 = input("placer Panneau solaire ? (YES/NO)")
            if choix2 == 'YES':
                x_inf_b = (self.__xmax - self.L) // 2 + 1
                x_sup_b = (self.__xmax + self.L) // 2
                y_inf_b = (self.__ymax - self.H) // 2 + 1
                y_sup_b = (self.__ymax + self.H) // 2
                #Noter que x_inf et x_sup doivent être +1 par rapport à leur valeur réelle (pour bien tout sélectionner dans la matrice)

                L_pos = self.placement_pos_bat(x_inf_b, x_sup_b, y_inf_b,
                                               y_sup_b, ' ')
                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 = Panneau_solaire(X, Y, self._carte)
                    self.L_joueur[0]._liste_bat[1].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")
Exemple #2
0
    def testRessources_tot(self):
        """
        Test vérifiant qu'après avoir ajouté trois foreuses et 3 panneaux solaires,
        et après 10 tours de jeu sans avoir effectué aucune dépense, que le défenseur 
        ait bien le bon total de ressources.
        """
        Def = Game.L_joueur[0]
        for i in range(3):
            X = i
            Y = i
            Def._liste_bat[1].append(Panneau_solaire(X,Y,Carte))
            Def._liste_bat[2].append(Foreuse(X+1,Y+1,Carte))
        for k in range(10):
            Carte.ressource_tot()

        M = 10*(Constante.prod_M_F*3 + Constante.prod_M_QG)+Constante.metal_tot
        E = 10*(Constante.prod_E_P*3 + Constante.prod_E_QG)+Constante.energie_tot
        self.assertEqual(Def.metal_tot,M)
        self.assertEqual(Def.energie_tot,E)
Exemple #3
0
    def placer_un_Panneau_solaire(self, X, Y):
        """
        Permet au joueur, s'il en a le droit, de construire le batiment 
        Panneau solaire sur la case dont il a indiqué les coordonnées en entrée.
        Cette case doit cependant être comprise dans les emplacements de construction
        disponibles.
        Met également à jour la quantité de ressource à sa disposition.
        
        Paramètres : 
        -------------
        X,Y : int
            Les coordonnées de la case sur laquelle le joueur veut placer le batiment.
        
        Renvoie :
        ----------
        Rien.
        
        """

        if (self.L_joueur[0].metal_tot >= Constante.cout_M_P
                and self.L_joueur[0].energie_tot >= Constante.cout_E_P):

            x_inf_b = (self.__xmax - self.L) // 2 + 1
            x_sup_b = (self.__xmax + self.L) // 2 - 1
            y_inf_b = (self.__ymax - self.H) // 2 + 1
            y_sup_b = (self.__ymax + self.H) // 2 - 1

            L_pos = self.placement_pos_bat(x_inf_b, x_sup_b, y_inf_b, y_sup_b,
                                           ' ')

            if (X, Y) in L_pos:
                U = Panneau_solaire(X, Y, self._carte)
                self.L_joueur[0]._liste_bat[1].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
    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:]