Beispiel #1
0
        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++;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        public void ElvesChangeDirectionTest(Direction currentDirection, char turn, Direction newDirection)
        {
            Elves elves = new Elves {
                CurrentDirection = currentDirection
            };

            elves.ChangeDirection(turn);
            Assert.Equal(newDirection, elves.CurrentDirection);
        }
Beispiel #5
0
    public void Start()
    {
        Race orc = new Orc();
        Race elf = new Elves();

        Race farmerSoldierOrc = new ProfessionDecorator(new Soldier(), new ProfessionDecorator(new Farmer(), orc));

        farmerSoldierOrc.Render();
    }
Beispiel #6
0
        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();
 }
Beispiel #8
0
        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);
        }