public async Task <Interface.Player> GetCurrentPlayer(Guid gameSessionId) { var gameSession = await gameSessionAccess.GetGameSession(gameSessionId); var player = await playerAccess.GetPlayer(gameSession.CurrentPlayerId); return(player.Convert()); }
public async Task <DataTable> GetBoard(Guid gameSessionId) { // Board for Tic-Tac-Toe var gameSession = await gameSessionAccess.GetGameSession(gameSessionId); var players = new List <Player>(); foreach (var playerId in gameSession.PlayerIds) { var player = await playerAccess.GetPlayer(playerId); players.Add(player); } var tiles = await tileAccess.FindTiles(gameSessionId); var dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn(" ")); dataTable.Columns.Add(new DataColumn("A")); dataTable.Columns.Add(new DataColumn("B")); dataTable.Columns.Add(new DataColumn("C")); var dataRow = dataTable.NewRow(); dataRow[0] = 1; dataRow[1] = (tiles[0].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[0].PlayerId).GamePiece); dataRow[2] = (tiles[3].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[3].PlayerId).GamePiece); dataRow[3] = (tiles[6].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[6].PlayerId).GamePiece); dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow[0] = 2; dataRow[1] = (tiles[1].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[1].PlayerId).GamePiece); dataRow[2] = (tiles[4].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[4].PlayerId).GamePiece); dataRow[3] = (tiles[7].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[7].PlayerId).GamePiece); dataTable.Rows.Add(dataRow); dataRow = dataTable.NewRow(); dataRow[0] = 3; dataRow[1] = (tiles[2].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[2].PlayerId).GamePiece); dataRow[2] = (tiles[5].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[5].PlayerId).GamePiece); dataRow[3] = (tiles[8].PlayerId == Guid.Empty ? " " : players.First(i => i.Id == tiles[8].PlayerId).GamePiece); dataTable.Rows.Add(dataRow); return(dataTable); }
public async Task <Player> FindWinner(Guid gameSessionId) { if (await IsPlayable(gameSessionId)) { throw new ApplicationException("Game is still playable."); } var tiles = await tileAccess.FindTiles(gameSessionId); var dictionary = tiles.ToDictionary(tile => tile.Address, tile => tile.Convert()); var playerId = Guid.Empty; // Check all possible vectors // A Col if (IsWinningVector(dictionary["A1"], dictionary["A2"], dictionary["A3"])) { playerId = dictionary["A1"].PlayerId; } // B Col else if (IsWinningVector(dictionary["B1"], dictionary["B2"], dictionary["B3"])) { playerId = dictionary["B1"].PlayerId; } // C Col else if (IsWinningVector(dictionary["C1"], dictionary["C2"], dictionary["C3"])) { playerId = dictionary["C1"].PlayerId; } // 1 Row else if (IsWinningVector(dictionary["A1"], dictionary["A2"], dictionary["A3"])) { playerId = dictionary["A1"].PlayerId; } // 2 Row else if (IsWinningVector(dictionary["B1"], dictionary["B2"], dictionary["B3"])) { playerId = dictionary["B1"].PlayerId; } // 3 Row else if (IsWinningVector(dictionary["C1"], dictionary["C2"], dictionary["C3"])) { playerId = dictionary["C1"].PlayerId; } // Right Diagonal else if (IsWinningVector(dictionary["A1"], dictionary["B2"], dictionary["C3"])) { playerId = dictionary["A1"].PlayerId; } // Left Diagonal else if (IsWinningVector(dictionary["A3"], dictionary["B2"], dictionary["C1"])) { playerId = dictionary["A3"].PlayerId; } var player = await playerAccess.GetPlayer(playerId); return(player.Convert()); }