示例#1
0
        /// <summary>
        ///     Handler for all keyboard input, actions taken depend on the Game State.
        /// </summary>
        private void HandleUserInput()
        {
            var currentGameState = _gameStateStateMachine.State;

            var input = _inputHandler.Listen();

            // ReSharper disable once SwitchStatementMissingSomeCases, most inputs are not supported.
            switch (input)
            {
            case KeyCode.Space:
                if (currentGameState == GameState.None)
                {
                    _gameStateStateMachine.Fire(GameStateTrigger.StartGame);
                    _worldMapStateMachine.Fire(PlayerMovement.Forward);
                }
                break;

            case KeyCode.None:
                break;

            case KeyCode.UpArrow:
                if (currentGameState == GameState.Playing)
                {
                    _worldMapStateMachine.Fire(PlayerMovement.Forward);
                }
                break;

            case KeyCode.DownArrow:
                if (currentGameState == GameState.Playing)
                {
                    _worldMapStateMachine.Fire(PlayerMovement.Backward);
                }
                break;

            case KeyCode.LeftArrow:
                if (currentGameState == GameState.Playing)
                {
                    _worldMapStateMachine.Fire(PlayerMovement.Left);
                }
                break;

            case KeyCode.RightArrow:
                if (currentGameState == GameState.Playing)
                {
                    _worldMapStateMachine.Fire(PlayerMovement.Right);
                }
                break;

            default:
                var errorMessage = $"KeyCode: {input} is not supported.";
                throw new NotSupportedException(errorMessage);
            }
        }
        public void CanTransitionStateMachineFromFifthPieceToSixthPiece()
        {
            var            displayHandler   = MockDisplayHandler.Object;
            const WorldMap worldMapPosition = WorldMap.FifthPieceHorizontalPipe;

            var stateMachine = new WorldMapStateMachine(worldMapPosition, displayHandler);

            stateMachine.Fire(PlayerMovement.Right);

            const WorldMap expectedWorldMapPosition = WorldMap.SixthPieceFlippedLeftAngle;
            var            actualWorldMapPosition   = stateMachine.State;

            Assert.Equal(expectedWorldMapPosition, actualWorldMapPosition);
            MockDisplayHandler.Verify(mock => mock.DisplayMessage(It.IsAny <string>()), Times.Once);
        }
        public void CanTransitionStateMachineFromThirdPieceToFourthPiece()
        {
            var            displayHandler   = MockDisplayHandler.Object;
            const WorldMap worldMapPosition = WorldMap.ThirdPieceVerticalPipe;

            var stateMachine = new WorldMapStateMachine(worldMapPosition, displayHandler);

            stateMachine.Fire(PlayerMovement.Forward);

            const WorldMap expectedWorldMapPosition = WorldMap.FourthPieceVerticalT;
            var            actualWorldMapPosition   = stateMachine.State;

            Assert.Equal(expectedWorldMapPosition, actualWorldMapPosition);
            MockDisplayHandler.Verify(mock => mock.DisplayMessage(It.IsAny <string>()), Times.Once);
        }
        public void CanTransitionStateMachineFromEleventhPieceToTwelfthPiece()
        {
            var            displayHandler   = MockDisplayHandler.Object;
            const WorldMap worldMapPosition = WorldMap.EleventhPieceFlippedRightAngle;

            var stateMachine = new WorldMapStateMachine(worldMapPosition, displayHandler);

            stateMachine.Fire(PlayerMovement.Forward);

            const WorldMap expectedWorldMapPosition = WorldMap.TwelfthPieceExit;
            var            actualWorldMapPosition   = stateMachine.State;

            Assert.Equal(expectedWorldMapPosition, actualWorldMapPosition);
            MockDisplayHandler.Verify(mock => mock.DisplayMessage(It.IsAny <string>()), Times.Once);
        }