예제 #1
0
        public void go(GameTime gameTime)
        {
            // Suit la trajectoire
            if ((_trajectoire != null) && (_trajectoire.chemin.Count != 0) &&
                (_trajectoire.chemin[0].tourCourant) && (this.getMouvementRestantMin() > 0))
            {
                Point nextPos = _trajectoire.chemin[0].point;
                // Interpolation entre positions
                interpolation += ((float)gameTime.ElapsedGameTime.Milliseconds) / 100f;
                positionEcran  = new Point((int)((float)_jeu.blockSize * ((float)positionCarte.X + interpolation * (float)(nextPos.X - positionCarte.X))),
                                           (int)((float)_jeu.blockSize * ((float)positionCarte.Y + interpolation * (float)(nextPos.Y - positionCarte.Y))));

                // Centre sur créature
                _jeu.terrain.zoomSur(positionEcran);

                if (interpolation >= 1)
                {
                    positionCarte = nextPos;
                    // prépare la suite
                    _trajectoire.chemin.RemoveAt(0);
                    // enlève le mouvement adéquat
                    foreach (Creature crea in _troupe)
                    {
                        crea.mouvementCourant -= crea.getMouvementCost(positionCarte, this);
                    }
                    interpolation = 0;
                }
            }
            else
            {
                _jeu.selectedArmeeGO = false;
                // Si à la position cible il y a une armée amie, les fusionne
                // fusion des armées si une armée est déjà à cet emplacement
                foreach (Armee autre in _jeu.armees)
                {
                    if ((autre != this) && (autre.positionCarte == positionCarte))
                    {
                        // Que si il y a la place
                        if ((autre.getTaille() + getTaille()) <= Armee.MAX_TAILLE)
                        {
                            ajouteTroupes(autre);
                            // Suppression de autre
                            _jeu.removeArmee(autre);
                        }
                        break;
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Combat jusqu'au bout, en mode non graphique
        /// l'armée perdante est retirée du jeu
        /// </summary>
        /// <returns>true si l'attaquant gagne, false sinon</returns>
        public bool combatAuto()
        {
            bool res = false;

            do
            {
                do
                {
                    res = unRound(true);
                } while (!roundSuivant(res));

                Armee perdante = res ? _defense : _attaque;
                _jeu.removeArmee(perdante);
                // Si l'attaquant a perdu, on arrête
                if (!res)
                {
                    break;
                }
            } while (armeeSuivante(false));
            return(res);
        }
예제 #3
0
        /// <summary>
        /// Fouille une ruine
        /// </summary>
        /// <param name="heros">héros visiteur</param>
        /// <param name="ruine">ruine visitée</param>
        /// <param name="nomEnnemi">en sortie, le nom de l'ennemi rencontré</param>
        /// <param name="nomRecompense">en sortie (si vainqueur), le nom de la récompense</param>
        /// <returns>true si le héros gagne, false s'il meurt</returns>
        ///
        public bool fouilleRuine(Creature heros, RuineDescription ruine, ref string nomEnnemi, ref string nomRecompense)
        {
            // Détermine l'ennemi à combattre
            Creature ennemi;

            switch (_jeu.rnd.Next(3))
            {
            case 0:
                ennemi    = new Creature(_jeu, Creatures.TYPE_GRIFFON, 0, heros.positionCarte);
                nomEnnemi = "un griffon";
                break;

            case 1:
                ennemi    = new Creature(_jeu, Creatures.TYPE_GEANT, 0, heros.positionCarte);
                nomEnnemi = "un géant des montagnes";
                break;

            default:
                ennemi    = new Creature(_jeu, Creatures.TYPE_SORCIERE, 0, heros.positionCarte);
                nomEnnemi = "une sorcière";
                break;
            }
            Armee aheros = new Armee(_jeu);

            aheros.addCreature(heros);

            Armee aennemi = new Armee(_jeu);

            aennemi.addCreature(ennemi);
            List <Armee> garnison = new List <Armee>();

            garnison.Add(aennemi);

            Combat combat     = new Combat(_jeu, aheros, garnison);
            bool   herosGagne = combat.combatAuto();

            // Détermine la récompense : item, troupe ou argent
            nomRecompense = "";
            if (herosGagne)
            {
                ruine.visite = true;
                if (ruine.item != null)
                {
                    nomRecompense = "l'objet : " + ruine.item.nom;
                    heros.addItem(ruine.item);
                }
                else if (_jeu.rnd.Next(4) == 0)
                {
                    int montant = _jeu.rnd.Next(1500) + 500;
                    nomRecompense = montant + " pièces d'or";
                    _jeu.factions.getFaction(_jeu.tourFaction).or += montant;
                }
                else
                {
                    // Alliés
                    Armee allies    = new Armee(_jeu);
                    int   typeAllie = _jeu.rnd.Next(Creatures.TYPE_ALLIEMAX + 1 - Creatures.TYPE_ALLIEMIN) + Creatures.TYPE_ALLIEMIN;
                    int   nbAllie   = _jeu.rnd.Next(2) + 2;
                    for (int i = 0; i < nbAllie; i++)
                    {
                        allies.addCreature(new Creature(_jeu, typeAllie, _jeu.tourFaction, heros.positionCarte));
                    }
                    _jeu.addArmee(allies);
                    nomRecompense = nbAllie + " alliés";
                }
            }
            else
            {
                // Suppression du héros du jeu
                if (_jeu.selectedArmee.getTaille() == 1)
                {
                    _jeu.removeArmee(_jeu.selectedArmee);
                    _jeu.selectedArmee = null;
                }
                else
                {
                    _jeu.selectedArmee.removeCreature(heros);
                }
            }

            return(herosGagne);
        }