Example #1
0
        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());
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }