public void Flammethrower(IBaseTroop target) { string log = String.Empty; log += "Jango_Fett brule " + target.GetType().Name + " en " + target.Position.Txtpos + " et lui inflige 12 points de dégats ! (PV " + target.GetType().Name + " restants : " + target.MaxHP + ")"; target.Remaining_HP -= 12; }
/// <summary> /// Attaque DjemSo /// </summary> /// <param name="target">Cible de l'attaque</param> public void AttaqueDjemSo(IBaseTroop target) { string log = String.Empty; log += "Anakin bondit sur " + target.GetType().Name + " en " + target.Position.Txtpos + " et lui inflige 12 points de dégats ! (PV " + target.GetType().Name + " restants : " + target.MaxHP + ")"; target.Remaining_HP -= 12; }
public void MakashiiStrike(IBaseTroop target) { string log = String.Empty; log += "Dooku tranche " + target.GetType().Name + " en " + target.Position.Txtpos + " et lui inflige 12 points de dégats ! (PV " + target.GetType().Name + " restants : " + target.MaxHP + ")"; target.Remaining_HP -= 12; }
public void LightningStrike(IBaseTroop target) { string log = String.Empty; log += "Dark_Sidious lance des éclairs sur " + target.GetType().Name + " en " + target.Position.Txtpos + " et lui inflige 15 points de dégats ! (PV " + target.GetType().Name + " restants : " + target.MaxHP + ")"; target.Remaining_HP -= 15; }
public void SoresuStrike(IBaseTroop target) { string log = String.Empty; log += "ObiWan attaque " + target.GetType().Name + " en " + target.Position.Txtpos + " et lui inflige 12 points de dégats ! (PV " + target.GetType().Name + " restants : " + target.MaxHP + ")"; target.Remaining_HP -= 12; }
/// <summary> /// Attaque blaster /// </summary> /// <param name="target">Cible de l'attaque</param> public void ShootBlasterRifle(IBaseTroop target) { int range = 20; string log = String.Empty; log += "CloneTrooper en " + this.Position.Txtpos + " utilise son blaster sur " + target.GetType().Name + " en " + target.Position.Txtpos; target.Remaining_HP -= 5; if (target.Remaining_HP > 0) { log += "( PV " + target.GetType().Name + " restants: " + target.Remaining_HP + ") "; } }
/// <summary> /// Attaque lance-roquettes /// </summary> /// <param name="target">Cible de l'attaque</param> public void ShootRocketLauncher(IBaseTroop target) { int range = 20; string log = String.Empty; log += "Serge nt Trooper en " + this.Position.Txtpos + " utilise son lance-roquette sur " + target.GetType().Name + " en " + target.Position.Txtpos + "Et lui inflige 10 points de dégats ! ";; target.Remaining_HP -= 10; if (target.Remaining_HP > 0) { log += "( PV " + target.GetType().Name + " restants: " + target.Remaining_HP + ") "; } }
/// <summary> /// Attaque fusil laser double /// </summary> /// <param name="target">Cible de l'attaque</param> public void ShootLaserRifle(IBaseTroop target) { int range = 20; string log = String.Empty; log += "Droide B2 en " + this.Position.Txtpos + " utilise son double fusil laser sur " + target.GetType().Name + " en " + target.Position.Txtpos + "Et lui inflige 8 points de dégats ! ";; target.Remaining_HP -= 8; if (target.Remaining_HP > 0) { log += "( PV " + target.GetType().Name + " restants: " + target.Remaining_HP + ") "; } }
/// <summary> /// Method pour détecter un ennemi à proximité /// </summary> /// <param name="listOfTroops">Liste des troupes</param> /// <param name="baseTroop">Troupe qui cherche un ennemi</param> /// <param name="indexMatrice">Taille de la grille du jeu</param> /// <returns>Une troupe ennemie détectée ou null si rien n'est détecté</returns> public IBaseTroop CheckAroundForTroop(List <IBaseTroop> listOfTroops, IBaseTroop baseTroop, int indexMatrice) { int absciss = Tools.Tools.ConvertFromStringBase26(baseTroop.Position.Absciss); int ordinate = baseTroop.Position.Ordinate; if (absciss - 1 >= 0) { for (int i = 0; i < listOfTroops.Count; i++) { if (listOfTroops[i].Position.Absciss == Tools.Tools.ConvertToStringBase26(absciss - 1).Replace(" ", "") && listOfTroops[i].Position.Ordinate == ordinate && listOfTroops[i].Forceside != baseTroop.Forceside) { return(listOfTroops[i]); } } } if (absciss + 1 < indexMatrice) { for (int i = 0; i < listOfTroops.Count; i++) { if (listOfTroops[i].Position.Absciss == Tools.Tools.ConvertToStringBase26(absciss + 1).Replace(" ", "") && listOfTroops[i].Position.Ordinate == ordinate && listOfTroops[i].Forceside != baseTroop.Forceside) { return(listOfTroops[i]); } } } if (ordinate - 1 >= 1) { for (int i = 0; i < listOfTroops.Count; i++) { if (listOfTroops[i].Position.Absciss == baseTroop.Position.Absciss && listOfTroops[i].Position.Ordinate == ordinate - 1 && listOfTroops[i].Forceside != baseTroop.Forceside) { return(listOfTroops[i]); } } } if (ordinate + 1 < indexMatrice + 1) { for (int i = 0; i < listOfTroops.Count; i++) { if (listOfTroops[i].Position.Absciss == baseTroop.Position.Absciss && listOfTroops[i].Position.Ordinate == ordinate + 1 && listOfTroops[i].Forceside != baseTroop.Forceside) { return(listOfTroops[i]); } } } return(null); }
/// <summary> /// Choix du personnage jouable /// </summary> /// <returns>Classe de PJ sélectionnée par l'utilisateur</returns> private IBaseTroop ChooseCharacter() { CustomConsole.RightOffsetWriteLine("Personnages jouables disponibles ..."); int cpt = 1; foreach (Tuple <string, string> playable in EntitiesManager.Playablesstats) { CustomConsole.RightOffsetWriteLine(cpt + "-" + playable.Item1 + " : " + playable.Item2); cpt++; } CustomConsole.RightOffsetWriteLine("Veuillez saisir le numéro du personnage choisi ..."); var input = Console.ReadLine(); int rslt; int.TryParse(input, out rslt); if (rslt < EntitiesManager.Playablesstats.Count + 1 && rslt > 0) { string name = EntitiesManager.Playablesstats[rslt - 1].Item1; IBaseTroop selectedchar = (IBaseTroop)Activator.CreateInstance(EntitiesManager.Playables.Where((e) => e.Name.Equals(name)).FirstOrDefault()); CustomConsole.RightOffsetWriteLine("Caractéristiques " + selectedchar.GetType().Name + " : PV:" + (selectedchar as IBaseTroop).MaxHP + ", Vitesse:" + (selectedchar as IBaseTroop).Speed + ", attaques spéciales:"); if (selectedchar.GetType().GetTypeInfo().DeclaredMethods.Count() > 0) { selectedchar.GetType().GetTypeInfo().DeclaredMethods.ToList().ForEach((e) => CustomConsole.RightOffsetWriteLine("-" + e.Name)); } selectedchar.color = ConsoleColor.Green; return(selectedchar); } else { CustomConsole.RightOffsetWriteLine("La valeur saisie ne correspond pas..."); return(null); } }
private void PJAttack() { CustomConsole.ClearLastConsoleLine(); IBaseTroop targetabletroop = GridManager.Instance.CheckAroundForTroop(game.Getalltroops(), game.PJ, game.Size); if (targetabletroop != null) { MethodInfo attackmethod = game.PJ.GetType().GetTypeInfo().DeclaredMethods.FirstOrDefault(); object[] parameters = new object[1]; parameters[0] = targetabletroop; attackmethod.Invoke(game.PJ, parameters); if (targetabletroop.Remaining_HP <= 0) { this.game.PNJKilledByPlayer++; } } else { CustomConsole.ClearLastConsoleLine(); Console.WriteLine("Aucune cible à portée !"); DoPJTurn(); } }
/// <summary> /// Method pour afficher la grille générée /// </summary> public Grid DisplayGrid(List <IBaseTroop> listOfTroops, IBaseTroop player, int index) { Console.Clear(); List <string> lines = new List <string>(); if (player != null) { CustomConsole.RightOffsetWriteLine(" PERSONNAGE : "+ player.GetType().Name + " || PV : "+ player.Remaining_HP + "/" + player.MaxHP + "\r\n"); listOfTroops.Add(player); } Grid grid = GenerateGrid(listOfTroops, index, lines); string testPlayer = "ASDJWY"; string testTrooper = "8O"; string testDroid = "#§"; for (int x = 0; x < lines.Count; x++) { for (int y = 0; y < lines[x].Length; y++) { if (x == 0 || y == 0 || y == 1) { Console.ForegroundColor = ConsoleColor.Blue; } else if (testPlayer.Contains(lines[x][y])) { IBaseTroop PJ = listOfTroops.Where(s => s.Icon == lines[x][y]).First(); if (PJ.Remaining_HP == PJ.MaxHP) { PJ.color = ConsoleColor.Green; } else { PJ.color = ConsoleColor.Red; } Console.ForegroundColor = PJ.color; } else if (testTrooper.Contains(lines[x][y])) { IBaseTroop trooper = listOfTroops.Where(s => s.Icon == lines[x][y]).First(); Console.ForegroundColor = trooper.color; } else if (testDroid.Contains(lines[x][y])) { IBaseTroop droid = listOfTroops.Where(s => s.Icon == lines[x][y]).First(); Console.ForegroundColor = droid.color; } else { Console.ForegroundColor = ConsoleColor.White; } Console.Write(lines[x][y]); } Console.Write("\r\n"); } string legend = "légende : "; listOfTroops.DistinctBy((i) => i.Icon).ToList().ForEach((e) => legend += e.Icon + " = " + e.GetType().Name + " | "); legend = legend.Remove(legend.Length - 2); Console.WriteLine(legend); Console.WriteLine("\r\n"); listOfTroops.Remove(player); return(grid); }
/// <summary> /// Method pour détecter un personnage à proximité avant de tenter de se déplacer /// </summary> /// <param name="listOfTroops">Liste des troupes</param> /// <param name="baseTroop">Troupe qui cherche un ennemi</param> /// <param name="indexMatrice">Taille de la grille du jeu</param> /// <returns>Une troupe ennemie détectée ou null si rien n'est détecté</returns> public Tools.Position CheckAroundForTroopMove(List <IBaseTroop> listOfTroops, IBaseTroop baseTroop, int indexMatrice) { List <Tools.Position> listOfValidPos = new List <Tools.Position>(); Tools.Position newPosLeft = Tools.Tools.IsPositionValid(listOfTroops, baseTroop.Position, ConsoleKey.LeftArrow, indexMatrice); Tools.Position newPosRight = Tools.Tools.IsPositionValid(listOfTroops, baseTroop.Position, ConsoleKey.RightArrow, indexMatrice); Tools.Position newPosUp = Tools.Tools.IsPositionValid(listOfTroops, baseTroop.Position, ConsoleKey.UpArrow, indexMatrice); Tools.Position newPosDown = Tools.Tools.IsPositionValid(listOfTroops, baseTroop.Position, ConsoleKey.DownArrow, indexMatrice); if (newPosLeft != null) { listOfValidPos.Add(newPosLeft); } if (newPosRight != null) { listOfValidPos.Add(newPosRight); } if (newPosUp != null) { listOfValidPos.Add(newPosUp); } if (newPosDown != null) { listOfValidPos.Add(newPosDown); } if (listOfValidPos.Count == 0) { return(null); } Random random = new Random(); Tools.Position newPosition = listOfValidPos[random.Next(0, listOfValidPos.Count)]; return(newPosition); }
private void DoPNJTurn(List <IBaseTroop> troops) { foreach (IBaseTroop troop in troops) { if (troop.Remaining_HP > 0) { string logtroop = troop.GetType().Name + " en " + troop.Position.Txtpos; //Check attaques : si autre PNJ autour > attaquer logtroop += " cherche une cible..."; IBaseTroop targetabletroop = GridManager.Instance.CheckAroundForTroop(game.Getalltroops(), troop, game.Size); if (targetabletroop != null) { if (game.PJ == targetabletroop) { game.PJ.color = ConsoleColor.Red; } MethodInfo attackmethod = troop.GetType().GetTypeInfo().DeclaredMethods.FirstOrDefault(); object[] parameters = new object[1]; parameters[0] = targetabletroop; attackmethod.Invoke(troop, parameters); continue; } else { logtroop += " mais n'en trouve aucune ..."; } //Check blessures : si blessé > se soigne / répare logtroop += " vérifie s'il est blessé... "; if (troop.Remaining_HP < troop.MaxHP) { if (troop.GetType().BaseType == typeof(Synthetic)) { (troop as Synthetic).AutoRepair(); } else { (troop as Organic).Heal(); } continue; } else { logtroop += "mais n'est pas blessé ... "; } //Check déplacement : Si ni attaque ni soin > déplacer logtroop += " regarde autour de lui ..."; Position potentialPosition = GridManager.Instance.CheckAroundForTroopMove(game.Getalltroops(), troop, game.Size); if (potentialPosition != null) { logtroop += " et se déplace en " + potentialPosition.Txtpos; troop.Position = potentialPosition; } else { logtroop += " il est encerclé ! "; } continue; } else { continue; } } }