コード例 #1
0
        /// <summary>
        /// Represent vertical win condition delegate
        /// </summary>
        /// <param name="gameData"></param>
        /// <returns></returns>
        private IEnumerable <IBingoValue <int> > VerticalWinConditionCheck(IBingoGameSession <int> gameData)
        {
            var groupedValues   = gameData.MatchesValues.GroupBy(val => val.VerticalPosition);
            var conditionResult = groupedValues.FirstOrDefault(gr => gr.Count() >= gameData.Board.BoardHeight);

            return(conditionResult);
        }
コード例 #2
0
        public (bool, IEnumerable <int>) CheckOnWin(IBingoGameSession <int> gameSessionData)
        {
            (bool, IEnumerable <int>)result = (false, null);
            var winConditionResult = this.GameEngnine.IsWinConditionFound(gameSessionData);

            result.Item1 = winConditionResult.Item1;
            result.Item2 = winConditionResult.Item2?.Select(item => item.BingoValue);
            return(result);
        }
コード例 #3
0
        /// <summary>
        /// Find of any win conditions results that satisfy the conditions
        /// </summary>
        /// <param name="gameSession">game session data</param>
        /// <returns>Tuple of (if win conditions founded + win values if they exists)</returns>
        public (bool, IEnumerable <IBingoValue <int> >) WinConditionProcessing(IBingoGameSession <int> gameSession)
        {
            (bool, IEnumerable <IBingoValue <int> >)winConditionResult = (false, null);
            var invokedProcessingResult = this.DefaultWinConditions.Select(condition => condition.Value.Invoke(gameSession));
            var winValues = invokedProcessingResult.FirstOrDefault(res => res != null);

            winConditionResult.Item1 = winValues != null;
            winConditionResult.Item2 = winValues;
            return(winConditionResult);
        }
コード例 #4
0
        /// <summary>
        /// Repesents diagonal win condition delegate
        /// </summary>
        /// <param name="gameData">game session data</param>
        /// <returns></returns>
        private IEnumerable <IBingoValue <int> > DiagonalWinConditionCheck(IBingoGameSession <int> gameData)
        {
            IEnumerable <IBingoValue <int> > winElements = null;
            var matches = gameData.MatchesValues.Where(val => val.HorizontalPosition == val.VerticalPosition);

            if (matches.Count() >= gameData.Board.BoardHeight)
            {
                winElements = matches;
            }

            return(winElements);
        }
コード例 #5
0
        public IBingoGameSession <int> CreatePlayerSessionData()
        {
            IBingoGameSession <int> generatedData = null;

            try
            {
                generatedData = this.GameEngnine.InitializeGameSession();
            }
            catch (Exception ex)
            {
                this.Log(ex.Message);
                throw;
            }

            return(generatedData);
        }
コード例 #6
0
ファイル: CommonBingoEngine.cs プロジェクト: AndrewMvvm/Bingo
        public int GameStepProcessing(IBingoGameSession <int> sessionData)
        {
            int randomValue = this.randomizer.Next(BingoStaticData.DefaultBingoMinValue, BingoStaticData.DefaultBingoMaxValue);

            while (sessionData.SessionExistingValues.Contains(randomValue))
            {
                randomValue = this.randomizer.Next(BingoStaticData.DefaultBingoMinValue, BingoStaticData.DefaultBingoMaxValue);
            }

            sessionData.SessionExistingValues.Add(randomValue);
            for (int posX = 0; posX < sessionData.Board.BoardWidth; posX++)
            {
                for (int posY = 0; posY < sessionData.Board.BoardHeight; posY++)
                {
                    if (sessionData.Board.BoardRepresentation[posX, posY] == randomValue)
                    {
                        var bingoPoint = new DefaultBingoValue(posX, posY, sessionData.Board.BoardRepresentation[posX, posY]);
                        sessionData.MatchesValues.Add(bingoPoint);
                    }
                }
            }

            return(randomValue);
        }
コード例 #7
0
        public int Roll(IBingoGameSession <int> gameSessionData)
        {
            int generatedValue = this.GameEngnine.GameStepProcessing(gameSessionData);

            return(generatedValue);
        }
コード例 #8
0
ファイル: CommonBingoEngine.cs プロジェクト: AndrewMvvm/Bingo
        public (bool, IEnumerable <IBingoValue <int> >) IsWinConditionFound(IBingoGameSession <int> sessionData)
        {
            var winResult = this.winProcessing.WinConditionProcessing(sessionData);

            return(winResult);
        }