2048 (8)

  • 36
  • Недоступна
Итак, модель почти готова, добавим еще пару простых методов и начнем реализацию контроллера. В модели нам не хватает способа получить игровое поле, чтобы передать его представлению на отрисовку, а также метода, выполнив который, можно было бы определить возможен ли ход в текущей позиции, или нет.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (59)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Николай Т.
Уровень 31, Рязань, Россия
14 июня, 08:52
public class Controller extends KeyAdapter Валидатор жалуется: Класс Controller должен быть потомком класса KeyAdapter. Что-то сам не пойму почему это я решил создать свой класс KeyAdapter, видимо абсолютно забыл что такой класс есть в пакете java.awt.event.
Е К
Уровень 36, Краснодар, Россия
27 мая, 20:25
Важно жеш не просто проверить на наличие пустых плиток в методе canMove. Но и проверить есть ли варик сложить соседние плитки в любом направлении(кроме диагоналей естественно). На этом похерил пару попыток... Но вот где живёт этот замечательный человек, который наделал столько методов для canMove в примере решения? Хочу послать ему открытку))
Бельчонок Изи
Уровень 31, Казань
22 мая, 14:09
Не знаю, для чего было нужно создавать два дополнительных метода по получению количества пустых ячеек и по проверке пОлно ли поле, когда можно в основном методе просто проверить getEmptyTiles().size() == 0. Но прошло валидацию, только когда добавила их. Если есть в этом какой-то сокровенный смысл, объясните, пожалуйста.
Aleksandr
Уровень 41
15 февраля, 08:36
Так увлекся проверками в методе canMove , что стал проверять еще и по диагонали. -2 попытки
Raphael
Уровень 41, Москва, Россия
22 января, 00:39
2437й
Артём Уколов
Уровень 33, Москва, Россия
8 января, 19:21
в классе Model в методе public boolean canMove() нужно по сути сделать 2 проверки: 1) надо проверить есть ли пустые плитки, это делается легко вот так getEmptyTiles().size() > 0 2) надо проверить есть ли две рядом стоящие плитки с одинаковым значением по горизонтали и по вертикали. Тут по массиву надо пробежаться и сравнить. все остальное просто.
Илья
Уровень 41, Санкт-Петербург, Россия
26 января, 13:44
так вот что они от нас хотят, проверить возможно ли продолжить игру... а то так написали "с текущей позиции", сижу и думаю почему метод canMove() не принимает в параметрах позицию для проверки
Alukard Vampire hunter в The Hellsing Expert
12 декабря 2020, 21:33
Приватный геттер. Как тебе такое Илон Маск?😆
Андрей
Уровень 36, Москва, Россия
12 октября 2020, 00:10
Я сначала пробовал решать через создание копии массива, запуск методов up, down, left, right, сравнение массивов через хэш до и после, возврат исходного массива gameTiles в вид копии. Так вот, валик такой вариант не принимает. Поэтому лучше даже не пытаться. Надо делать сразу через анализ клеток на 0 и на равенство с соседними.
Mike
Уровень 37, Новосибирск
22 марта, 04:56
Дополню что в 12 задаче я понял что метод .clone() работает не так, как я думал. Он создает новые объекты массивов, но в содержимое клонированных массивов просто сохраняет ссылки на уже имеющиеся в gameTiles тайлы. Поэтому создаем метод tilesDeepClone(Tile[][] tilesToClone) и используем его, вместо стандартной реализации .clone(). Этот метод также вам пригодится в 12ой задаче, так что это не пустая трата времени.
Николай
Уровень 36, Россия
Expert
27 августа 2020, 20:29
Думаю единственный вопрос, который мог возникнуть - это проверка доступности хода. Здесь только два тригера: если есть клетка с нулевым значением или если две соседние клетки имеют одинаковые значение. Т.е. пробегаемся по всем клеткам и проверяем что value клетки равно нулю, проверяем что value текущей клетки равно следующей клетке вправо, проверяем что value текущей клетки равно следующей клетке вниз. Если какое либо из условий совпало, то return true. Только на два последних условия не забывать доп проверку номера элемента, иначе получим исключение ArrayIndexOutOfBoundsException
HiQuality
Уровень 39, Львов, Украина
16 августа 2020, 20:06
Метод, выполнив который, можно было бы определить возможен ли ход в текущей позиции, или нет. 1.Если размер возвращенного массива пустых клеток > 0 сразу возвращаем true. 2.Сделал массив побольше, такой чтобы со всех краев была пустая колонка, заполнил единицами, так как в оригинальном массиве у нас значения могут быть только парными. Поместил внутрь нового массива старый, это должно в итоге выглядеть на подобии этого: 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 Сделано было для того чтобы иметь возможность сравнивать со всеми сторонами, не опасаясь ArrayIndexOutOfBoundsException. Далее берем внутреннюю часть нашего нового массива и сравниваем значение каждого елемента на равность с окружающими его, как только находим - возвращаем true (Если есть вокруг нашего елемента равные ему по значению значит у пользователя есть возможность сделать ход). 3.После цикла возвращаем false. Готов поделится своим решением, так же не против если вы бы поделились своим, так как уверен что всё это можно сделать гораздо проще.
Dimantchick
Уровень 36, Новосибирск, Россия
7 ноября 2020, 10:26
Слишком усложняете. двойной цикл от 0 до FIELD_WIDTH - 1 если текущий элемент равен элементу справа или снизу, сразу ретурн тру.