// Функция рисования доски private void НарисоватьДоску() { // Сначала очищаем доску ДоскаИгры.Children.Clear(); // Пробегаемся по массиву для создания элементов for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (массивОбъектовДоски[i, j] > 0) { // Создадим элемент,если его значение больше 0(если 0- это пустой элемент) ЭлементДоски элемент = new ЭлементДоски { ЗначениеОбъекта = массивОбъектовДоски[i, j], Width = ДоскаИгры.Width / 4, Height = ДоскаИгры.Height / 4, позиция_I = i, позиция_J = j }; // Располагаем на канве новый элемент Canvas.SetTop(элемент, i * ДоскаИгры.Width / 4); Canvas.SetLeft(элемент, j * ДоскаИгры.Width / 4); ДоскаИгры.Children.Add(элемент); // Добавляем к элементу функцию,которая будет срабатывать при нажатии кнопкой элемент.MouseLeftButtonUp += new MouseButtonEventHandler(НажатиеЛевойКнопкиМыши); } } } }
// Функция сдвига нажатого элемента private void СдвинутьНажатыйЭлемент(ЭлементДоски элемент, int i, int j) { // Поменяем значение черного элемента на выбранный массивОбъектовДоски[i, j] = массивОбъектовДоски[элемент.позиция_I, элемент.позиция_J]; // И создадим новый темный элемент массивОбъектовДоски[элемент.позиция_I, элемент.позиция_J] = 0; // После переопределения массива - заново перерисуем доску НарисоватьДоску(); }
// Добавляем к элементу функцию,которая будет срабатывать при нажатии кнопкой void НажатиеЛевойКнопкиМыши(object sender, MouseButtonEventArgs e) { ЭлементДоски it = (ЭлементДоски)sender; // Если можно сдвинуть на позицию(если рядом есть нулевой черный элемент) - то сдвигаем. Иначе - нет. // Всего 4 варианта: сверху, снизу,слева и справа if (ПроверитьДействие(it.позиция_I - 1, it.позиция_J)) { СдвинутьНажатыйЭлемент(it, it.позиция_I - 1, it.позиция_J); } else if (ПроверитьДействие(it.позиция_I, it.позиция_J + 1)) { СдвинутьНажатыйЭлемент(it, it.позиция_I, it.позиция_J + 1); } else if (ПроверитьДействие(it.позиция_I + 1, it.позиция_J)) { СдвинутьНажатыйЭлемент(it, it.позиция_I + 1, it.позиция_J); } else if (ПроверитьДействие(it.позиция_I, it.позиция_J - 1)) { СдвинутьНажатыйЭлемент(it, it.позиция_I, it.позиция_J - 1); } }