public SnakeTableStateMachine() { _currentState = SnakeStatesTypes.NORTH; // initialize table _stateMachine = new StateAction[4, 3]; _stateMachine[(int)SnakeStatesTypes.NORTH, (int)InputType.LEFT] = new StateAction() { State = SnakeStatesTypes.WEST, Action = SnakeStatesTypes.WEST }; _stateMachine[(int)SnakeStatesTypes.NORTH, (int)InputType.RIGHT] = new StateAction() { State = SnakeStatesTypes.EAST, Action = SnakeStatesTypes.EAST }; _stateMachine[(int)SnakeStatesTypes.NORTH, (int)InputType.FORWARD] = new StateAction() { State = SnakeStatesTypes.NORTH, Action = SnakeStatesTypes.NORTH }; _stateMachine[(int)SnakeStatesTypes.EAST, (int)InputType.LEFT] = new StateAction() { State = SnakeStatesTypes.NORTH, Action = SnakeStatesTypes.NORTH }; _stateMachine[(int)SnakeStatesTypes.EAST, (int)InputType.RIGHT] = new StateAction() { State = SnakeStatesTypes.SOUTH, Action = SnakeStatesTypes.SOUTH }; _stateMachine[(int)SnakeStatesTypes.EAST, (int)InputType.FORWARD] = new StateAction() { State = SnakeStatesTypes.EAST, Action = SnakeStatesTypes.EAST }; _stateMachine[(int)SnakeStatesTypes.WEST, (int)InputType.LEFT] = new StateAction() { State = SnakeStatesTypes.SOUTH, Action = SnakeStatesTypes.SOUTH }; _stateMachine[(int)SnakeStatesTypes.WEST, (int)InputType.RIGHT] = new StateAction() { State = SnakeStatesTypes.NORTH, Action = SnakeStatesTypes.NORTH }; _stateMachine[(int)SnakeStatesTypes.WEST, (int)InputType.FORWARD] = new StateAction() { State = SnakeStatesTypes.WEST, Action = SnakeStatesTypes.WEST }; _stateMachine[(int)SnakeStatesTypes.SOUTH, (int)InputType.LEFT] = new StateAction() { State = SnakeStatesTypes.EAST, Action = SnakeStatesTypes.EAST }; _stateMachine[(int)SnakeStatesTypes.SOUTH, (int)InputType.RIGHT] = new StateAction() { State = SnakeStatesTypes.WEST, Action = SnakeStatesTypes.WEST }; _stateMachine[(int)SnakeStatesTypes.SOUTH, (int)InputType.FORWARD] = new StateAction() { State = SnakeStatesTypes.SOUTH, Action = SnakeStatesTypes.SOUTH }; }
public SnakeStatesTypes NextMove(InputType input) { // Find next move from current state and input SnakeStatesTypes nextMove = _stateMachine[(int)_currentState, (int)input].Action; // Find next state from current state and input _currentState = _stateMachine[(int)_currentState, (int)input].State; return(nextMove); }
public SnakeStatesTypes NextMove(InputType input) { // Find next move from current state and input SnakeStatesTypes nextMove = _currentState.NextAction(input); // Find next state from current state and input _currentState = _currentState.NextState(input); return(nextMove); }
public void Start() { SnakePlayground pg = new SnakePlayground(20, 20); // using table state machine //IState stateMachine = new SnakeTableStateMachine(); // using state machine pattern IState stateMachine = new SnakeStateMachinePattern(); bool gameContinue = true; while (gameContinue) { InputType nextInput = ReadNextEvent(); SnakeStatesTypes nextMove = stateMachine.NextMove(nextInput); gameContinue = pg.DoNextMove(nextMove); } Console.WriteLine("You loose :-( "); }
public bool DoNextMove(SnakeStatesTypes move) { bool inside = true; switch (move) { case SnakeStatesTypes.NORTH: _headrow--; break; case SnakeStatesTypes.SOUTH: _headrow++; break; case SnakeStatesTypes.EAST: _headcol++; break; case SnakeStatesTypes.WEST: _headcol--; break; } // check if snake is moving outside playground if (_headrow == maxHeight || _headrow == -1 || _headcol == maxWidth || _headcol == -1) { inside = false; // snake is outside playground } else { PrintPlayground(); // snake still inside } return(inside); }