public AnimatedBall(BingoBallViewModel ball, double maxY, bool shouldBounce, double fallSpeedPerStep) { _ball = ball; _maxY = maxY; _shouldBounce = shouldBounce; _fallSpeedPerStep = fallSpeedPerStep; _yVector = _fallSpeedPerStep; _y = _ball.Y; }
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); }
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); }
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); }
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); } }