Пример #1
0
        public async Task <Interface.Player> GetCurrentPlayer(Guid gameSessionId)
        {
            var gameSession = await gameSessionAccess.GetGameSession(gameSessionId);

            var player = await playerAccess.GetPlayer(gameSession.CurrentPlayerId);

            return(player.Convert());
        }
Пример #2
0
        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);
        }
Пример #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(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());
        }