/// <summary>
        /// get a action menu choice from the user
        /// </summary>
        /// <returns>action menu choice</returns>
        public AdamaAction GetActionMenuChoice(Menu menu)
        {
            AdamaAction choosenAction = AdamaAction.None;

            //
            // Handles exception in case user presses a key other than
            // one of the keys related to menu choices
            bool validKeyStroke = false;

            while (!validKeyStroke)
            {
                try
                {
                    ConsoleKeyInfo keyPressedInfo = Console.ReadKey();
                    char           keyPressed     = keyPressedInfo.KeyChar;
                    choosenAction = menu.MenuChoices[keyPressed];
                }
                catch (KeyNotFoundException)
                {
                    DisplayInputBoxPrompt("Invalid keystroke! Please enter a menu choice by using 1, 2 ... etc.");
                    continue;
                }
                validKeyStroke = true;
            }

            return(choosenAction);
        }
        /// <summary>
        /// display the correct menu/sub-menu and get the next traveler action
        /// </summary>
        /// <returns>traveler action</returns>
        private AdamaAction GetNextTravelerAction()
        {
            AdamaAction travelerActionChoice = AdamaAction.None;

            switch (ActionMenu.currentMenu)
            {
            case ActionMenu.CurrentMenu.MainMenu:
                travelerActionChoice = _gameConsoleView.GetActionMenuChoice(ActionMenu.MainMenu);
                break;

            case ActionMenu.CurrentMenu.ObjectMenu:
                travelerActionChoice = _gameConsoleView.GetActionMenuChoice(ActionMenu.ObjectMenu);
                break;

            case ActionMenu.CurrentMenu.NpcMenu:
                travelerActionChoice = _gameConsoleView.GetActionMenuChoice(ActionMenu.NpcMenu);
                break;

            case ActionMenu.CurrentMenu.TravelerMenu:
                travelerActionChoice = _gameConsoleView.GetActionMenuChoice(ActionMenu.TravelerMenu);
                break;

            case ActionMenu.CurrentMenu.AdminMenu:
                travelerActionChoice = _gameConsoleView.GetActionMenuChoice(ActionMenu.AdminMenu);
                break;

            default:
                break;
            }
            return(travelerActionChoice);
        }
        /// <summary>
        /// method to manage the application setup and game loop
        /// </summary>
        private void ManageGameLoop()
        {
            AdamaAction travelerActionChoice = AdamaAction.None;

            //
            // display splash screen
            //
            _playingGame = _gameConsoleView.DisplaySpashScreen();

            //
            // player chooses to quit
            //
            if (!_playingGame)
            {
                Environment.Exit(1);
            }

            //
            // display introductory message
            //
            _gameConsoleView.DisplayGamePlayScreen("Mission Intro", Text.MissionIntro(), ActionMenu.MissionIntro, "");
            _gameConsoleView.GetContinueKey();

            //
            // initialize the mission traveler
            //
            InitializeMission();

            //
            // prepare game play screen
            //
            _currentLocation = _gameUniverse.GetSpaceTimeLocationById(_sar.SpaceTimeLocationID);
            _gameConsoleView.DisplayGamePlayScreen("Current Location", Text.CurrentLocationInfo(_currentLocation), ActionMenu.MainMenu, "");

            //
            // game loop
            //
            while (_playingGame)
            {
                //
                // process all flags, events, and stats
                //
                UpdateGameStatus();

                //
                // get next game action from player
                //

                travelerActionChoice = GetNextTravelerAction();



                //
                // choose an action based on the player's menu choice
                //
                switch (travelerActionChoice)
                {
                case AdamaAction.None:
                    break;

                case AdamaAction.AdamaInfo:
                    _gameConsoleView.DisplayTravelerInfo(_sar);
                    break;

                case AdamaAction.LookAround:
                    _gameConsoleView.DisplayLookAround();
                    break;

                case AdamaAction.Travel:
                    TravelAction();
                    break;

                case AdamaAction.AdamaLocationsVisited:
                    _gameConsoleView.DisplayLocationsVisited();
                    break;

                case AdamaAction.LookAt:
                    LookAtAction();
                    break;

                case AdamaAction.PickUp:
                    PickUpAction();
                    break;

                case AdamaAction.PutDown:
                    PutDownAction();
                    break;

                case AdamaAction.Inventory:
                    _gameConsoleView.DisplayInventory();
                    break;

                case AdamaAction.ListSpaceTimeLocations:
                    _gameConsoleView.DisplayListOfSpaceTimeLocations();
                    break;

                case AdamaAction.ListNonPlayerCharacters:
                    _gameConsoleView.DisplayListOfAllNpcObjects();
                    break;

                case AdamaAction.ListGameObjects:
                    _gameConsoleView.DisplayListOfAllGameObjects();
                    break;

                case AdamaAction.TalkTo:
                    TalkToAction();
                    break;

                case AdamaAction.TravelerMenu:
                    ActionMenu.currentMenu = ActionMenu.CurrentMenu.TravelerMenu;
                    _gameConsoleView.DisplayGamePlayScreen("Traveler Menu", "Select an operation from the menu.", ActionMenu.TravelerMenu, "");
                    break;

                case AdamaAction.AdminMenu:
                    ActionMenu.currentMenu = ActionMenu.CurrentMenu.AdminMenu;
                    _gameConsoleView.DisplayGamePlayScreen("Admin Menu", "Select an operation from the menu.", ActionMenu.AdminMenu, "");
                    break;

                case AdamaAction.ObjectMenu:
                    ActionMenu.currentMenu = ActionMenu.CurrentMenu.ObjectMenu;
                    _gameConsoleView.DisplayGamePlayScreen("Object Menu", "Select an operation from the menu.", ActionMenu.ObjectMenu, "");
                    break;

                case AdamaAction.ReturnToMainMenu:
                    ActionMenu.currentMenu = ActionMenu.CurrentMenu.MainMenu;
                    _gameConsoleView.DisplayGamePlayScreen("Current Location", Text.CurrentLocationInfo(_currentLocation), ActionMenu.MainMenu, "");
                    break;

                case AdamaAction.NonplayerCharacterMenu:
                    ActionMenu.currentMenu = ActionMenu.CurrentMenu.NpcMenu;
                    _gameConsoleView.DisplayGamePlayScreen("NPC Menu", "Select an operation from the menu.", ActionMenu.NpcMenu, "");
                    break;

                case AdamaAction.Exit:
                    _playingGame = false;
                    break;

                default:
                    break;
                }
            }

            //
            // close the application
            //
            Environment.Exit(1);
        }
Exemple #4
0
        /// <summary>
        /// method to manage the application setup and game loop
        /// </summary>
        private void ManageGameLoop()
        {
            AdamaAction travelerActionChoice = AdamaAction.None;

            //
            // display splash screen
            //
            _playingGame = _gameConsoleView.DisplaySpashScreen();

            //
            // player chooses to quit
            //
            if (!_playingGame)
            {
                Environment.Exit(1);
            }

            //
            // display introductory message
            //
            _gameConsoleView.DisplayGamePlayScreen("Mission Intro", Text.MissionIntro(), ActionMenu.MissionIntro, "");
            _gameConsoleView.GetContinueKey();

            //
            // initialize the mission traveler
            //
            InitializeMission();

            //
            // prepare game play screen
            //
            _currentLocation = _gameUniverse.GetSpaceTimeLocationByID(_sar.SpaceTimeLocationID);
            _gameConsoleView.DisplayGamePlayScreen("Current Location", Text.CurrentLocationInfo(_currentLocation), ActionMenu.MainMenu, "");

            //
            // game loop
            //
            while (_playingGame)
            {
                //
                // process all flags, events, and stats
                //
                UpdateGameStatus();

                //
                // get next game action from player
                //
                travelerActionChoice = _gameConsoleView.GetActionMenuChoice(ActionMenu.MainMenu);

                //
                // choose an action based on the player's menu choice
                //
                switch (travelerActionChoice)
                {
                case AdamaAction.None:
                    break;

                case AdamaAction.LookAround:
                    _gameConsoleView.DisplayLookAround();
                    break;

                case AdamaAction.Travel:
                    //
                    // get new location choice and update the current location property
                    //
                    _sar.SpaceTimeLocationID = _gameConsoleView.DisplayGetNextSpaceTimeLocation();
                    _currentLocation         = _gameUniverse.GetSpaceTimeLocationByID(_sar.SpaceTimeLocationID);

                    //
                    // set the game play screen to the current location info format
                    //
                    _gameConsoleView.DisplayGamePlayScreen("Current Location", Text.CurrentLocationInfo(_currentLocation), ActionMenu.MainMenu, "");
                    break;

                case AdamaAction.AdamaLocationsVisited:
                    //
                    // generate a list of space time locations that have been visited
                    //
                    List <SpaceTimeLocation> visitedSpaceTimeLocations = new List <SpaceTimeLocation>();
                    foreach (int spaceTimeLocationId in _sar.SpaceTimeLocationsVisited)
                    {
                        visitedSpaceTimeLocations.Add(_gameUniverse.GetSpaceTimeLocationByID(spaceTimeLocationId));
                    }

                    _gameConsoleView.DisplayGamePlayScreen("Space-Time Locations Visited", Text.VisitedLocations(visitedSpaceTimeLocations), ActionMenu.MainMenu, "");
                    break;

                case AdamaAction.AdamaInfo:
                    _gameConsoleView.DisplayTravelerInfo();
                    break;

                case AdamaAction.ListSpaceTimeLocations:
                    _gameConsoleView.DisplayListOfSpaceTimeLocations();
                    break;

                case AdamaAction.Exit:
                    _playingGame = false;
                    break;

                default:
                    break;
                }
            }

            //
            // close the application
            //
            Environment.Exit(1);
        }