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);
        }
示例#2
0
        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;
            }
        }