public GamePosition Step(GamePosition currentPosition, GameAction gameAction) { var newFirstTeamPosition = GetNewTeamPosition(currentPosition.FirstTeamPosition, gameAction.FirstTeamAction); var newSecondTeamPosition = GetNewTeamPosition(currentPosition.SecondTeamPosition, gameAction.SecondTeamAction); var newBallPosition = GetNewBallPosition(currentPosition.BallPosition); return new GamePosition(currentPosition.Field, newFirstTeamPosition, newSecondTeamPosition, newBallPosition); }
public void Run() { BallPosition ballPosition = InitBallPosition(_ball); TeamPosition firstTeamPosition = InitTeamPosition(_firstTeam); TeamPosition secondTeamPosition = InitTeamPosition(_secondTeam); GamePosition currentPosition = new GamePosition(_field, firstTeamPosition, secondTeamPosition, ballPosition); while (true) { IGameState gameState = _gameStateBuilder.BuildState(currentPosition); TeamAction firstTeamAction = BuildTeamAction(_firstTeam, gameState); TeamAction secondTeamAction = BuildTeamAction(_secondTeam, gameState); GameAction gameAction = new GameAction(firstTeamAction, secondTeamAction); GamePosition nextPosition = _runner.Step(currentPosition, gameAction); if (nextPosition == null) break; currentPosition = nextPosition; } }