public async Task <Player> GetCurrentPlayer(Guid gameSessionId) { var gameSessions = await gameSessionAccess.FindGameSessions(i => i.Id == gameSessionId); var gameSession = gameSessions.First(); var players = await playerAccess.FindPlayers(i => i.Id == gameSession.CurrentPlayerId); return(players.First()); }
public async Task <DataTable> GetBoard(Guid gameSessionId) { // Board for Tic-Tac-Toe var gameSessions = await gameSessionAccess.FindGameSessions(i => i.Id == gameSessionId); var gameSession = gameSessions.First(); var players = await playerAccess.FindPlayers(i => gameSession.PlayerIds.Contains(i.Id)); var tiles = await tileAccess.FindTiles(i => i.Id == 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(i => i.Id == gameSessionId); var dictionary = tiles.ToDictionary(tile => tile.Address, tile => tile); 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 players = await playerAccess.FindPlayers(i => i.Id == playerId); var player = players.FirstOrDefault(); return(player); }