Example #1
0
        private void SelectScratchCardsSigns(ref GameSpinDto gameSpin, GameConfigurationDto gameConfiguration, int numberOfScratchCards)
        {
            Random randomizer = new Random();

            gameSpin.ScratchCards = new ScratchCardDto[numberOfScratchCards];

            for (int i = 0; i < numberOfScratchCards; i++)
            {
                List <SignDto> signs       = gameConfiguration.Signs.ToList();
                ScratchCardDto scratchCard = new ScratchCardDto
                {
                    SignIds = new int[gameConfiguration.SignsNumberOnScratchCard]
                };

                for (int j = 0; j < gameConfiguration.SignsNumberOnScratchCard; j++)
                {
                    int randomIndex = randomizer.Next(0, signs.Count);
                    scratchCard.SignIds[j] = signs[randomIndex].Id;

                    if (!gameConfiguration.ScratchCardSignsCanRepeat)
                    {
                        signs.RemoveAt(randomIndex);
                    }
                }

                gameSpin.ScratchCards[i] = scratchCard;
            }
        }
Example #2
0
        public GameSpinDto Spin(int gameId, int bet, int numberOfScratchCards)
        {
            GameSpinDto result = new GameSpinDto();

            GameConfigurationDto gameConfiguration = this.GetGameConfiguration(gameId);

            if (gameConfiguration.MaxNumberOfScratchCards < numberOfScratchCards)
            {
                throw new ArgumentException("Max number of scratch cards exceeded.");
            }

            if (gameConfiguration == null)
            {
                throw new ArgumentException("Game not found.");
            }

            this.SelectWheelSigns(ref result, gameConfiguration);

            this.SelectScratchCardsSigns(ref result, gameConfiguration, numberOfScratchCards);

            foreach (ScratchCardDto scratchCard in result.ScratchCards)
            {
                scratchCard.Factor = this.CalculatePrizeFactor(bet, result.WheelSignIds, scratchCard.SignIds, gameConfiguration);
                scratchCard.Prize  = scratchCard.Factor * bet;
            }

            result.Prize = result.ScratchCards.Sum(sc => sc.Prize);

            return(result);
        }
Example #3
0
        private void SelectWheelSigns(ref GameSpinDto gameSpin, GameConfigurationDto gameConfiguration)
        {
            Random randomizer = new Random();

            gameSpin.WheelSignIds = new int[gameConfiguration.SignsNumberOnWheel];

            List <SignDto> signs = gameConfiguration.Signs.Where(s => !s.Special).ToList();

            for (int i = 0; i < gameConfiguration.SignsNumberOnWheel; i++)
            {
                int randomIndex = randomizer.Next(0, signs.Count);
                gameSpin.WheelSignIds[i] = signs[randomIndex].Id;
                signs.RemoveAt(randomIndex);
            }
        }
        public IActionResult GetGameConfig(int gameId)
        {
            GameConfigurationDto gameConfiguration = this.gameManager.GetGameConfiguration(gameId);

            GetGameConfigResponse response = new GetGameConfigResponse
            {
                MaxNumberOfScratchCards = gameConfiguration.MaxNumberOfScratchCards,
                Signs = gameConfiguration.Signs.Select(s => new GetGameConfigResponse.Sign
                {
                    Id       = s.Id,
                    Name     = s.Name,
                    ImageUrl = s.ImageUrl,
                    Special  = s.Special
                }).ToArray()
            };

            return(this.Ok(response));
        }
        public ActionResult <ActionResultDto> Reset(GameConfigurationDto gameConfiguration)
        {
            if (gameConfiguration.PlayerNo < 1 || gameConfiguration.PlayerNo > 3)
            {
                return(BadRequest("PlayerNo should be in range from 1 to 3"));
            }

            var opponents = Enumerable
                            .Range(0, Constants.PlayersCount)
                            .Select(id => new FixedAgent(id))
                            .ToArray();
            var playerId  = gameConfiguration.PlayerNo;
            var gameState = UpdateGameState(new GameState(DealerId), opponents, playerId);

            _cache.Set(CacheKeys.GameState, gameState);
            _cache.Set(CacheKeys.Opponents, opponents);
            _cache.Set(CacheKeys.PlayerId, playerId);

            return(Ok(GetActionResult(gameState, playerId)));
        }
Example #6
0
        public GameConfigurationDto GetGameConfiguration(int gameId)
        {
            GameConfigurationDto gameConfiguration = this.cachingManager.GetGameConfiguration(gameId);

            if (gameConfiguration == null)
            {
                Game game = this.gameRepository.GetGame(gameId);

                if (game != null)
                {
                    gameConfiguration = new GameConfigurationDto
                    {
                        Id   = game.Id,
                        Name = game.Name,
                        SignsNumberOnScratchCard  = game.SignsNumberOnScratchCard,
                        SignsNumberOnWheel        = game.SignsNumberOnWheel,
                        UseJokerFeature           = game.UseJokerFeature,
                        MaxNumberOfScratchCards   = game.MaxNumberOfScratchCards,
                        ScratchCardSignsCanRepeat = game.ScratchCardSignsCanRepeat,
                        Signs = game.Signs.Select(s => new SignDto
                        {
                            Id       = s.Id,
                            ImageUrl = s.ImageUrl,
                            Name     = s.Name,
                            Special  = s.Special
                        }).ToArray(),
                        MatchingConfigurations = game.MatchingConfigurations.Select(mc => new MatchingConfigurationDto
                        {
                            Factor             = mc.Factor,
                            Id                 = mc.Id,
                            MatchingSignsCount = mc.MatchingSignsCount
                        }).ToArray()
                    };

                    this.cachingManager.SetGameConfiguration(gameId, gameConfiguration);
                }
            }

            return(gameConfiguration);
        }
Example #7
0
        private int CalculatePrizeFactor(int bet, int[] wheelSignIds, int[] scratchCardSignIds,
                                         GameConfigurationDto gameConfiguration)
        {
            //int numberOfMatching = scratchCardSignIds.Where(scs => wheelSignIds.Contains(scs))
            //    .Count();

            int numberOfMatching = scratchCardSignIds.Intersect(wheelSignIds).Count();

            int[] specialSignIds = gameConfiguration.Signs.Where(s => s.Special)
                                   .Select(s => s.Id)
                                   .ToArray();

            if (gameConfiguration.UseJokerFeature && specialSignIds.Length > 0)
            {
                numberOfMatching += scratchCardSignIds.Intersect(specialSignIds).Count();
            }

            MatchingConfigurationDto configuaration = gameConfiguration.MatchingConfigurations
                                                      .FirstOrDefault(mc => mc.MatchingSignsCount == numberOfMatching);

            int factor = configuaration == null ? 1 : configuaration.Factor;

            return(factor);
        }
        public void SetGameConfiguration(int gameId, GameConfigurationDto gameConfiguration)
        {
            string key = string.Format(CachingManager.GameCacheKey, gameId);

            this.memoryCache.Set(key, gameConfiguration);
        }