public int SimToVictory(bool abortIfAnElfDies = false) { var round = 0; while (true) { if (DoRound(abortIfAnElfDies)) { if (abortIfAnElfDies && Elves.Any(e => e.IsDead)) { return(-1); } if (Goblins.All(g => g.IsDead)) { var hpLeft = Elves.Where(e => !e.IsDead).Sum(e => e.HP); return(round * hpLeft); } if (Elves.All(e => e.IsDead)) { var hpLeft = Goblins.Where(e => !e.IsDead).Sum(e => e.HP); return(round * hpLeft); } } round++; } }
private bool TryToFight(Goblin goblin) { var root = new Coordinate(goblin.X, goblin.Y); var neighbors = GetNeighbors(root); var elves = new List <Elf>(); foreach (var neighbor in neighbors) { var elf = Elves.Find(g => !g.IsDead && g.X == neighbor.X && g.Y == neighbor.Y); if (elf != null) { elves.Add(elf); } } var toAttack = elves.OrderBy(g => g.HP).ThenBy(g => g.Y).ThenBy(g => g.X).FirstOrDefault(); if (toAttack != null) { toAttack.HP -= goblin.AP; if (toAttack.IsDead) { Map[toAttack.X, toAttack.Y] = '.'; } return(true); } return(false); }
public Elf FindClosestEnemyTo(Goblin source) { var sourceX = source.X; var sourceY = source.Y; var target = SearchFor('E', sourceX, sourceY); return(Elves.Find(e => e.X == target.X && e.Y == target.Y)); }
public void ElvesChangeDirectionTest(Direction currentDirection, char turn, Direction newDirection) { Elves elves = new Elves { CurrentDirection = currentDirection }; elves.ChangeDirection(turn); Assert.Equal(newDirection, elves.CurrentDirection); }
public void Start() { Race orc = new Orc(); Race elf = new Elves(); Race farmerSoldierOrc = new ProfessionDecorator(new Soldier(), new ProfessionDecorator(new Farmer(), orc)); farmerSoldierOrc.Render(); }
public bool DoRound(bool abortIfAnElfDies = false) { var allFighters = Goblins.Cast <Fighter>() .Concat(Elves.Cast <Fighter>()) .Where(f => !f.IsDead) .OrderBy(f => f.Y) .ThenBy(f => f.X).ToList(); foreach (var fighter in allFighters) { if (Goblins.All(g => g.IsDead) || Elves.All(e => e.IsDead)) { return(true); } if (abortIfAnElfDies && Elves.Any(e => e.IsDead)) { return(true); } if (fighter.IsDead) { continue; } if (fighter is Elf) { var asElf = (Elf)fighter; if (!TryToFight(asElf)) { MoveToClosestEnemy(asElf); TryToFight(asElf); } } else { var asGoblin = (Goblin)fighter; if (!TryToFight(asGoblin)) { MoveToClosestEnemy(asGoblin); TryToFight(asGoblin); } } } return(false); }
public Part1() { elvesRepository = new ElvesRepository(); elves = new Elves(); }
public override Game BuildGame() { MapBuilder mapbuilder; switch (dataContext.SizeOfMap) { case MapSize.demo: mapbuilder = new DemoMapBuilder(); break; case MapSize.medium: mapbuilder = new MediumMapBuilder(); break; case MapSize.small: mapbuilder = new SmallMapBuilder(); break; default: mapbuilder = new SmallMapBuilder(); break; } GameImpl.INSTANCE.Map = mapbuilder.BuildMap(); /// Récupération de l'emplacement par défaut des joueurs Tribe tribeP1; Tribe tribeP2; switch (dataContext.FactionP1) { case Faction.Dwarves: tribeP1 = new Dwarves(); break; case Faction.Elves: tribeP1 = new Elves(); break; case Faction.Orcs: tribeP1 = new Orcs(); break; default: tribeP1 = new Dwarves(); break; } switch (dataContext.FactionP2) { case Faction.Dwarves: tribeP2 = new Dwarves(); break; case Faction.Elves: tribeP2 = new Elves(); break; case Faction.Orcs: tribeP2 = new Orcs(); break; default: tribeP2 = dataContext.FactionP1 != Faction.Orcs ? (Tribe) new Orcs() : (Tribe) new Dwarves(); break; } int sizeOfMap = (int)Math.Sqrt(GameImpl.INSTANCE.Map.mapCells.Length); WrapperMapBuilder mBuilder = new WrapperMapBuilder(); int defaultXP1; int defaultYP1; int defaultXP2; int defaultYP2; unsafe { mBuilder.placePlayer1(sizeOfMap, &defaultXP1, &defaultYP1); mBuilder.placePlayer2(sizeOfMap, &defaultXP2, &defaultYP2); } GameImpl.INSTANCE.Player1 = new PlayerImpl(tribeP1, defaultXP1, defaultYP1, mapbuilder.NumberOfUnits, dataContext.NicknameP1 != null && dataContext.NicknameP1.Length > 1 ? dataContext.NicknameP1 : "Player 1"); GameImpl.INSTANCE.Player2 = new PlayerImpl(tribeP2, defaultXP1, defaultYP2, mapbuilder.NumberOfUnits, dataContext.NicknameP2 != null && dataContext.NicknameP2.Length > 1 ? dataContext.NicknameP2 : "Player 2"); GameImpl.INSTANCE.CurrentPlayer = GameImpl.INSTANCE.Player1; // Le joueur 1 commence GameImpl.INSTANCE.OpponentPlayer = GameImpl.INSTANCE.Player2; GameImpl.INSTANCE.RemainingTurns = mapbuilder.TurnsToPlay; return(GameImpl.INSTANCE); }