Exemple #1
0
 public AnimatedBall(BingoBallViewModel ball, double maxY, bool shouldBounce, double fallSpeedPerStep)
 {
     _ball             = ball;
     _maxY             = maxY;
     _shouldBounce     = shouldBounce;
     _fallSpeedPerStep = fallSpeedPerStep;
     _yVector          = _fallSpeedPerStep;
     _y = _ball.Y;
 }
Exemple #2
0
        private BingoBallViewModel[][] CopyMatrix(BingoBallViewModel[][] matrix)
        {
            BingoBallViewModel[][] newMatrix = new BingoBallViewModel[matrix.Length][];
            for (var index = 0; index < matrix.Length; index++)
            {
                newMatrix[index] = new BingoBallViewModel[matrix[0].Length];
                for (int j = 0; j < matrix[index].Length; j++)
                {
                    newMatrix[index][j] = new BingoBallViewModel(matrix[index][j]);
                }
            }

            return(newMatrix);
        }
        public BingoBallViewModel(BingoBallViewModel ball)
        {
            Number = ball.Number;
            Text   = ball.Text;
            State  = ball.State;

            _internalBall = ball;

            this.WhenAnyValue(x => x._internalBall.Width).Where(x => x > 0).Subscribe(x =>
                                                                                      Width = x);
            this.WhenAnyValue(x => x._internalBall.Height).Where(x => x > 0).Subscribe(x =>
                                                                                       Height = x);

            this.WhenAnyValue(x => x._internalBall.IsMatchPoint).Subscribe(x => IsMatchPoint = x);
            this.WhenAnyValue(x => x._internalBall.Text).Subscribe(x => Text   = x);
            this.WhenAnyValue(x => x._internalBall.State).Subscribe(x => State = x);
        }
Exemple #4
0
        private IEnumerable <BingoBallViewModel[]> Lines(BingoBallViewModel[][] matrix)
        {
            // Horizontal
            for (int i = 0; i < matrix.Length; i++)
            {
                BingoBallViewModel[] line = new BingoBallViewModel[matrix.Length];
                for (int j = 0; j < matrix[i].Length; j++)
                {
                    line[j] = matrix[i][j];
                }

                yield return(line);
            }

            // Vertical
            for (int i = 0; i < matrix.Length; i++)
            {
                BingoBallViewModel[] line = new BingoBallViewModel[matrix.Length];
                for (int j = 0; j < matrix[i].Length; j++)
                {
                    line[j] = matrix[j][i];
                }

                yield return(line);
            }

            // Diagonal
            BingoBallViewModel[] diagonalLine = new BingoBallViewModel[matrix.Length];
            for (int i = 0; i < matrix.Length; i++)
            {
                diagonalLine[i] = matrix[i][i];
            }

            yield return(diagonalLine);

            diagonalLine = new BingoBallViewModel[matrix.Length];
            for (int i = 0; i < matrix.Length; i++)
            {
                diagonalLine[i] = matrix[matrix.Length - 1 - i][i];
            }

            yield return(diagonalLine);
        }
Exemple #5
0
        private BingoBallViewModel[][] SetupMatrix(Random random, int[] numbers, int[] filledNumbers)
        {
            BingoBallViewModel[][] matrix;
            do
            {
                Shuffle(numbers, random);
                matrix = new BingoBallViewModel[5][];
                for (int x = 0; x < 5; x += 1)
                {
                    matrix[x] = new BingoBallViewModel[5];
                    for (int y = 0; y < 5; y += 1)
                    {
                        matrix[x][y] = new BingoBallViewModel(numbers[x * 5 + y]);
                    }
                }
            } while (Lines(matrix).Any(x => x.Count(x => filledNumbers.Contains(x.Number)) > 3));

            return(matrix);
        }
Exemple #6
0
        public async Task ClearBalls()
        {
            double height = MatrixForAnimation[0][0].Height;
            double width  = MatrixForAnimation[0][0].Width;
            double horizontalMarginOfMatrix = 6;
            double verticalMarginOfMatrix   = 3;

            double horizontalMargin = ((WidthOfMatrix - 2 * horizontalMarginOfMatrix) - width * MatrixForAnimation.Length) / (MatrixForAnimation.Length - 1);
            double verticalMargin   = ((HeightOfMatrix - 2 * verticalMarginOfMatrix) - height * MatrixForAnimation[0].Length) / (MatrixForAnimation[0].Length - 1);

            horizontalMargin = Math.Ceiling(horizontalMargin);
            verticalMargin   = Math.Ceiling(verticalMargin);

            // Get the columns
            BingoBallViewModel[][] columns = new BingoBallViewModel[MatrixForAnimation.Length][];
            double hMargin = horizontalMarginOfMatrix;

            for (int i = 0; i < MatrixForAnimation.Length; i++)
            {
                columns[i] = new BingoBallViewModel[MatrixForAnimation.Length];
                if (i > 0)
                {
                    hMargin += horizontalMargin;
                }

                double vMargin = verticalMarginOfMatrix;
                for (int j = 0; j < MatrixForAnimation[i].Length; j++)
                {
                    // Go down colum
                    columns[i][j]   = MatrixForAnimation[j][i];
                    columns[i][j].X = hMargin + width * i;
                    columns[i][j].Y = vMargin + height * j;
                    vMargin        += verticalMargin;
                }
            }

            FlattendMatrixForAnimation = MatrixForAnimation.SelectMany(x => x).ToArray();
            IsAnimating = true;
            await Task.Delay(10);

            // Drop balls
            int stepCounter           = 0;
            int columnIndex           = 0;
            int rowIndex              = columns[0].Length - 1;
            List <AnimatedBall> balls = new List <AnimatedBall>();
            double maxY = HeightOfMatrix + height;

            while (true)
            {
                if (rowIndex > -1 && stepCounter++ > 2)
                {
                    stepCounter = 0;
                    balls.Add(new AnimatedBall(columns[columnIndex++][rowIndex], maxY, false, 1));

                    if (columnIndex > columns.Length - 1)
                    {
                        columnIndex = 0;
                        rowIndex--;
                    }
                }

                foreach (AnimatedBall animatedBall in balls)
                {
                    animatedBall.Step();
                }

                if (balls.Count == FlattendMatrixForAnimation.Length)
                {
                    if (balls.Last().Finished)
                    {
                        break;
                    }
                }

                await Task.Delay(10);
            }
        }