public void RegisterPlayers() { var bluePlayer = new PlayerInstance(_settings.BluePlayer, _clientFactory); var whitePlayer = new PlayerInstance(_settings.WhitePlayer, _clientFactory); var bluePlayerOk = _game.TryAddPlayer(_settings.BluePlayer.Name); if (!bluePlayerOk) { throw new AddPlayerException(_settings.BluePlayer.Name); } _logger.LogDebug($"BluePlayer {bluePlayer.PlayerName} added."); var whitePlayerOk = _game.TryAddPlayer(_settings.WhitePlayer.Name); if (!whitePlayerOk) { throw new AddPlayerException(_settings.WhitePlayer.Name); } _logger.LogDebug($"WhitePlayer {whitePlayer.PlayerName} added."); if (new Random().Next(1) > 0) { PlayerOne = bluePlayer; PlayerTwo = whitePlayer; } else { PlayerOne = whitePlayer; PlayerTwo = bluePlayer; } TurnPlayer = PlayerOne; _logger.LogInformation($"Player {TurnPlayer.PlayerName} will start."); }
private async Task PlacePlayerWorker(PlayerInstance player) { _logger.LogDebug($"Player {player.PlayerName} is trying to place its workers."); var workersPlaced = false; while (!workersPlaced) { var placeWorkerCmd = await player.PlaceWorkersRequestAsync(_game); if (!placeWorkerCmd.IsValid) { _logger.LogDebug($"Player {player.PlayerName} sent invalid place worker command.", placeWorkerCmd); continue; } var success1 = _game.TryAddWorker(player.PlayerName, 1, placeWorkerCmd.WorkerOne.X, placeWorkerCmd.WorkerOne.Y); if (!success1) { _logger.LogDebug($"Player {player.PlayerName} couldn't place worker 1.", placeWorkerCmd.WorkerOne); continue; } var success2 = _game.TryAddWorker(player.PlayerName, 2, placeWorkerCmd.WorkerOne.X, placeWorkerCmd.WorkerOne.Y); if (!success2) { _logger.LogDebug($"Player {player.PlayerName} couldn't place worker 2.", placeWorkerCmd.WorkerTwo); continue; } workersPlaced = true; _logger.LogInformation($"Player {player.PlayerName} placed its workers.", placeWorkerCmd); } }
public async Task StartGame() { _logger.LogInformation("Game started"); while (!_game.GameIsOver) { _logger.LogInformation($"Player {TurnPlayer.PlayerName} started its turn."); var moveCmd = default(MoveCommand); while (true) { while (moveCmd is null || !moveCmd.IsValid) { moveCmd = await TurnPlayer.MoveRequest(_game); if (!moveCmd.IsValid) { _logger.LogDebug($"Player {TurnPlayer.PlayerName} sent invalid move comand.", moveCmd); } } var successMove = _game.TryMoveWorker(moveCmd); if (successMove) { break; } _logger.LogDebug($"Player {TurnPlayer.PlayerName} couldn't move its workers.", moveCmd); } _logger.LogInformation($"Player {TurnPlayer.PlayerName} made its move.", moveCmd); TurnPlayer = TurnPlayer == PlayerOne ? PlayerTwo : PlayerOne; } _logger.LogInformation($"Game is over. Player {_game.Winner?.Name} wins"); }