/// <summary> /// Création d'un nouvel héros pour la faction courante /// </summary> /// <param name="nom">nom du héros</param> /// <param name="femme">true si femme</param> /// <param name="allies">true si on ajoute des alliés</param> public void createHeros(string nom, bool femme, bool allies) { // Choix de la ville List <VilleDescription> villesFaction = new List <VilleDescription>(); foreach (VilleDescription vd in _jeu.villes.villeDesc) { if (vd.faction == _jeu.tourFaction) { villesFaction.Add(vd); } } if (villesFaction.Count != 0) { VilleDescription vd = villesFaction[_jeu.rnd.Next(villesFaction.Count)]; int herosType = femme ? TYPE_HEROS : TYPE_HEROINE; Creature heros = new Creature(_jeu, herosType, vd.faction, vd.positionMap); heros.vraiNom = nom; // Possède un étendard heros.addItem(_jeu.items.itemDesc[Items.ETENDARD]); Armee armee = new Armee(_jeu); armee.addCreature(heros); // Alliés éventuels : types 19-27 int nbAllie = 0; if (allies) { int typeAllie = _jeu.rnd.Next(TYPE_ALLIEMAX + 1 - TYPE_ALLIEMIN) + TYPE_ALLIEMIN; nbAllie = _jeu.rnd.Next(3) + 1; for (int i = 0; i < nbAllie; i++) { armee.addCreature(new Creature(_jeu, typeAllie, vd.faction, vd.positionMap)); } } armee.positionCarte = armee.getPositionLibre(armee.positionCarte, false, false).Value; _jeu.addArmee(armee); if (allies) { _jeu.messageInfo = nom + " est accompagné" + (femme ? "e" : "") + " de " + nbAllie + " allié" + (nbAllie > 1 ? "s" : "") + " et se trouve à " + vd.nom; } else { _jeu.messageInfo = nom + " se trouve à " + vd.nom; } } }
/// <summary> /// Production des villes /// </summary> public void productions() { foreach (VilleDescription vd in villeDesc) { if (vd.productionCourante != -1) { vd.productionPoints++; int coutPP = vd.geNbToursPourCreatures(_jeu.creatures.description[vd.typeCreatures[vd.productionCourante]].cout); if (vd.productionPoints >= coutPP) { vd.productionPoints -= coutPP; // Ajoute la créature Creature crea = new Creature(_jeu, vd.typeCreatures[vd.productionCourante], vd.faction, vd.positionMap); Armee armee = new Armee(_jeu); armee.addCreature(crea); _jeu.addArmee(armee); } } } }
/// <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); }