Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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();
        }