Esempio n. 1
0
        public async Task <ApplyTurnResponse> ApplyTurnAsync(ApplyTurnRequest request)
        {
            var response = ServiceMessageFactory <ApplyTurnResponse> .CreateFrom(request);

            var playerRequest = ServiceMessageFactory <GetPlayerRequest> .CreateFrom(request);

            playerRequest.PlayerId = request.PlayerId;
            var playerResponse = await playerAccess.GetPlayerAsync(playerRequest);

            var playTurnRequest = ServiceMessageFactory <PlayTurnRequest> .CreateFrom(request);

            playTurnRequest.GameSessionId = request.GameSessionId;
            playTurnRequest.PlayerId      = request.PlayerId;
            playTurnRequest.Address       = request.Address;
            playTurnRequest.IsAutoPlay    = playerResponse.Player.IsMachine;

            var playTurnResponse = await gamePlayEngine.PlayTurnAsync(playTurnRequest);

            if (playTurnResponse.HasErrors)
            {
                logger.LogError($"{InstanceId}: {playTurnResponse.Errors}");
            }
            return(response);
        }
Esempio n. 2
0
        public async Task <FindWinnerResponse> FindWinnerAsync(FindWinnerRequest request)
        {
            var response = ServiceMessageFactory <FindWinnerResponse> .CreateFrom(request);

            var tilesRequest = ServiceMessageFactory <FindTilesRequest> .CreateFrom(request);

            tilesRequest.Filter = tile => tile.GameSessionId == request.GameSessionId;
            var tilesResponse = await tileAccess.FindTilesAsync(tilesRequest);

            var dictionary = tilesResponse.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 playerRequest = ServiceMessageFactory <GetPlayerRequest> .CreateFrom(request);

            playerRequest.PlayerId = playerId;
            var playerResponse = await playerAccess.GetPlayerAsync(playerRequest);

            response.Player = playerResponse.Player.Convert();

            return(response);
        }
Esempio n. 3
0
        public async Task <GetGameBoardResponse> GetBoardAsync(GetGameBoardRequest request)
        {
            var response = ServiceMessageFactory <GetGameBoardResponse> .CreateFrom(request);

            var gameSessionRequest = ServiceMessageFactory <GetGameSessionRequest> .CreateFrom(request);

            gameSessionRequest.GameSessionId = request.GameSessionId;
            var gameSessionResponse = await gameSessionAccess.GetGameSessionAsync(gameSessionRequest);

            if (gameSessionResponse.HasErrors)
            {
                response.Errors = "Unable to get the selected game board.  Session error.";
                return(response);
            }

            var gameSession = gameSessionResponse.GameSession;

            // Board for Tic-Tac-Toe
            var players = new List <Player>();

            foreach (var playerId in gameSession.PlayerIds)
            {
                var playerRequest = ServiceMessageFactory <GetPlayerRequest> .CreateFrom(request);

                playerRequest.PlayerId = playerId;
                var playerResponse = await playerAccess.GetPlayerAsync(playerRequest);

                players.Add(playerResponse.Player);
            }

            response.GameBoard = new DataTable();
            response.GameBoard.Columns.Add(new DataColumn(" "));
            response.GameBoard.Columns.Add(new DataColumn("A"));
            response.GameBoard.Columns.Add(new DataColumn("B"));
            response.GameBoard.Columns.Add(new DataColumn("C"));

            var tileRequest = ServiceMessageFactory <FindTilesRequest> .CreateFrom(request);

            tileRequest.Filter = tile => tile.GameSessionId == request.GameSessionId;
            var tileResponse = await tileAccess.FindTilesAsync(tileRequest);

            var tiles = tileResponse.Tiles;

            if (tileResponse.HasErrors)
            {
                return(response);
            }

            var dataRow = response.GameBoard.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);
            response.GameBoard.Rows.Add(dataRow);

            dataRow    = response.GameBoard.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);
            response.GameBoard.Rows.Add(dataRow);

            dataRow    = response.GameBoard.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);
            response.GameBoard.Rows.Add(dataRow);

            return(response);
        }