public IActionResult Game([FromQuery] string playerId) { HumanPlayer player; if (humanPlayers.TryGetValue(playerId, out player)) { var hasMoves = player.GameMatch.GameState.CalculateAvailableMoves(player.PieceColour).Any(); if (!hasMoves) { player.GameMatch.CompleteTurn(); } else if (player.GameMatch.CurrentTurn != player.PieceColour) { player.GameMatch.CompleteTurn(); } var gameBoard = new GameBoardMapper().Map(player.GameMatch, player.PieceColour); return(Ok(gameBoard)); } else { return(NotFound($"Player with ID {playerId} not found.")); } }
public IActionResult PlayTurn([FromBody] MoveRequest moveRequest) { HumanPlayer player; if (!humanPlayers.TryGetValue(moveRequest.PlayerId, out player)) { return(NotFound($"Player with ID {moveRequest.PlayerId} not found.")); } var match = player.GameMatch; GameState gameState = match.GameState; if (match.CurrentTurn == player.PieceColour) { var transformedMoveRequest = moveRequest; if (player.PieceColour == Service.PieceColour.Black) { transformedMoveRequest = new BoardRotaterMapper().Rotate(moveRequest, gameState.XLength, gameState.YLength); } var moves = match.GameState.CalculateAvailableMoves(player.PieceColour); var moveToPlay = moves.FirstOrDefault(m => m.StartGamePiece.Xcoord == transformedMoveRequest.StartX && m.StartGamePiece.Ycoord == transformedMoveRequest.StartY && m.EndGamePiece.Xcoord == transformedMoveRequest.EndX && m.EndGamePiece.Ycoord == transformedMoveRequest.EndY); if (moveToPlay != null) { player.SelectedMove = moveToPlay; match.CompleteTurn(); gameState = match.GameState; } else { return(Conflict("The given move is not playable.")); } } var gameBoard = new GameBoardMapper().Map(match, player.PieceColour); IGamePlayer opponent; if (player.PieceColour == Service.PieceColour.White) { opponent = match.BlackGamePlayer; } else { opponent = match.WhiteGamePlayer; } if (!(opponent is HumanPlayer)) { match.CompleteTurn(); } return(Ok(gameBoard)); }