/// <summary>Смещает фигуру вправо.</summary> /// <returns>true в случае успеха и false - в случае неудачи.</returns> public bool MoveRight() { if (Current == GameShape.Zero) { return(false); } if (!MoveRight(Current)) { return(false); } Current = Current.MoveRight(); return(true); }
/// <summary>Передвигает совокупность клеток вправо.</summary> /// <param name="shape">Фигура - совокупность клеток</param> /// <returns>Возвращается истина - если возможен дальнейший сдвиг вправо, ложь - если сдвиг не возможен</returns> protected bool MoveRight(GameShape shape) { GameShape moved = shape.MoveRight(); shape.Type = CellType.Empty; SetFigure(shape, true); if (IsEmpty(moved)) { SetFigure(moved, false); return(true); } shape.Type = moved.Type; SetFigure(shape, false); return(false); }
/// <summary>Поворот фигуры на 90 градусов по часовой стрелке.</summary> /// <param name="shape">Фигура, которую нужно повернуть.</param> /// <returns>Возвращается повернутая фигура.</returns> protected GameShape RotateFigure(GameShape shape) { GameShape rotated = shape.Rotate(); shape.Type = CellType.Empty; SetFigure(shape, true); shape.Type = rotated.Type; if (IsEmpty(rotated)) { SetFigure(rotated, false); return(rotated); } // Если неудача, фигура наткнулась на препятствие,то нужно сместить её вниз GameShape rotated2 = rotated.MoveDown(); if (IsEmpty(rotated2)) { SetFigure(rotated2, false); return(rotated2); } // Вправо rotated2 = rotated.MoveRight(); if (IsEmpty(rotated2)) { SetFigure(rotated2, false); return(rotated2); } // Влево rotated2 = rotated.MoveLeft(); if (IsEmpty(rotated2)) { SetFigure(rotated2, false); return(rotated2); } // Ничего не удалось сделать SetFigure(shape, false); return(GameShape.Zero); }