Ejemplo n.º 1
0
	} //CoroutineRonde


    /// <summary>
    /// Identifie le prochain combattant et sa victime, puis declenche son action.
    /// Au besoin, peut aussi lancer la prochaine ronde, la victoire ou la defaite.
    /// </summary>
	private void DeclencherActionSuivante() {
        if(_lesCombattantsRonde.Count > 0){
            if(_lesCombattantsRonde[0].PVAct>0){ //le combattant est encore vivant...
                Etre combattant = _lesCombattantsRonde[0];
                Etre victime = TrouverVictime(combattant);

                _messAction = combattant.Attaquer(victime); //l'attaque se deroule dans Etre
                AfficherMessage(_messAction);

                //Est-ce la fin du combat? :
                if(ListerLesVivants(TypeEtre.PERSO).Count == 0){ //tous les persos sont morts
                    StartCoroutine( CoroutinePerdre() ); 
                } else if(ListerLesVivants(TypeEtre.MONSTRE).Count == 0){ //tous les monstres sont morts
                    StartCoroutine( CoroutineGagner() );
                } else { //ce n'est pas fini
                    _lesCombattantsRonde.RemoveAt(0); //apres son tour, le combattant est retire de la ronde
                } //if

            } else { //le combattant est deja mort...
                //Debug.Log(_lesCombattantsRonde[0].nom + " est mort durant cette ronde, au suivant!");
                _lesCombattantsRonde.RemoveAt(0); //le combattant mort est elimine de la ronde
                DeclencherActionSuivante(); //on passe au suivant sans attendre le delai habituel
            }//if+else (est vivant)
        } //if
	} //DeclencherActionSuivante
Ejemplo n.º 2
0
    }     //MettreAJourStats

    /// <summary>
    /// Execute l'attaque d'un combattant
    /// </summary>
    /// <param name="victime">Instance de la victime cible.</param>
    /// <returns>La chaine decrivant le deroulement de cette action.</returns>
    public string Attaquer(Etre victime)
    {
        string messAction = "";
        int    attaque = 0, defense = 0, dommages = 0; //valeurs par defaut

        if (action == TypeAction.ATTAQUE)
        {
            attaque  = EtablirAttRonde();
            defense  = victime.EtablirDefRonde();
            dommages = Combat.CalculerDommages(attaque, defense);
            victime.Blesser(dommages);
            messAction = FormerPhraseAtt(dommages, victime);
            JouerAnimAttaque();
        }
        else                 //c'est donc la magie
        {
            ConsommerPM(10); //reduction des points de magie
            attaque = EtablirAttMagRonde();
            defense = victime.EtablirDefMagRonde();
            if (nom != "Lucem") //ce n'est pas Lucem
            {
                dommages = Combat.CalculerDommages(attaque, defense);
                victime.Blesser(dommages);
            }
            else     //c'est Lucem, sa magie est difference:
            {
                dommages = attaque;
                Jeu.Soigner(dommages, false); //applique la guerison a tous les persos
            } //if+else Lucem?
            messAction = FormerPhraseAttMag(dommages, victime);
            JouerAnimAttaque(); //a changer pour montrer une anim de magie
        } //if+else TypeAction
        return(messAction);
    } //Attaquer
Ejemplo n.º 3
0
    } //FormerPhraseAttMag

    /// <summary>
    /// Prepare et retourne une phrase qui explique le resultat de l'attaque magique.
    /// </summary>
    /// <param name="valeur">Les dommages ou points recuperes.</param>
    /// <param name="victime">La cible de l'attaque.</param>
    /// <returns>La phrase finale.</returns>
    protected string FormerPhraseAttMag(int valeur, Etre victime = null)
    {
        string messAction   = "";
        string boutDePhrase = " lance un sort à "; //valeur par defaut

        if (_dictBasesPhrasesMagiques.ContainsKey(nom))
        {
            //il y a une entree au dictionnaire:
            boutDePhrase = _dictBasesPhrasesMagiques[nom];
        } //if

        if (nom == "Lucem")
        {
            messAction = nom + boutDePhrase + valeur + " point" + ((valeur > 1)?"s.":".");
        }
        else
        {
            messAction = nom + boutDePhrase + victime.nom + ", causant " + valeur + " point" + ((valeur > 1)?"s":"") + " de dommage.";
        } //if+else

        return(messAction);
    } //FormerPhraseAttMag
Ejemplo n.º 4
0
	} //DeclencherActionSuivante


    /// <summary>
    /// Trouve la victime correspondante pour un combattant (Monstre ou Perso).
    /// </summary>
    /// <param name="leCombattant">Instance du combattant.</param>
    /// <returns>Instance de la victime.</returns>
    private Etre TrouverVictime(Etre leCombattant){
        Etre victime = null;
        int iCible; // indice de la cible dans la liste correspondante (Jeu.lesPersos ou _lesMonstres)
        List<Etre> lesOpposantsVivants;
        TypeEtre typeVictime;
        if(leCombattant is Monstre){
            typeVictime = TypeEtre.PERSO;
        } else {
            typeVictime = TypeEtre.MONSTRE;
        }//if+else (Monstre ou Perso)
        lesOpposantsVivants = ListerLesVivants(typeVictime);
        if(lesOpposantsVivants.Count>0){
            if(leCombattant is Monstre){
                ((Monstre)leCombattant).ChoisirAction(TypeAction.HASARD); //leCombattant est «casté» comme Monstre
                iCible = Random.Range(0, lesOpposantsVivants.Count);
            } else {
                // les persos visent toujours le 1er vivant disponible (une meilleure mecanique pourrait etre implantee)
                iCible = 0; 
            }//if+else (Monstre ou Perso)                                           
            victime = lesOpposantsVivants[iCible]; ////identification de la victime (la cible)
        } //if opposants vivants
        return victime; //null si pas de victime possible
    } //TrouverVictime
Ejemplo n.º 5
0
    } //Attaquer

    /// <summary>
    /// Prepare et retourne une phrase qui explique le resultat de l'attaque.
    /// </summary>
    /// <param name="valeur">Les dommages ou points recuperes.</param>
    /// <param name="victime">La cible de l'attaque.</param>
    /// <returns>La phrase finale.</returns>
    virtual protected string FormerPhraseAtt(int valeur, Etre victime = null)
    {
        string messAction = nom + " fait " + valeur + " point" + ((valeur > 1)?"s":"") + " de dommage sur " + victime.nom + ".";

        return(messAction);
    } //FormerPhraseAttMag