Пример #1
0
        /// <summary>
        /// Повернуть фигуру
        /// </summary>
        public void CurTetraminoMoveRotate()
        {
            if (currentTetramino.NameFig != 'O')
            {
                Point   pos     = currentTetramino.Position;
                Point[] S       = new Point[4];
                Point[] figure  = currentTetramino.Cells;
                bool    canMove = true;
                figure.CopyTo(S, 0);
                TetrisField.TetraminoErase(currentTetramino);
                for (int i = 0; i < S.Length; i++)
                {
                    double x = S[i].X;
                    S[i].X = -S[i].Y;
                    S[i].Y = x;

                    if (((int)((S[i].Y + pos.Y) + 1)) <= 0) // сверху - стена
                    {
                        canMove = false;
                    }
                    else if (((int)((S[i].Y + pos.Y) + 1)) >= TetrisField.rows) // снизу - стена
                    {
                        canMove = false;
                    }
                    else if (((int)(S[i].X + pos.X) + ((TetrisField.columns / 2) - 1) + 1) <= 0) //слева - стена
                    {
                        canMove = false;
                    }
                    else if (((int)(S[i].X + pos.X) + ((TetrisField.columns / 2) - 1) + 1) > TetrisField.columns) // справа - стена
                    {
                        canMove = false;
                    }
                    else if (TetrisField.Field[(int)(S[i].X + pos.X) + ((TetrisField.columns / 2) - 1),
                                               (int)(S[i].Y + pos.Y)].Fill != GridField.fieldBrush)
                    {
                        canMove = false;
                    }
                }
                if (canMove)
                {
                    currentTetramino.Turn();
                }
                TetrisField.TetraminoDraw(currentTetramino);
            }
        }