예제 #1
0
        // Controls
        public void Controls()
        {
            if (Keyboard.GetState().IsKeyDown(Keys.Left) || Keyboard.GetState().IsKeyDown(Keys.A))             // Move Left
            {
                if ((numX != 0) && (NumsMtrx[numX - 1, numY] == 0) && (NumsMtrx[numX - 1, numY + 1] == 0) && (NumsMtrx[numX - 1, numY + 2] == 0))
                {
                    NumsMtrx[numX - 1, numY]     = NumsMtrx[numX, numY];
                    NumsMtrx[numX - 1, numY + 1] = NumsMtrx[numX, numY + 1];
                    NumsMtrx[numX - 1, numY + 2] = NumsMtrx[numX, numY + 2];
                    NumsMtrx[numX, numY]         = 0;
                    NumsMtrx[numX, numY + 1]     = 0;
                    NumsMtrx[numX, numY + 2]     = 0;
                    numX--;
                }
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Right) || Keyboard.GetState().IsKeyDown(Keys.D))             // Move Right
            {
                if ((numX != NumsMtrx.GetLength(0) - 1) && (NumsMtrx[numX + 1, numY] == 0) && (NumsMtrx[numX + 1, numY + 1] == 0) && (NumsMtrx[numX + 1, numY + 2] == 0))
                {
                    NumsMtrx[numX + 1, numY]     = NumsMtrx[numX, numY];
                    NumsMtrx[numX + 1, numY + 1] = NumsMtrx[numX, numY + 1];
                    NumsMtrx[numX + 1, numY + 2] = NumsMtrx[numX, numY + 2];
                    NumsMtrx[numX, numY]         = 0;
                    NumsMtrx[numX, numY + 1]     = 0;
                    NumsMtrx[numX, numY + 2]     = 0;
                    numX++;
                }
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Down) || Keyboard.GetState().IsKeyDown(Keys.S))             // Move Down
            {
                if ((numY + 2 != NumsMtrx.GetLength(1) - 1) && (NumsMtrx[numX, numY + 3] == 0))
                {
                    NumsMtrx[numX, numY + 3] = NumsMtrx[numX, numY + 2];
                    NumsMtrx[numX, numY + 2] = NumsMtrx[numX, numY + 1];
                    NumsMtrx[numX, numY + 1] = NumsMtrx[numX, numY];
                    NumsMtrx[numX, numY]     = 0;
                    numY++;
                }
                else if ((numY + 2 == NumsMtrx.GetLength(1) - 1) || (NumsMtrx[numX, numY + 3] >= 0))                   // Drop blocks
                {
                    numX = 6;
                    numY = 0;

                    // Call for check matches and destroy
                    GenerateDiffMtrx();
                    MatchCheck();
                    NewBrick();
                }
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Up) || Keyboard.GetState().IsKeyDown(Keys.W))             // Shuffle
            {
                int temp = NumsMtrx[numX, numY + 2];
                NumsMtrx[numX, numY + 2] = NumsMtrx[numX, numY + 1];
                NumsMtrx[numX, numY + 1] = NumsMtrx[numX, numY];
                NumsMtrx[numX, numY]     = temp;
            }
        }
예제 #2
0
        // Find matched NumsMtrx nums
        public void MatchCheck()
        {
            // Copy nums from differenceMtrx to indexToDestroyMtrx
            // CopyMtrxNums(indexToDestroyMtrx, differenceMtrx);
            Array.Clear(indexToDestroyMtrx, 0, 252);
            for (int i = 0; i < NumsMtrx.GetLength(0); i++)
            {
                for (int ii = 0; ii < NumsMtrx.GetLength(1); ii++)
                {
                    VerticalCheck();
                    //int matchedXNumsCount = 0;
                    //int matchedYNumsCount = 0;

                    //if (differenceMtrx[i, ii] == 1)
                    //{
                    //	// horizontal check

                    //	// check to left from diffIndex
                    //	for (int check = 1; check < 3; check++)
                    //	{
                    //		int indexX = i - check;

                    //		if ((indexX < 0) || (NumsMtrx[i, ii] != NumsMtrx[indexX, ii]))
                    //			break;

                    //		indexToDestroyMtrx[indexX, ii] = 1;
                    //		matchedXNumsCount++;
                    //	}
                    //	// check to right from diffIndex
                    //	for (int check = 1; check < 3; check++)
                    //	{
                    //		int indexX = i + check;

                    //		if ((indexX >= numsMtrx.GetLength(0)) || (NumsMtrx[i, ii] != NumsMtrx[indexX, ii]))
                    //			break;

                    //		indexToDestroyMtrx[indexX, ii] = 1;
                    //		matchedXNumsCount++;
                    //	}

                    //	// mark with 1 current indexToDestroyMtrx index, if two or more indexes in row matched
                    //	if (matchedXNumsCount >= 2)
                    //	{
                    //		indexToDestroyMtrx[i, ii] = 1;
                    //	} else
                    //	{
                    //		indexToDestroyMtrx[i, ii] = 0;
                    //	}

                    //	// vertical check

                    //	// check to bottom from diffIndex
                    //	for (int check = 1; check < 5; check++)
                    //	{
                    //		int indexY = ii + check;

                    //		if (indexY >= numsMtrx.GetLength(1))
                    //			break;

                    //		indexToDestroyMtrx[i, indexY] = 1;
                    //		matchedYNumsCount++;
                    //	}

                    //	// mark with 1 current indexToDestroyMtrx index, if two or more indexes in row matched
                    //	if (matchedYNumsCount >= 2)
                    //	{
                    //		indexToDestroyMtrx[i, ii] = 1;
                    //	}
                    //	else
                    //	{
                    //		indexToDestroyMtrx[i, ii] = 0;
                    //	}

                    //	// destroy by indexToDestroyMtrx
                    //	//if (matchedXNumsCount >= 2 || matchedYNumsCount >= 2)
                    //	//{
                    //	//	for (int x = 0; x < NumsMtrx.GetLength(0); x++)
                    //	//	{
                    //	//		for (int y = 0; y < NumsMtrx.GetLength(1); y++)
                    //	//		{
                    //	//			if (indexToDestroyMtrx[x, y] == 1)
                    //	//			{
                    //	//				for (int v = 0; v < NumsMtrx.GetLength(1); v++)
                    //	//				{
                    //	//					NumsMtrx[x, y - v] = NumsMtrx[x, y - v - 1];
                    //	//					if (y - v - 1 <= 0)
                    //	//						break;
                    //	//				}
                    //	//			}
                    //	//		}
                    //	//	}
                    //	//}
                    //}
                }
            }
        }