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; } } }
bool DrawFigureOnBoard (Vector2[] vector, int color) { if (!TryPlaceFigureOnBoard (vector)) return false; for (int i = 0; i <= vector.GetUpperBound(0); i++) { boardFields [(int)vector [i].X, (int)vector [i].Y] = FieldState.Dynamic; BoardColor [(int)vector [i].X, (int)vector [i].Y] = color; } return true; }
bool TryPlaceFigureOnBoard (Vector2[] vector) { for (int i = 0; i <= vector.GetUpperBound(0); i++) if ((vector [i].X < 0) || (vector [i].X >= width) || (vector [i].Y >= height)) return false; for (int i = 0; i <= vector.GetUpperBound(0); i++) if (boardFields [(int)vector [i].X, (int)vector [i].Y] == FieldState.Static) return false; return true; }
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; } } }