// 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; } }
// 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; // // } // // } // // } // // } // //} //} } } }