Пример #1
0
        public void EndTurn()
        {
            // check if we won
            if (IsVictorious())
            {
                GameOver();
                SaveData();
                return;
            }

            // check if we need to return crew from a mission
            if (Ship.AvailableCrewCount + Ship.ReturningCrewCount < 1 && Ship.MissionCrewCount > 0)
            {
                Message = "You need to return a crew member from a mission because we won't have any available crew for the next turn. Say return crew from a mission to do that. ";
                return;
            }
            Ship.EndTurn();
            GameState = GameState.PlayerTurn;
            if (ThreatManager.ThreatDeck.Count > 0)
            {
                ThreatManager.DrawThreat();
            }
            ThreatManager.ActivateThreats();
            // reset threats when their turn is over
            ThreatManager.ResetThreats();
            // check if we are dead
            if (IsShipDestroyed())
            {
                GameOver();
                SaveData();
                return;
            }
            // check if we won, some threats can kill themselves when activating
            if (IsVictorious())
            {
                GameOver();
                SaveData();
                return;
            }
            // check if we're out of crew to roll
            if (AreCrewIncapacitated())
            {
                RepeatMessage   = $"I am sorry, captain. All of our crew is incapacitated. {SoundFx.GameOver}Game over. To start a new game, say new  game. ";
                Message        += RepeatMessage;
                RepromptMessage = "Game over. To play again, say new game. ";
                GameOver();
                SaveData();
                return;
            }

            Message += $"Rolling the crew dice. {SoundFx.Dice} ";
            Ship.RollCrewDice();
            // check if ship is destroyed, this can happen if threat deck is empty and we rolled three scanners that deals damage
            if (IsShipDestroyed())
            {
                GameOver();
                SaveData();
                return;
            }
            Message        += $"We have {Ship.GetAvailableCrewAsString()}. ";
            Message        += Ship.ScannerCount > 0 ? $"Number of locked threats in our scanners is {Ship.ScannerCount}. " : "";
            Message        += ThreatManager.InternalThreats.Count > 0 ? $"Number of active internal threats is {ThreatManager.InternalThreats.Count}. {ThreatManager.GetThreatsAsString(true,false)}. " : "";
            Message        += ThreatManager.ExternalThreats.Count > 0 ? $"Number of active external threats is {ThreatManager.ExternalThreats.Count}. {ThreatManager.GetThreatsAsString(false, true)}. " : "";
            Message        += ThreatManager.ExternalThreats.Count + ThreatManager.InternalThreats.Count < 1 ? "There are no active threats at the moment. " : "";
            Message        += "What are your orders, captain? ";
            RepeatMessage   = Message;
            RepromptMessage = "What are your orders, captain? ";
            SaveData();
        }
Пример #2
0
        public void CreateNewGame(int difficulty)
        {
            InitializeEventManager();
            IsGameInProgress = true;

            Message = $"Starting a new game. {SoundFx.Beeping} We have traced the distress call coordinates. Prepare to warp. {SoundFx.Warp} Captain, it looks like we warped into a trap! We need to survive until all external threats are destroyed! ";

            Ship = new HalcyonShip();
            Ship.InitializeEvents(_eventManager);
            ThreatManager = new ThreatManager();
            ThreatManager.InitializeEvents(_eventManager);
            Ship.InitializeShip();

            ThreatManager.Initialize(difficulty);

            Message += $"Rolling  the crew dice. {SoundFx.Dice} ";
            Ship.RollCrewDice();

            GameState = GameState.PlayerTurn;

            Message        += $"We have {Ship.GetAvailableCrewAsString()}. ";
            Message        += Ship.ScannerCount > 0 ? $"Number of locked threats in our scanners is {Ship.ScannerCount}. " : "";
            Message        += ThreatManager.InternalThreats.Count > 0 ? $"Number of active internal threats is {ThreatManager.InternalThreats.Count}. {ThreatManager.GetThreatsAsString(true, false)}. " : "";
            Message        += ThreatManager.ExternalThreats.Count > 0 ? $"Number of active external threats is {ThreatManager.ExternalThreats.Count}. {ThreatManager.GetThreatsAsString(false, true)}. " : "";
            Message        += ThreatManager.ExternalThreats.Count + ThreatManager.InternalThreats.Count < 1 ? "There are no active threats at the moment. " : "";
            Message        += "What are your orders, captain? ";
            RepeatMessage   = Message;
            RepromptMessage = $"Awaiting your orders, captain. ";

            SaveData();
        }