private void ExecuteShowArrayStateCommand(object obj) { StringBuilder str = new StringBuilder(); for (int i = 0; i < MainArrayVM.GetLength(0); i++) { for (int j = 0; j < MainArrayVM.GetLength(1); j++) { str.AppendFormat("{0} ", MainArrayVM[i, j]); } str.Append("\n"); } MessageBox.Show(str.ToString(), "Main Array State"); }
private void ExecuteRightArrowCommand(object obj) { //MessageBox.Show("Right Arrow Command"); for (int i = MainArrayVM.GetLength(0) - 1; i >= 0; i--) // Итерация строк { // Слияние вправо ПЕРЕД сдвигом for (int j = 0; j <= MainArrayVM.GetLength(1) - 1; j++) // Итерация столбиков { if (j + 1 > MainArrayVM.GetLength(1) - 1) { continue; } // Если соседние ненулевые значения равные, то... (выполняем слияние) if (MainArrayVM[i, j] != 0 && MainArrayVM[i, j + 1] != 0 && MainArrayVM[i, j] == MainArrayVM[i, j + 1]) { Score += MainArrayVM[i, j + 1] * 2; MainArrayVM[i, j + 1] *= 2; MainArrayVM[i, j] = 0; } } // Сдвиг вправо ПОСЛЕ слияния for (int m = MainArrayVM.GetLength(0) - 1; m >= 0; m--) // Итерация строк { for (int n = 0; n < MainArrayVM.GetLength(1) - 1; n++) // Итерация столбиков { // Если элемент не равен 0, а следующий равен 0, то... (сдвигаем вправо) if (MainArrayVM[m, n] != 0 && MainArrayVM[m, n + 1] == 0) { MainArrayVM[m, n + 1] = MainArrayVM[m, n]; MainArrayVM[m, n] = 0; } } } } actionAfterArrowCommand(); }
private void ExecuteLeftArrowCommand(object obj) { // MessageBox.Show("Left Arrow Command"); for (int i = 0; i <= MainArrayVM.GetLength(0) - 1; i++) // Итерация строк { // Слияние влево ПОСЛЕ сдвига for (int j = 0; j <= MainArrayVM.GetLength(1) - 1; j++) // Итерация столбиков { if (j - 1 < 0) { continue; } // Если соседние ненулевые значения равные, то... (выполняем слияние) if (MainArrayVM[i, j] != 0 && MainArrayVM[i, j - 1] != 0 && MainArrayVM[i, j] == MainArrayVM[i, j - 1]) { Score += MainArrayVM[i, j - 1] * 2; MainArrayVM[i, j - 1] *= 2; MainArrayVM[i, j] = 0; } } // Сдвиг влево ПЕРЕД слиянием for (int m = 0; m <= MainArrayVM.GetLength(0) - 1; m++) // Итерация строк { for (int n = MainArrayVM.GetLength(1) - 1; n >= 1; n--) // Итерация столбиков { // Если элемент не равен 0, а предыдущий равен 0, то... (сдвигаем влево) if (MainArrayVM[m, n] != 0 && MainArrayVM[m, n - 1] == 0) { MainArrayVM[m, n - 1] = MainArrayVM[m, n]; MainArrayVM[m, n] = 0; } } } } actionAfterArrowCommand(); }
private void ExecuteDownArrowCommand(object obj) { //MessageBox.Show("Down Arrow Command"); for (int n = 0; n <= MainArrayVM.GetLength(0) - 1; n++) // Итерация строк { // Слияние for (int m = 0; m <= MainArrayVM.GetLength(1) - 1; m++) // Итерация столбиков { if (n + 1 > MainArrayVM.GetLength(1) - 1) { continue; } if (MainArrayVM[n, m] != 0 && MainArrayVM[n + 1, m] != 0 && MainArrayVM[n, m] == MainArrayVM[n + 1, m]) { Score += MainArrayVM[n + 1, m] * 2; MainArrayVM[n + 1, m] *= 2; MainArrayVM[n, m] = 0; } } // Сдвиг for (int i = 0; i < MainArrayVM.GetLength(0) - 1; i++) // Итерация строк { for (int j = MainArrayVM.GetLength(1) - 1; j >= 0; j--) // Итерация столбиков { if (MainArrayVM[i, j] != 0 && MainArrayVM[i + 1, j] == 0) { MainArrayVM[i + 1, j] = MainArrayVM[i, j]; MainArrayVM[i, j] = 0; } } } } actionAfterArrowCommand(); }
private void ExecuteUpArrowCommand(object obj) { //MessageBox.Show("Up Arrow Command"); for (int n = MainArrayVM.GetLength(0) - 1; n > 0; n--) // Итерация строк { // Слияние for (int m = 0; m <= MainArrayVM.GetLength(1) - 1; m++) // Итерация столбиков { if (MainArrayVM[n, m] != 0 && MainArrayVM[n - 1, m] != 0 && MainArrayVM[n, m] == MainArrayVM[n - 1, m]) { Score += MainArrayVM[n - 1, m] * 2; MainArrayVM[n - 1, m] *= 2; MainArrayVM[n, m] = 0; } } // Сдвиг for (int i = MainArrayVM.GetLength(0) - 1; i >= 1; i--) // Итерация строк { for (int j = 0; j <= MainArrayVM.GetLength(1) - 1; j++) // Итерация столбиков { if (MainArrayVM[i, j] != 0 && MainArrayVM[i - 1, j] == 0) { MainArrayVM[i - 1, j] = MainArrayVM[i, j]; MainArrayVM[i, j] = 0; } } } } actionAfterArrowCommand(); }