public void Start() { while (!_gameData.IsGameFinished) { var player = _gameData.PlayersCircularManager.GetNext(); var playerStatus = player.RoundStatus; playerStatus.Clear(); var processor = new PlayerActionProcessorManager(_gameData, player.PlayerData, playerStatus); while (!playerStatus.IsMainActionDone) { PlayerMainAction playerAction = player.Connection.DoMainAction(_gameData.GetGameDto()); processor.ProcessMainAction(playerAction); } while (!playerStatus.IsCustomerTaken && player.PlayerData.CanTakeCustomer(_gameData)) { Customer selectedCustomer = player.Connection.TakeCustomer(_gameData); processor.ProcessTakeCustomerAction(selectedCustomer); } playerStatus.IsActionFinished = true; } }
public void ProcessMainAction(PlayerMainAction playerMainAction) { switch (playerMainAction.MainTurnAction) { case MainTurnAction.Take3DifferentGems: new Take3DifferentGemsProcessor(_gameData, _playerData, _playerRoundStatus).Process(playerMainAction.Parameters as Take3DifferentGemsParameters); break; case MainTurnAction.BuyCard: new BuyCardProcessor(_gameData, _playerData, _playerRoundStatus).Process(playerMainAction.Parameters as BuyCardParameters); break; case MainTurnAction.Take2TheSameGems: new Take2TheSameGemsProcessor(_gameData, _playerData, _playerRoundStatus).Process(playerMainAction.Parameters as Take2TheSameGemsParameters); break; case MainTurnAction.BookCardAndTake1Gold: new BookCardAndTake1GoldProcessor(_gameData, _playerData, _playerRoundStatus).Process(playerMainAction.Parameters as BookCardAndTake1GoldParameters); break; default: throw new InvalidOperationException(); } }