Exemplo n.º 1
0
        public async Task <GameSession> InitializeGame(Guid gameDefinitionId, int numberOfPlayers)
        {
            var gameDefinitions = await gameDefinitionAccess.FindGameDefinitions(i => i.Id == gameDefinitionId);

            var gameDefinition = gameDefinitions.FirstOrDefault();

            gameDefinition.NotNull();

            var createdPlayers = await CreatePlayers(numberOfPlayers, gameDefinition);

            var gameSession = GameSessionFactory.Create(gameDefinitionId, createdPlayers.Select(i => i.Id).ToArray());
            await gameSessionAccess.ProvisionGameSession(gameSession);

            var tiles = TicTacToeBoardFactory.Create(gameSession.Id, new[] { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3" });
            await tileAccess.ProvisionTiles(tiles.ToArray());

            return(gameSession);
        }
Exemplo n.º 2
0
        public async Task <InitializeGameResponse> InitializeGameAsync(InitializeGameRequest request)
        {
            var response = ServiceMessageFactory <InitializeGameResponse> .CreateFrom(request);

            var gameDefinitionRequest = ServiceMessageFactory <GetGameDefinitionRequest> .CreateFrom(request);

            gameDefinitionRequest.GameDefinitionId = request.GameDefinitionId;

            var gameDefinitionResponse = await gameDefinitionAccess.GetGameDefinitionAsync(gameDefinitionRequest);

            // Create Players
            var players = new List <Player>();

            for (var idx = 0; idx < gameDefinitionResponse.GameDefinition.GamePieces.Length; idx++)
            {
                var name      = $"Player {idx + 1}";
                var gamePiece = gameDefinitionResponse.GameDefinition.GamePieces[idx];
                var isMachine = request.NumberOfPlayers <= idx;

                var player = PlayerFactory.Create(name, gamePiece, isMachine);
                players.Add(player);
            }

            var createPlayersRequest = ServiceMessageFactory <CreatePlayersRequest> .CreateFrom(request);

            createPlayersRequest.Players = players.Convert();
            var createPlayerResponse = await playerAccess.CreatePlayersAsync(createPlayersRequest);

            if (createPlayerResponse.HasErrors)
            {
                logger.LogError($"{createPlayerResponse.Errors}");
            }


            var playerIds   = players.Select(i => i.Id).ToArray();
            var gameSession = GameSessionFactory.Create(request.GameDefinitionId, playerIds);

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

            gameSessionRequest.GameSession = gameSession.Convert();

            var gameSessionResponse = await gameSessionAccess.CreateGameSessionAsync(gameSessionRequest);

            if (!gameSessionResponse.HasErrors)
            {
                response.GameSession = gameSessionResponse.GameSession.Convert();
            }
            else
            {
                response.Errors += "Unable to create game session.";
                logger.LogError($"Unable to create game session ({response.GameSession.Id}).");
            }

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

            var tiles = TicTacToeBoardFactory.Create(gameSession.Id, new[] { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3" });

            tilesRequest.Tiles = tiles.Convert();

            var tilesResponse = await tileAccess.CreateTilesAsync(tilesRequest);

            if (!tilesResponse.HasErrors)
            {
                return(response);
            }

            response.Errors += "Unable to create game tiles.";
            logger.LogError($"Unable to create game tiles for game session ({response.GameSession.Id}).");

            return(response);
        }
Exemplo n.º 3
0
 private async Task CreateTicTacToeBoard(GameSession gameSession)
 {
     // Create Game Tiles
     var tiles = TicTacToeBoardFactory.Create(gameSession.Id, new [] { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3" });
     await tileAccess.CreateTiles(tiles.Convert());
 }