Duel en POO Python

Le programme

Le programme que j’ai créé est un programme que j’ai réalisé pour tester mes connaissance en POO avec python et la POO en général. Ainsi le joueur affronte donc une IA lors d’un combat au tour par tour, de plus les personnages on des attributs assigné aléatoirement en fonction de leur force. J’ai sécurisé le programme selon mes propres moyen et connaissance.

Voici le schéma que j’ai réalisé pour visualiser le fonctionnement de mon programme :

uml

à partir de ce uml j’ai pus développer de manière efficace mon projet en sachant ce que je devais prévoir vous pouvez trouver les différent fichier du projet ici (lancer le programme à partir du fichier « Start.py »)

voici le code des différentes classes :

Start.py qui a pour rôle de lancer le programme :

from CreationJoueur import NouveauJoueur
from Partie import JoueurEnPresence

if __name__ == '__main__':
    nom = str(input('Entrer le nom de votre personnage : '))
    prenom = str(input('Entrer le prenom de votre personnage : '))
    Joueur_humain = NouveauJoueur(nom,prenom)
    jeu = JoueurEnPresence(Joueur_humain)
    jeu.Duel()

CreationJoueur.py qui a pour rôle de créer les joueur à partir de la classe mère :

from Dueliste_Basique import Joueur_Basique
import random

class NouveauJoueur(Joueur_Basique):
    def __init__(self,nom,prenom):
        super().__init__(nom,prenom)
        NouveauJoueur.FixageDesAttributs(self)
        
    def FixageDesAttributs (self):
        a = 5#valeur minimal du random
        b = 20#valeur maximal du random
        f = self.force = random.randint(a,b)#creation de la force de maniere aleatoire 
        if self.force>15:
            self.defense = 3
            self.vie = 80
        elif ((self.force <= 15) and (self.force >10)):
            self.defense = 8
            self.vie = 90
        else:
            self.defense = 4
            self.vie = 100

Dueliste_Basique.py qui est la classe mère des joueur :

class Joueur_Basique:
    def __init__(self,nom,prenom):
        self.__Force = 0
        self.__Defense = 0
        self.__Vie = 1
        self.__Nom = nom
        self.__Prenom = prenom
        self.__Victoire = 0
        self.__Defaite = 0
    
    def setForce (self,force):
        self.__Force = force
    def getForce (self):
        return  self.__Force
    force = property(getForce,setForce)
    
    def setDefense (self,defense):
        self.__Defense = defense
    def getDefense(self):
        return self.__Defense
    defense = property(getDefense,setDefense)
    
    def setVie(self,vie):
        self.__Vie = vie
    def getVie (self):
        return self.__Vie
    vie = property (getVie,setVie) 
    
    def setNom (self,nom):
        self.__Nom = nom
    def getNom(self):
        return self.__Nom
    nom = property(getNom,setNom)
    
    def setPrenom (self,prenom):
        self.__Prenom = prenom
    def getPrenom(self):
        return self.__Prenom
    prenom = property(getPrenom,setPrenom)
    
    def setVictoire (self,victoire):
        self.__Victoire = victoire
    def getVictoire (self):
        return self.__Victoire
    victoire = property(getVictoire,setVictoire)
    
    def setDefaite (self,defaite):
        self.__Defaite = defaite
    def getDefaite (self):
        return self.__Defaite
    defaite = property(getDefaite,setDefaite)
        

et enfin Partie.py qui a pour rôle de réaliser la partie :

from CreationJoueur import NouveauJoueur
from random import randint

class JoueurEnPresence :
    def __init__(self,joueurdelapartie):
        self.__ordinateur = NouveauJoueur('Net','Sky')
        self.__humain = joueurdelapartie
        
    def Duel(self):
        n =int(input('Match en combien de victoire ? '))
        BackupVieHumain = self.__humain.vie
        BackupVieOrdinateur = self.__ordinateur.vie
        for z in range (0,n):
            print ('\n=======    Nouveau round    =======\n')
            self.__humain.vie = BackupVieHumain
            self.__ordinateur.vie = BackupVieOrdinateur
            while ((self.__ordinateur.vie>0)and(self.__humain.vie>0)):
                for j in range (0,2):
                    a = 0
                    b = 100
                    c = randint(a,b)#lancer de D pour savoir si le joueur reussi l'action
                    vieOrdinateur = self.__ordinateur.vie #sauvegarde du nombre de point de vie initiale
                    viehumain = self.__humain.vie  #sauvegarde du nombre de point de vie initiale
                    if (j%2==0) :
                        if ((c >= 50) and (c>10) and (c<90)) : VieEnMoins = self.__humain.force*3 - self.__ordinateur.defense if ( VieEnMoins > self.__ordinateur.vie ) :
                                VieEnMoins = self.__ordinateur.vie
                            print('\n{} {} reussi un coup normal et diminue de {} la vie de sont adversaire'.format(self.__humain.prenom,self.__humain.nom,VieEnMoins))
                            self.__ordinateur.vie = self.__ordinateur.vie-VieEnMoins 
                        elif (c < 50): print('\n{} {} rate son coup !'.format(self.__humain.prenom,self.__humain.nom)) elif ( c >= 90):
                            VieEnMoins = (self.__humain.force*6 - self.__ordinateur.defense)*2
                            if ( VieEnMoins > self.__ordinateur.vie ) :
                                VieEnMoins = self.__ordinateur.vie
                            print('\n{} {} reussi un coup critique et diminue de {} la vie de sont adversaire'.format(self.__humain.prenom,self.__humain.nom,VieEnMoins))
                            self.__ordinateur.vie = self.__ordinateur.vie-VieEnMoins 
                        else :
                            VieEnMoins = self.__humain.force
                            if ( VieEnMoins > self.__humain.vie ) :
                                VieEnMoins = self.__humain.vie
                            print('\n{} {} rate sont attaque et diminue sa vie de {} points de vie'.format(self.__humain.prenom,self.__humain.nom,VieEnMoins))
                            self.__humain.vie = self.__humain.vie-VieEnMoins
                    else :
                        if ((c >= 50) and (c>10) and (c<90)) : VieEnMoins = self.__ordinateur.force*3 - self.__humain.defense if ( VieEnMoins > self.__humain.vie ) :
                                VieEnMoins = self.__humain.vie
                            print('\n{} {} reussi un coup normal et diminue de {} la vie de sont adversaire'.format(self.__ordinateur.prenom,self.__ordinateur.nom,VieEnMoins))
                            self.__humain.vie = self.__humain.vie-VieEnMoins
                        elif (c < 50): print('\n{} {} rate son coup !'.format(self.__ordinateur.prenom,self.__ordinateur.nom)) elif ( c >= 90):
                            VieEnMoins = self.__ordinateur.force*6 - self.__humain.defense
                            if ( VieEnMoins > self.__humain.vie ) :
                                VieEnMoins = self.__humain.vie
                            print('\n{} {} reussi un coup critique et diminue de {} la vie de sont adversaire'.format(self.__ordinateur.prenom,self.__ordinateur.nom,VieEnMoins))
                            self.__humain.vie = self.__humain.vie-VieEnMoins
                        else :
                            VieEnMoins = self.__ordinateur.force
                            if ( VieEnMoins > self.__ordinateur.vie ) :
                                VieEnMoins = self.__ordinateur.vie
                            print('\n{} {} rate sont attaque et diminue sa vie de {} points de vie'.format(self.__ordinateur.prenom,self.__ordinateur.nom,VieEnMoins))
                            self.__ordinateur.vie = self.__ordinateur.vie - VieEnMoins 
            if ( self.__humain.vie == 0 ):
                self.__ordinateur.victoire += 1
                self.__humain.defaite +=1
                print('\n{} {} a gagner ce round; au total il a gagner {} fois et a perdu {} fois, il possede {} de force et {} de defense'.format(self.__ordinateur.prenom,self.__ordinateur.nom,self.__ordinateur.victoire,self.__ordinateur.defaite,self.__ordinateur.force,self.__ordinateur.defense))
            else :
                self.__humain.victoire += 1
                self.__ordinateur.defaite +=1
                print('\n{} {} a gagner ce round; au total il a gagner {} fois et a perdu {} fois, il possede {} de force et {} de defense'.format(self.__humain.prenom,self.__humain.nom,self.__humain.victoire,self.__humain.defaite,self.__humain.force,self.__humain.defense))
            self.__humain.vie = viehumain
            self.__ordinateur.vie = vieOrdinateur
        print('\n================ Resultat de la partie ================\n')
        if self.__humain.victoire == z :
            print('\n{} {} a gagner ! la partie avec {} victoire(s)  et {} defaite(s)'.format(self.__humain.prenom,self.__humain.nom,self.__humain.victoire,self.__humain.defaite))
            print('\n{} {} a perdu ! la partie avec {} victoire(s)  et {} defaite(s)'.format(self.__ordinateur.prenom,self.__ordinateur.nom,self.__ordinateur.victoire,self.__ordinateur.defaite))
        else :
            print('\n{} {} a gagner ! la partie avec {} victoire(s)  et {} defaite(s)'.format(self.__ordinateur.prenom,self.__ordinateur.nom,self.__ordinateur.victoire,self.__ordinateur.defaite))
            print('\n{} {} a perdu ! la partie avec {} victoire(s)  et {} defaite(s)'.format(self.__humain.prenom,self.__humain.nom,self.__humain.victoire,self.__humain.defaite))
            

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *