Tetris.Board.RotateFigure C# (CSharp) Method

RotateFigure() public method

public RotateFigure ( ) : void
return void
        public void RotateFigure()
        {
            // Check colisions for next modification
            Vector2[] TestDynamicFigure = new Vector2[DynamicFigure.GetUpperBound(0) + 1];
            for (int i = 0; i < BlocksCountInFigure; i++)
                TestDynamicFigure[i] = Figures[DynamicFigureNumber, (DynamicFigureModificationNumber + 1) % 4, i] +
                    PositionForDynamicFigure;

            // Make sure that figure can rotate if she stand near left and right borders
            SortingVector2(ref TestDynamicFigure, true, TestDynamicFigure.GetLowerBound(0),
                TestDynamicFigure.GetUpperBound(0));
            int leftFigureBound;
            int rightFigureBound;
            if ((leftFigureBound = (int)TestDynamicFigure[0].X) < 0)
            {
                //int leftFigureBound = (int)TestDynamicFigure[0].X;
                for (int i = 0; i < BlocksCountInFigure; i++)
                {
                    TestDynamicFigure[i] +=
                        new Vector2(0 - leftFigureBound, 0);
                }
                if (TryPlaceFigureOnBoard(TestDynamicFigure))
                    PositionForDynamicFigure +=
                        new Vector2(0 - leftFigureBound, 0);
            }
            if ((rightFigureBound = (int)TestDynamicFigure[BlocksCountInFigure - 1].X) >= width)
            {
                //int rightFigureBound = (int)TestDynamicFigure[BlocksCountInFigure - 1].X;
                for (int i = 0; i < BlocksCountInFigure; i++)
                {
                    TestDynamicFigure[i] -=
                        new Vector2(rightFigureBound - width + 1, 0);
                }
                if (TryPlaceFigureOnBoard(TestDynamicFigure))
                    PositionForDynamicFigure -=
                        new Vector2(rightFigureBound - width + 1, 0);
            }

            if (TryPlaceFigureOnBoard(TestDynamicFigure))
            {
                DynamicFigureModificationNumber = (DynamicFigureModificationNumber + 1) % 4;
                // Clear dynamic fields
                for (int i = 0; i <= DynamicFigure.GetUpperBound(0); i++)
                    ClearBoardField((int)DynamicFigure[i].X, (int)DynamicFigure[i].Y);
                DynamicFigure = TestDynamicFigure;
                for (int i = 0; i <= DynamicFigure.GetUpperBound(0); i++)
                {
                    boardFields[(int)DynamicFigure[i].X, (int)DynamicFigure[i].Y] = FieldState.Dynamic;
                    BoardColor[(int)DynamicFigure[i].X, (int)DynamicFigure[i].Y] = DynamicFigureColor;
                }
            }
        }

Usage Example

Ejemplo n.º 1
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            KeyboardState keyboardState = Keyboard.GetState();

            if (keyboardState.IsKeyDown(Keys.Escape))
            {
                this.Exit();
            }

            // Check pause
            bool pauseKey = (oldKeyboardState.IsKeyDown(Keys.P) && (keyboardState.IsKeyUp(Keys.P)));

            oldKeyboardState = keyboardState;

            if (pauseKey)
            {
                pause = !pause;
            }

            if (!pause)
            {
                // Find dynamic figure position
                board.FindDynamicFigure();

                // Increase player score
                int lines = board.DestroyLines();
                if (lines > 0)
                {
                    score.Value += (int)((5.0f / 2.0f) * lines * (lines + 3));
                    board.Speed += 0.005f;
                }

                score.Level = (int)(10 * board.Speed);

                // Create new shape in game
                if (!board.CreateNewFigure())
                {
                    GameOver();
                }
                else
                {
                    // If left key is pressed
                    if (keyboardState.IsKeyDown(Keys.Left))
                    {
                        board.MoveFigureLeft();
                    }
                    // If right key is pressed
                    if (keyboardState.IsKeyDown(Keys.Right))
                    {
                        board.MoveFigureRight();
                    }
                    // If down key is pressed
                    if (keyboardState.IsKeyDown(Keys.Down))
                    {
                        board.MoveFigureDown();
                    }

                    // Rotate figure
                    if (keyboardState.IsKeyDown(Keys.Up) || keyboardState.IsKeyDown(Keys.Space))
                    {
                        board.RotateFigure();
                    }

                    // Moving figure
                    if (board.Movement >= 1)
                    {
                        board.Movement = 0;
                        board.MoveFigureDown();
                    }
                    else
                    {
                        board.Movement += board.Speed;
                    }
                }
            }

            base.Update(gameTime);
        }