Exemple #1
0
 public void MoveOtherExternalThreats(int currentTurn, int amount, ExternalThreat source)
 {
     foreach (var externalThreat in MoveableExternalThreats.Except(new[] { source }).OrderBy(threat => threat.TimeAppears))
     {
         externalThreat.Move(currentTurn, amount);
     }
 }
Exemple #2
0
        static void Main()
        {
            var players     = GetPlayers();
            var sittingDuck = new SittingDuck();

            sittingDuck.SetPlayers(players);
            var externalTracks = new []
            {
                new ExternalTrack(TrackConfiguration.Track1, sittingDuck.BlueZone),
                new ExternalTrack(TrackConfiguration.Track2, sittingDuck.RedZone),
                new ExternalTrack(TrackConfiguration.Track3, sittingDuck.WhiteZone)
            };
            var internalTrack = new InternalTrack(TrackConfiguration.Track4);

            var externalThreats = new ExternalThreat[]
            {
                new Destroyer(3, ZoneLocation.Blue, sittingDuck),
                new Fighter(4, ZoneLocation.Red, sittingDuck),
                new Fighter(5, ZoneLocation.White, sittingDuck)
            };
            var internalThreats = new InternalThreat[]
            {
                new SkirmishersA(3, sittingDuck),
                new Fissure(2, sittingDuck)
                //new Alien(1, sittingDuck)
            };
            var game        = new Game(sittingDuck, externalThreats, externalTracks, internalThreats, internalTrack, players);
            var currentTurn = 0;

            try
            {
                for (currentTurn = 0; currentTurn < Game.NumberOfTurns; currentTurn++)
                {
                    game.PerformTurn();
                }
            }
            catch (LoseException loseException)
            {
                Console.WriteLine("Killed on turn {0} by: {1}", currentTurn, loseException.Threat);
            }
            Console.WriteLine("Damage Taken:\r\nBlue: {0}\r\nRed: {1}\r\nWhite: {2}",
                              sittingDuck.BlueZone.TotalDamage,
                              sittingDuck.RedZone.TotalDamage,
                              sittingDuck.WhiteZone.TotalDamage);
            Console.WriteLine("Threats killed: {0}. Threats survived: {1}",
                              game.defeatedThreats.Count,
                              game.survivedThreats.Count);
            Console.WriteLine("Total points: {0}", game.TotalPoints);
            foreach (var zone in sittingDuck.Zones)
            {
                foreach (var token in zone.AllDamageTokensTaken)
                {
                    Console.WriteLine("{0} damage token taken in zone {1}. Still damaged: {2}", token, zone.ZoneLocation, zone.CurrentDamageTokens.Contains(token));
                }
            }
        }
        public static void SixBasicThreats()
        {
            var players = GetPlayers();

            var externalTracksByZone = new Dictionary <ZoneLocation, TrackConfiguration>
            {
                { ZoneLocation.Blue, TrackConfiguration.Track1 },
                { ZoneLocation.Red, TrackConfiguration.Track2 },
                { ZoneLocation.White, TrackConfiguration.Track3 },
            };
            const TrackConfiguration internalTrack = TrackConfiguration.Track4;

            var destroyer = new Destroyer();

            destroyer.SetInitialPlacement(4, ZoneLocation.Blue);
            var fighter1 = new Fighter();

            fighter1.SetInitialPlacement(5, ZoneLocation.Red);
            var fighter2 = new Fighter();

            fighter2.SetInitialPlacement(6, ZoneLocation.White);
            var externalThreats = new ExternalThreat[] { destroyer, fighter1, fighter2 };

            var skirmishers = new SkirmishersA();

            skirmishers.SetInitialPlacement(4);
            var fissure = new Fissure();

            fissure.SetInitialPlacement(2);
            var nuclearDevice = new NuclearDevice();

            nuclearDevice.SetInitialPlacement(6);
            var internalThreats = new InternalThreat[] { skirmishers, fissure, nuclearDevice };

            var bonusThreats = new Threat[0];

            var game = new Game(players, internalThreats, externalThreats, bonusThreats, externalTracksByZone, internalTrack, null);

            game.StartGame();
            for (var currentTurn = 0; currentTurn < game.NumberOfTurns + 1; currentTurn++)
            {
                game.PerformTurn();
            }

            Assert.AreEqual(GameStatus.Won, game.GameStatus);
            Assert.AreEqual(4, game.SittingDuck.BlueZone.TotalDamage);
            Assert.AreEqual(3, game.SittingDuck.RedZone.TotalDamage);
            Assert.AreEqual(3, game.SittingDuck.WhiteZone.TotalDamage);
            Assert.AreEqual(3, game.ThreatController.DefeatedThreats.Count());
            Assert.AreEqual(3, game.ThreatController.SurvivedThreats.Count());
            Assert.AreEqual(30, game.TotalPoints);
            Assert.AreEqual(3, game.SittingDuck.Zones.ElementAt(0).CurrentDamageTokens.Count);
            Assert.AreEqual(3, game.SittingDuck.Zones.ElementAt(1).CurrentDamageTokens.Count);
            Assert.AreEqual(4, game.SittingDuck.Zones.ElementAt(2).CurrentDamageTokens.Count);
        }
Exemple #4
0
        private static void SlimeBHelper(bool isDefeated, bool isSurvived, TrackConfiguration internalTrack, int timeAppears,
                                         List <Player> players, int blueDamage, int redDamage, int whiteDamage, bool battleBotsDisabled)
        {
            var totalPoints = 0;

            if (isDefeated)
            {
                totalPoints = 6;
            }
            if (isSurvived)
            {
                totalPoints = 3;
            }
            var otherTracks          = EnumFactory.All <TrackConfiguration>().Except(new[] { internalTrack }).ToList();
            var externalTracksByZone = new Dictionary <ZoneLocation, TrackConfiguration>
            {
                { ZoneLocation.Blue, otherTracks.First() },
                { ZoneLocation.Red, otherTracks.Skip(1).First() },
                { ZoneLocation.White, otherTracks.Skip(2).First() }
            };
            var externalThreats = new ExternalThreat[0];

            var slimeB = new SlimeB();

            slimeB.SetInitialPlacement(timeAppears);
            var internalThreats = new InternalThreat[] { slimeB };

            var bonusThreats = new Threat[0];

            var game = new Game(players, internalThreats, externalThreats, bonusThreats, externalTracksByZone, internalTrack, null);

            game.StartGame();
            for (var currentTurn = 0; currentTurn < game.NumberOfTurns + 1; currentTurn++)
            {
                game.PerformTurn();
            }
            Assert.AreEqual(GameStatus.Won, game.GameStatus);
            Assert.AreEqual(blueDamage, game.SittingDuck.BlueZone.TotalDamage);
            Assert.AreEqual(redDamage, game.SittingDuck.RedZone.TotalDamage);
            Assert.AreEqual(whiteDamage, game.SittingDuck.WhiteZone.TotalDamage);
            Assert.AreEqual(0, players.Count(player => player.IsKnockedOut));
            Assert.AreEqual(blueDamage, game.SittingDuck.BlueZone.CurrentDamageTokens.Count);
            Assert.AreEqual(redDamage, game.SittingDuck.RedZone.CurrentDamageTokens.Count);
            Assert.AreEqual(whiteDamage, game.SittingDuck.WhiteZone.CurrentDamageTokens.Count);
            var battleBotsAreDisabledInPlace = game.SittingDuck.RedZone.LowerRedStation.BattleBotsComponent.BattleBots?.IsDisabled ?? false;

            Assert.AreEqual(battleBotsDisabled, battleBotsAreDisabledInPlace);

            Assert.AreEqual(isDefeated, game.ThreatController.DefeatedThreats.Any());
            if (totalPoints != game.TotalPoints)
            {
                var errorMessage = $"Survived + points didn't match. Expected: {totalPoints} points, survived: {isSurvived}. Actual: {game.TotalPoints} points, survived: {game.ThreatController.SurvivedThreats.Any()}.";
                Assert.Fail(errorMessage);
            }
        }
Exemple #5
0
 private static void AddToDamagesByThreat(
     ExternalThreat threat,
     PlayerDamage damage,
     IDictionary <ExternalThreat, IList <PlayerDamage> > damagesByThreat)
 {
     if (!damagesByThreat.ContainsKey(threat) || damagesByThreat[threat] == null)
     {
         damagesByThreat[threat] = new List <PlayerDamage>();
     }
     damagesByThreat[threat].Add(damage);
 }
Exemple #6
0
 public void AddExternalThreat(ExternalThreat newThreat, int timeAppears, ZoneLocation zoneLocation)
 {
     newThreat.SetInitialPlacement(timeAppears, zoneLocation);
     newThreat.PlaceOnTrack(ExternalTracks[zoneLocation]);
     newThreat.AttackedSittingDuck += (sender, args) => { ThreatAttackedShip(sender, args); };
     foreach (var threat in externalThreatStatusEffects.Concat(singleTurnExternalThreatStatusEffects))
     {
         newThreat.SetThreatStatus(threat, true);
     }
     ExternalThreats.Add(newThreat);
 }
 private static void AddBonusThreatInfo <T>(ThreatInfo <T> threatInfo, ExternalThreat newThreat) where T : Threat
 {
     if (threatInfo.BonusExternalThreatInfo != null)
     {
         AddBonusThreatInfo(threatInfo.BonusExternalThreatInfo, newThreat);
     }
     else if (threatInfo.BonusInternalThreatInfo != null)
     {
         AddBonusThreatInfo(threatInfo.BonusInternalThreatInfo, newThreat);
     }
     else
     {
         threatInfo.BonusExternalThreatInfo = new ThreatInfo <ExternalThreat> {
             Threat = newThreat
         }
     };
 }
        public static void JustAFighterNoActions()
        {
            var players = Enumerable.Range(0, 1).Select(index => new Player(new List <PlayerAction>(), 0, PlayerColor.Blue)).ToList();

            var externalTracksByZone = new Dictionary <ZoneLocation, TrackConfiguration>
            {
                { ZoneLocation.Blue, TrackConfiguration.Track1 },
                { ZoneLocation.Red, TrackConfiguration.Track5 },
                { ZoneLocation.White, TrackConfiguration.Track3 }
            };
            const TrackConfiguration internalTrack = TrackConfiguration.Track4;

            var fighter = new Fighter();

            fighter.SetInitialPlacement(5, ZoneLocation.Red);
            var externalThreats = new ExternalThreat[] { fighter };

            var internalThreats = new InternalThreat[0];
            var bonusThreats    = new Threat[0];
            var game            = new Game(players, internalThreats, externalThreats, bonusThreats, externalTracksByZone, internalTrack, null);

            game.StartGame();
            for (var currentTurn = 0; currentTurn < game.NumberOfTurns + 1; currentTurn++)
            {
                game.PerformTurn();
            }

            Assert.AreEqual(GameStatus.Won, game.GameStatus);
            Assert.AreEqual(0, game.SittingDuck.BlueZone.TotalDamage);
            Assert.AreEqual(5, game.SittingDuck.RedZone.TotalDamage);
            Assert.AreEqual(0, game.SittingDuck.WhiteZone.TotalDamage);
            Assert.AreEqual(0, game.ThreatController.DefeatedThreats.Count());
            Assert.AreEqual(1, game.ThreatController.SurvivedThreats.Count());
            Assert.AreEqual(2, game.TotalPoints);
            Assert.AreEqual(5, game.SittingDuck.Zones.ElementAt(0).CurrentDamageTokens.Count);
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(1).CurrentDamageTokens.Count);
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(2).CurrentDamageTokens.Count);
        }
Exemple #9
0
        public bool FireWeapons(ExternalThreat threat, int damageAmount)
        {
            // fire weapons at target and  return false if damage pool reaches zero
            // if we have already fired once, subsequent actions deal two damage instaed of one
            DamagePool    -= damageAmount;
            threat.Health -= damageAmount;
            threat.Health  = Math.Max(0, threat.Health);
            _eventManager.Trigger("AppendMessage", new DefaultEvent(SoundFx.FireWeapons));
            string message = "";

            if (threat.Health <= 0)
            {
                message = $"Our tactical crew dealt {damageAmount} damage and destroyed {threat.Name}. ";
                _eventManager.Trigger("DiscardThreat", new DefaultThreatEvent(threat));
            }
            else
            {
                message = $"Our tactical crew opened fire at {threat.Name} and dealt {damageAmount} damage. {threat.Name} now has {threat.Health} health. ";
            }
            _eventManager.Trigger("AppendMessage", new DefaultEvent(message));
            // return true if we still have damage pool to spend
            return(DamagePool > 0);
        }
Exemple #10
0
 private Action GetMoveCall(ExternalThreat externalThreat)
 {
     return(() => externalTracks[externalThreat.CurrentZone].MoveThreat(externalThreat));
 }
        public static void EzraDoubleActionsCampaignMission2()
        {
            var players = new List <Player>
            {
                CreateBluePlayerDoubleActionsCampaignMission2(),
                CreateGreenPlayerDoubleActionsCampaignMission2(),
                CreateYellowPlayerDoubleActionsCampaignMission2(),
                CreateRedPlayerDoubleActionsCampaignMission2()
            };

            var externalTracksByZone = new Dictionary <ZoneLocation, TrackConfiguration>
            {
                { ZoneLocation.Blue, TrackConfiguration.Track7 },
                { ZoneLocation.White, TrackConfiguration.Track2 },
                { ZoneLocation.Red, TrackConfiguration.Track5 }
            };
            const TrackConfiguration internalTrack = TrackConfiguration.Track4;

            var interstellarOctopus = new InterstellarOctopus();

            interstellarOctopus.SetInitialPlacement(3, ZoneLocation.Blue);
            var meteoroid = new Meteoroid();

            meteoroid.SetInitialPlacement(8, ZoneLocation.Blue);
            var amoeba = new Amoeba();

            amoeba.SetInitialPlacement(2, ZoneLocation.White);
            var stealthFighter = new StealthFighter();

            stealthFighter.SetInitialPlacement(4, ZoneLocation.White);
            var spinningSaucer = new SpinningSaucer();

            spinningSaucer.SetInitialPlacement(7, ZoneLocation.White);
            var armoredGrappler = new ArmoredGrappler();

            armoredGrappler.SetInitialPlacement(1, ZoneLocation.Red);
            var externalThreats = new ExternalThreat[] { interstellarOctopus, meteoroid, amoeba, stealthFighter, spinningSaucer, armoredGrappler };

            var commandosB = new CommandosB();

            commandosB.SetInitialPlacement(5);
            var hackedShieldsB = new HackedShieldsB();

            hackedShieldsB.SetInitialPlacement(8);
            var internalThreats = new InternalThreat[] { commandosB, hackedShieldsB };

            var bonusThreats = new Threat[0];

            var game = new Game(players, internalThreats, externalThreats, bonusThreats, externalTracksByZone, internalTrack, null);

            game.StartGame();
            for (var currentTurn = 0; currentTurn < game.NumberOfTurns + 1; currentTurn++)
            {
                game.PerformTurn();
            }
            Assert.AreEqual(GameStatus.Won, game.GameStatus);
            Assert.AreEqual(2, game.SittingDuck.BlueZone.TotalDamage);
            Assert.AreEqual(0, game.SittingDuck.RedZone.TotalDamage);
            Assert.AreEqual(5, game.SittingDuck.WhiteZone.TotalDamage);
            Assert.AreEqual(6, game.ThreatController.DefeatedThreats.Count());
            Assert.AreEqual(2, game.ThreatController.SurvivedThreats.Count());
            Assert.AreEqual(0, players.Count(player => player.IsKnockedOut));
            Assert.AreEqual(2, game.SittingDuck.BlueZone.CurrentDamageTokens.Count);
            Assert.AreEqual(0, game.SittingDuck.RedZone.CurrentDamageTokens.Count);
            Assert.AreEqual(5, game.SittingDuck.WhiteZone.CurrentDamageTokens.Count);
        }
        public static void EzraDoubleActionsCampaignMission1()
        {
            var players = new List <Player>
            {
                CreateBluePlayerDoubleActionsCampaignMission1(),
                CreateGreenPlayerDoubleActionsCampaignMission1(),
                CreateYellowPlayerDoubleActionsCampaignMission1(),
                CreateRedPlayerDoubleActionsCampaignMission1()
            };

            var externalTracksByZone = new Dictionary <ZoneLocation, TrackConfiguration>
            {
                { ZoneLocation.Blue, TrackConfiguration.Track6 },
                { ZoneLocation.White, TrackConfiguration.Track2 },
                { ZoneLocation.Red, TrackConfiguration.Track5 },
            };
            const TrackConfiguration internalTrack = TrackConfiguration.Track7;

            var armoredGrappler = new ArmoredGrappler();

            armoredGrappler.SetInitialPlacement(1, ZoneLocation.Blue);
            var meteoroid = new Meteoroid();

            meteoroid.SetInitialPlacement(4, ZoneLocation.Blue);
            var dimensionSpider = new DimensionSpider();

            dimensionSpider.SetInitialPlacement(2, ZoneLocation.White);
            var gunship = new Gunship();

            gunship.SetInitialPlacement(6, ZoneLocation.White);
            var asteroid = new Asteroid();

            asteroid.SetInitialPlacement(5, ZoneLocation.Red);
            var destroyer = new Destroyer();

            destroyer.SetInitialPlacement(8, ZoneLocation.Red);
            var externalThreats = new ExternalThreat[] { armoredGrappler, meteoroid, dimensionSpider, gunship, asteroid, destroyer };

            var shambler = new Shambler();

            shambler.SetInitialPlacement(4);
            var internalThreats = new InternalThreat[] { shambler };

            var bonusThreats = new Threat[0];

            var game = new Game(players, internalThreats, externalThreats, bonusThreats, externalTracksByZone, internalTrack, null);

            game.StartGame();
            try
            {
                for (var currentTurn = 0; currentTurn < game.NumberOfTurns + 1; currentTurn++)
                {
                    game.PerformTurn();
                }
            }
            catch (LoseException loseException)
            {
                Assert.AreEqual(destroyer, loseException.Threat);
                Assert.AreEqual(GameStatus.Lost, game.GameStatus);
                Assert.AreEqual(0, game.SittingDuck.BlueZone.TotalDamage);
                Assert.AreEqual(9, game.SittingDuck.RedZone.TotalDamage);
                Assert.AreEqual(0, game.SittingDuck.WhiteZone.TotalDamage);
                Assert.AreEqual(6, game.ThreatController.DefeatedThreats.Count());
                Assert.AreEqual(0, game.ThreatController.SurvivedThreats.Count());
                Assert.AreEqual(0, players.Count(player => player.IsKnockedOut));
                Assert.AreEqual(0, game.SittingDuck.BlueZone.CurrentDamageTokens.Count);
                Assert.AreEqual(6, game.SittingDuck.RedZone.CurrentDamageTokens.Count);
                Assert.AreEqual(0, game.SittingDuck.WhiteZone.CurrentDamageTokens.Count);
            }
        }
        public static void EzraCampaign1Mission3()
        {
            var players = new List <Player>
            {
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    PlayerActionType.MoveBlue, null, PlayerActionType.BasicSpecialization,
                    PlayerActionType.Alpha, PlayerActionType.Alpha, PlayerActionType.MoveRed, null,
                    PlayerActionType.ChangeDeck, null, null, null, PlayerActionType.Charlie
                }), 0, PlayerColor.Blue, PlayerSpecialization.EnergyTechnician),
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    null, PlayerActionType.MoveBlue, PlayerActionType.ChangeDeck,
                    PlayerActionType.Alpha, PlayerActionType.Alpha, PlayerActionType.MoveRed, PlayerActionType.MoveRed,
                    PlayerActionType.Alpha, PlayerActionType.MoveBlue, null, null, PlayerActionType.Charlie
                }), 1, PlayerColor.Green, PlayerSpecialization.PulseGunner),
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    null, null, PlayerActionType.AdvancedSpecialization,
                    PlayerActionType.MoveRed, PlayerActionType.BasicSpecialization, null, PlayerActionType.Alpha,
                    PlayerActionType.Alpha, PlayerActionType.MoveBlue, PlayerActionType.ChangeDeck, null, PlayerActionType.Charlie
                }), 2, PlayerColor.Purple, PlayerSpecialization.Mechanic),
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    PlayerActionType.Charlie, null, PlayerActionType.Alpha,
                    PlayerActionType.BasicSpecialization, PlayerActionType.Alpha, PlayerActionType.Alpha, PlayerActionType.Alpha,
                    PlayerActionType.Charlie, PlayerActionType.ChangeDeck, null, null, PlayerActionType.AdvancedSpecialization
                }), 3, PlayerColor.Red, PlayerSpecialization.DataAnalyst)
            };

            var externalTracksByZone = new Dictionary <ZoneLocation, TrackConfiguration>
            {
                { ZoneLocation.Blue, TrackConfiguration.Track6 },
                { ZoneLocation.Red, TrackConfiguration.Track2 },
                { ZoneLocation.White, TrackConfiguration.Track5 },
            };
            const TrackConfiguration internalTrack = TrackConfiguration.Track3;

            var spacecraftCarrier = new SpacecraftCarrier();

            spacecraftCarrier.SetInitialPlacement(4, ZoneLocation.Blue);
            var manOfWar = new ManOfWar();

            manOfWar.SetInitialPlacement(5, ZoneLocation.White);
            var frigate = new Frigate();

            frigate.SetInitialPlacement(7, ZoneLocation.Red);
            var externalThreats = new ExternalThreat[] { spacecraftCarrier, manOfWar, frigate };

            var centralLaserJam = new CentralLaserJam();

            centralLaserJam.SetInitialPlacement(3);
            var internalThreats = new InternalThreat[] { centralLaserJam };

            var bonusThreats = new Threat[0];

            var game = new Game(players, internalThreats, externalThreats, bonusThreats, externalTracksByZone, internalTrack, null);

            game.StartGame();
            for (var currentTurn = 0; currentTurn < game.NumberOfTurns + 1; currentTurn++)
            {
                game.PerformTurn();
            }
            Assert.AreEqual(GameStatus.Won, game.GameStatus);
            Assert.AreEqual(0, game.SittingDuck.BlueZone.TotalDamage);
            Assert.AreEqual(0, game.SittingDuck.RedZone.TotalDamage);
            Assert.AreEqual(0, game.SittingDuck.WhiteZone.TotalDamage);
            Assert.AreEqual(4, game.ThreatController.DefeatedThreats.Count());
            Assert.AreEqual(0, game.ThreatController.SurvivedThreats.Count());
            Assert.AreEqual(28 + 1 + 9, game.TotalPoints);
            Assert.AreEqual(0, players.Count(player => player.IsKnockedOut));
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(0).CurrentDamageTokens.Count);
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(1).CurrentDamageTokens.Count);
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(2).CurrentDamageTokens.Count);
        }
        public static void EzraCampaign1Mission2()
        {
            var players = new List <Player>
            {
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    null, PlayerActionType.MoveBlue, PlayerActionType.BasicSpecialization,
                    null, PlayerActionType.AdvancedSpecialization, PlayerActionType.ChangeDeck, PlayerActionType.Alpha,
                    PlayerActionType.Alpha, null, null, null, null
                }), 0, PlayerColor.Blue, PlayerSpecialization.EnergyTechnician),
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    PlayerActionType.MoveRed, PlayerActionType.BasicSpecialization, null,
                    null, PlayerActionType.Alpha, PlayerActionType.Alpha, PlayerActionType.MoveBlue,
                    PlayerActionType.BasicSpecialization, null, null, null, null
                }), 1, PlayerColor.Green, PlayerSpecialization.PulseGunner),
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    PlayerActionType.MoveRed, PlayerActionType.ChangeDeck, PlayerActionType.Bravo,
                    PlayerActionType.Alpha, PlayerActionType.Alpha, PlayerActionType.Alpha, null,
                    null, null, null, null, null
                }), 2, PlayerColor.Purple),
                new Player(PlayerActionFactory.CreateSingleActionList(new PlayerActionType?[]
                {
                    PlayerActionType.Charlie, null, null,
                    PlayerActionType.BasicSpecialization, PlayerActionType.MoveBlue, PlayerActionType.Alpha, PlayerActionType.Alpha,
                    PlayerActionType.MoveRed, PlayerActionType.BasicSpecialization, null, null, null
                }), 3, PlayerColor.Red, PlayerSpecialization.DataAnalyst)
            };

            var externalTracksByZone = new Dictionary <ZoneLocation, TrackConfiguration>
            {
                { ZoneLocation.Blue, TrackConfiguration.Track1 },
                { ZoneLocation.Red, TrackConfiguration.Track2 },
                { ZoneLocation.White, TrackConfiguration.Track7 },
            };
            const TrackConfiguration internalTrack = TrackConfiguration.Track4;

            var dimensionSpider = new DimensionSpider();

            dimensionSpider.SetInitialPlacement(6, ZoneLocation.Blue);
            var cryoshieldFrigate = new CryoshieldFrigate();

            cryoshieldFrigate.SetInitialPlacement(4, ZoneLocation.Red);
            var energyCloud = new EnergyCloud();

            energyCloud.SetInitialPlacement(1, ZoneLocation.Red);
            var externalThreats = new ExternalThreat[] { dimensionSpider, cryoshieldFrigate, energyCloud };

            var battleBotUprising = new BattleBotUprising();

            battleBotUprising.SetInitialPlacement(5);
            var internalThreats = new InternalThreat[] { battleBotUprising };

            var bonusThreats = new Threat[0];

            var game = new Game(players, internalThreats, externalThreats, bonusThreats, externalTracksByZone, internalTrack, null);

            game.StartGame();
            for (var currentTurn = 0; currentTurn < game.NumberOfTurns + 1; currentTurn++)
            {
                game.PerformTurn();
            }
            Assert.AreEqual(GameStatus.Won, game.GameStatus);
            Assert.AreEqual(0, game.SittingDuck.BlueZone.TotalDamage);
            Assert.AreEqual(0, game.SittingDuck.RedZone.TotalDamage);
            Assert.AreEqual(0, game.SittingDuck.WhiteZone.TotalDamage);
            Assert.AreEqual(3, game.ThreatController.DefeatedThreats.Count());
            Assert.AreEqual(1, game.ThreatController.SurvivedThreats.Count());
            Assert.AreEqual(20 + 4 + 2, game.TotalPoints);
            Assert.AreEqual(2, players.Count(player => player.IsKnockedOut));
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(0).CurrentDamageTokens.Count);
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(1).CurrentDamageTokens.Count);
            Assert.AreEqual(0, game.SittingDuck.Zones.ElementAt(2).CurrentDamageTokens.Count);
        }
Exemple #15
0
 public ExternalThreatModel(ExternalThreat threat) : base(threat)
 {
     Shields     = threat.Shields + (threat.GetThreatStatus(ThreatStatus.BonusShield) ? 1 : 0);
     CurrentZone = threat.CurrentZone;
     Position    = threat.Position;
 }