Exemple #1
0
		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;
				}
			}
		}
Exemple #2
0
		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;
		}
Exemple #3
0
		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;
		}
Exemple #4
0
        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;
                }
            }
        }