Как сделать игру 2048

Как написать свою 2048 на Java за 15 минут

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

В предыдущих статьях этой серии мы уже писали сапёра и змейку, а теперь попробуем написать десктопный клон игры 2048.

Нам, как обычно, понадобятся:

FAQ по опыту предыдущих статей

В: Вы что! Это большой проект, за 15 минут такое нельзя накодить!

О: Разумеется, чтобы придумать всё это и написать, у меня ушёл целый вечер и даже немножко ночи. Но прочитать статью и, скопировав из неё код, запустить работающую игру (при этом понимая, что происходит) вполне реально и за 15 минут.

В: Зачем тянуть ради такого простого проекта LWJGL? Гвозди микроскопом!

О: Вся работа с отображением вынесена в два с половиной метода в 2 интерфейса. Вы можете реализовать их на чём хотите, мне же удобнее на LWJGL.

В: А почему код выкладываете архивом? На гитхаб нужно!

О: Да, теперь весь проект выложен на GitHub.

В: У меня не получается подключить твою эту LWJGL! Что делать?

О: В прошлые разы у многих возникли с этим вопросом проблемы, поэтому мне показалось уместным посвятить этому немного времени.

Во-первых, выше я дал ссылку на папку с библиотеками на GitHub, которые использую я, чтобы не было путаницы с версиями и вопросов, где найти что-то. Папку из архива требуется поместить в папку проекта и подключить через вашу IDE.

Во-вторых, у многих пользователей InteliJ IDEA возникли проблемы как раз с их подключением. Я нашёл в сети следующий видеогайд:

После того, как я сделал всё в точности по нему, у меня библиотеки подключились корректно и всё заработало.

В: А почему на Java?

О: На чём бы я не написал, можно было бы спросить «Почему именно на X?». Если в комментариях будет реально много желающих увидеть код на каком-то другом языке, я перепишу игру на нём и выложу (только не Brainfuck, пожалуйста).

С чего начать?

Создаём игровое поле

Всё наше поле – матрица чисел и методы, позволяющие их изменять (геттеры и сеттеры). Договоримся только, что пустую ячейку мы будем обозначать числом 0. Выглядеть этот класс будет так:

Создаём в поле первые две ячейки

Совсем очевидно, что нам нужно просто вызвать два раза метод создания одной ячейки.

Заметьте, я не пишу вызов одного метода два раза. Для программистов существует одна максима: «Существует только два числа: один и много». Чаще всего, если что-то нужно сделать 2 раза, то со временем может возникнуть задача сделать это и 3, и 4 и куда больше раз. Например, если вы решите сделать поле не 4х4, а 10х10, то разумно будет создавать не 2, а 10 ячеек.

Теперь постараемся решить вопрос – как в матрице создать ячейку вместо одного из нулей? Я решил пойти по такому пути: мы выбираем случайные координаты, и если там находится пустая ячейка, то создаём новую плитку там. Если там уже есть плитка с числом, то пытаемся создать в следующей клетке (двигаемся вправо и вниз). Обратите внимание, что после хода не может не быть пустых клеток, т.к. ход считается сделанным, когда клетки либо переместились (т.е. освободили какое-то место), либо соединились (т.е. клеток стало меньше, и место снова высвободилось).

Реализуем пользовательский ввод

Отсюда нам нужно запомнить только, какие интерфейсы (графический и клавиатурный модули) нам нужно создать и какие методы в них определить. Если не запомнили – не волнуйтесь, ворнинги вашей IDE особо забыть не дадут.

Интерфейсы для клавиатурного и графического модулей

Так как многим не нравится, что я пишу эти модули на LWJGL, я решил в статье уделить время только интерфейсам этих классов. Каждый может написать их с помощью той GUI-библиотеки, которая ему нравится (или вообще сделать консольный вариант). Я же по старинке реализовал их на LWJGL, код можно посмотреть здесь в папках graphics/lwjglmodule и keyboard/lwjglmodule.

Интерфейсы же, после добавления в них всех упомянутых выше методов, будут выглядеть следующим образом:

Графический модуль

Клавиатурный модуль

Метод логики

Вполне понятно, что если было определено направление сдвига, то нужно произвести в этом направлении сдвиг – в этом вся суть игры. Также, если сдвиг произвести удалось, необходимо создать новую ячейку. Направление для нового сдвига должно снова стать неопределённым – до следующего пользовательского ввода.

Вы могли заметить, что мы часто используем enum Direction для определения направления. Т.к. его используют различные классы, он вынесен в отдельный файл и выглядит так:

Давай уже серьёзно. Как нам сдвинуть это чёртово поле?

Так как этот магический метод с алгоритмом должен будет по сути вернуть два объекта (новую линию и boolean, который будет говорить о наличии изменений в ней), создадим в начале класса Main для такого результата обёртку:

Самое сердце программы. Метод shiftRow()

Если подумать, то вам предстоит решить задачку — как за наименьшее (линейно зависящее от количества поступающих данных) время произвести с рядом чисел следующие последовательные операции: (1) если в ряде есть нули, их необходимо удалить, (2) если любые два соседних числа равны, то вместо них должно остаться одно число, равное сумме двух равных чисел. И (3) — если число получено через пункт (2), оно не может совмещаться с другими числами.

Если представить себе алгоритм таким образом, то придумать линейное решение будет гораздо легче. Вот какой алгоритм должен получиться:

При этом нам необходимо хранить место в возвращаемом массиве, на которое необходимо произвести запись.

Источник

Игра 2048

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Она действительно увлекательна, при этом прекрасно подходит не только для того, чтобы скоротать время в очереди или общественном транспорте, но и сделать это с пользой для себя. 2048 отлично развивает логическое мышление, навыки стратегического планирования и пространственное воображение. Ниже приведено детальное описание игры, её правил, а также даны ответы на вопросы как выиграть и какую стратегию игры выбрать.

История создания

Это не совсем сравнимо, но и как множество других открытий и изобретений в области компьютерного ПО, 2048 была разработана не с целью создания успешного коммерческого проекта. Её автор, молодой итальянский программист и веб-разработчик Габриэле Чирулли, решил с пользой провести выходные и попробовать свои силы в написании программ на JavaScript. За основу он взял идею нескольких других цифровых головоломок (в частности Threesи 1024). К концу выходных, а именно 9 марта 2014 г. Г. Чирулли посредством Твиттера поделился ссылкой на своё творение, которое загрузил на Github, с друзьями. Дальше произошло то, что могло произойти только в информационную эпоху – меньше, чем за неделю в 2048 сыграло больше 4 млн. людей. 19-летний разработчик был поражён успехом игры, но зарабатывать на ней деньги не собирался. В интервью он честно говорил, что идея приложения не была оригинальной, он сделал лишь модификацию. Несмотря на это, 2048 по популярности значительно опережала аналогичные игры, вышедшие раньше, а после того, как появилась возможность скачать версии для Androidи iOS, спустя 2 месяца после первого релиза, о ней, без преувеличений, заговорил весь мир. Не последнюю роль здесь, конечно же, сыграл тот факт, что приложение распространялось бесплатно. Даже такие издания как «Times», «Wall Street Journal» и «Business Insider» вышли с положительными отзывами о данной компьютерной игре.

Любите подобные загадки, игры, головоломки и тесты? Получите неограниченный доступ ко всем интерактивным материалам на сайте, чтобы развиваться эффективнее.

Помимо оригинального варианта 2048 со временем появилось достаточно много дополнений и даже разновидностей игры, ведь она распространяется с открытым исходным кодом. Так, во многих версиях появились списки лидеров, управление было адаптировано для сенсорных экранов. Было выпущено несколько модификаций, где вместо стандартной плитки с числами использовались фигуры из Тетриса, изображения персонажей сериала «Доктор Кто» и т.д. Созданы даже отдельные сайты-конструкторы, где любой желающий может использовать в качестве плитки всё, что угодно. Так, студенты одного вуза создали версию с фотографиями своих преподавателей, где плитке с номиналом «2» соответствовало фото методистки, а «2048» – декана факультета.

Кроме того, код игры 2048 также используется в образовательных целях для обучения программированию.

Описание и правила игры

Игровое поле для 2048 представляет собой квадрат 4×4 (многие российские пользователи сразу углядели в этом общий момент с другой давно популярной у нас игрой «пятнашки»), на котором в стартовой позиции две плитки (иногда – тайлы, от английского «tile» – «плитка») уже открыты. Они могут располагаться как угодно, варианты начальной расстановки – «2» и «2», «2» и «4», «4» и «4» (реже всего). «Костяшки» можно перемещать в одну из четырёх сторон (если этому не мешает расположение), при этом, когда две плитки одинакового номинала сталкиваются друг с другом, то стают одним тайлом, значение которого удваивается. За один ход плитка может складываться в разных местах игрового поля, но лишь один раз увеличивать свой номинал. Другими словами, если подряд расположены «2», «2» и «4», то за ход можно объединить только «2» и «2» в «4», а получившуюся «4» с блоком такого же значения – лишь во время следующего хода.

В игре также предусмотрен подсчёт очков – суммы всех соединённых за игру плиток. Текущие очки за игру и лучший персональный результат отображаются в правом верхнем углу.

В старой версии помимо функции перезапуска игры с начала, была также функция UNDO– отмены сделанных ходов, но на момент написания статьи разработчик её убрал.

Всё вышеописанное может показаться довольно сложным на словах, на деле же достаточно пары минут, чтобы детально разобраться с правилами и принципом игры.

2 способа как победить в 2048

2048 – простая цифровая головоломка. Но это лишь на первый взгляд. Сама суть действительно такова – что может быть проще, чем складывать плитки меньшего достояния с целью получить в конце нужную плитку большего номинала? В этом был уверен и сам Г. Чирулли, придумавший концепцию. Правда, 11 марта (спустя 2 дня после представления игры как готового продукта) он в социальной сети сообщил, что потратил 16 часов на игру, а добиться нужного результата так ни разу и не смог.

В этом же убедились и многие другие, кто хотя бы пару раз пробовал сыграть. Стало очевидно, что без определённой тактики выиграть невозможно. Некоторое время спустя, которое понадобилось фанатам и другим заинтересованным на то, чтобы провести нужные расчёты и проверить их на практике, появилось пару выигрышных стратегий. С существенной поправкой на то, что 100% действующей методики, как набора готовых решений, следуя которым можно набрать заветные «2048», нет. Они задают лишь верный алгоритм, но многое остаётся зависимым от совершаемых игроком действий, а порой и игровой раскладки.

Стратегия «змейка»

Стратегия «змейка» получила своё название на русскоязычных форумах от принципа одноименной старой игры. Её суть в расположении подряд блоков с ниспадающим номиналом (512-256-128-64). Разберёмся более подробно.

Первое что следует сделать – определиться с рабочей областью, тем участком игрового поля, где вы собственно и будете собирать «2048». Им может быть любой из углов. На рисунке выше показан вариант с расположением плитки наибольшего значения в левом нижнем углу. Его и возьмём за отправную точку. Суть всего метода в том, чтобы исключить одно из направлений движения. В нашем случае это «вверх». В этом нет никакого скрытого сакрального смысла, просто, если вы поднимете все блоки вверх (особенно на поздних этапах игры, когда большая часть поля уже занята тайлами), на месте в углу с высокой долей вероятности может возникнуть «2» или «4». Это сломает стратегию, ведь «костяшку» такого значения очень тяжело будет собрать, особенно если она окружена плитками достояния 64 и больше. В противном же случае, собирая именно в угловой клетке наибольшее число, вероятность победы равняется 80%. Остальные блоки нужно стараться собирать в этой же строке по принципу уменьшения их номинала (как показано на рисунке). Это позволит вам, используя большую часть игрового поля, собирать нужные плитки и поочерёдно их соединять, что очень удобно.

Для визуального представления о том, как реализовать эту стратегию – смотрите видео. Помните, с первого раза не получается практически ни у кого.

Стратегия приоритетного столбца

Простой способ, описанный на Хабрахабре. Суть примерно та же, что и в «змейке», но реализация другая. Условно делим игровое поле на 4 столбца (на картинке показано слева направо, но можно так, как удобно вам), нумеруем их – крайний левый – первый, крайний правый – четвертый. При сложении плиток следуем принципу: блоки с наибольшим значением должны быть в первом столбце, во втором числа меньше, чем в первом, в третьем меньше, чем во втором и т.д. Наибольшими тайлами мы заполняем весь первый столбец. Как и в случае с предыдущей методикой, двигать его нельзя (что касается нашего примера, это движение «вправо»). На основе этого строится стратегия игры – выбирать стоит тот ход, который увеличивает номинал первых столбцов. Существенный нюанс – следует так планировать игру, чтоб новое появившееся число не стало четвертым в столбце, без возможности его соединить, и не привело к ситуации, когда другого выхода кроме движения «вправо» не останется.

Как это выглядит на практике:

Рекорды

Плитка со значением «2048» означает, что вы победили, но игру после этого можно продолжить. Максимально возможный номинал блока – 131 072 (или 2 17 ). Кроме того, много игроков, следуя зову заложенной в человеческой природе жажде к достижениям, соревнуются в наборе наибольшего количества очков. Максимальный результат, который можно набрать – 3 932 100, но это идеальный случай, а так – каждая новая «4» уменьшает эту сумму на 4. В Интернете встречается много видеозаписей и снимков экрана с запечатлёнными на них рекордными счетами. Но сказать, не использовался ли для их достижения скрипт для автоматического прохождения игры, сложно.

Отзывы и комментарии

Оставляйте комментарии с оценкой работоспособности стратегий прохождения 2048, а также делитесь своими успехами и результатами. Желаем вам удачи!

Источник

2048 в консоли

П.с.: я вас предупреждал. 😉
П.п.с.: сама игра готова % на 80, однако вся игровая часть готова на все 99,(9)%, наверное.
П.п.п.с.: о всех багах писать в комментах.
П.п.п.п.с.: а тех, кто шарит в С++ попрошу помочь в 1 деле: как вывести цветной текст из чара (в частности и массива char s[4][4][4])?
П.п.п.п.п.с.: кмдм*2 внутри.

Спасибо за внимание!

Дубликаты не найдены

И, кстати, если хочешь, могу потом скинуть полностью готовую версию с сейвами, таблицей лидеров и, если получится, с цветным текстом.

П.с.: и спасибо за тест.)

П.с.: прошу вставить нормальную ссыль, кто может, для ЛЛ.

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Что ты такое

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Решение представляет собой игровой контроллер, который использует ввод, способный обеспечивать абсолютную точность как у мыши или трекбола, но также может измерять, насколько далеко от центра экрана находится курсор, и может вернуться в центр при отпускании, как это происходит при использовании джойстика.

«Представленный игровой контроллер имеет сенсорный трекбол, позволяющий пользоваться преимуществами управления как мыши, так и джойстика, предоставляя пользователю возможность играть в любую игру, не беспокоясь о совместимости своих игровых контроллеров», — указано в патенте.

В документации также сообщается о процессоре, размещённом в корпусе и сконфигурированном для создания имитированного ввода джойстиком, а также о проводящем сердечнике для обеспечения ёмкостного сенсорного интерфейса.

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Печаль консольщиков

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Технологии

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Игpы — caмaя дoxoднaя oтpacль индуcтpии paзвлeчeний

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Kинoтeaтpы пo вceму миpу зapaбoтaли 42.5 миллиapдa дoллapoв зa 2019 гoд. Mузыки пpoдaли нa 20 миллиapдoв.

A игpы пpинecли cвoим paзpaбoтчикaм 145 миллиapдoв! 45% этoй cуммы — мoбильныe игpы (и oни oдни пpинocят пpимepнo cтoлькo жe, cкoлькo кинo и музыкa вмecтe взятыe). 32% cуммы пpишлocь нa кoнcoли и лишь 23% — нa cтapыe-дoбpыe ПK-игpы.

Будущee индуcтpии paзвлeчeний — oнo тaкoe, игpoвoe и в тeлeфoнe, cудя пo вceму.

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Общий враг

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Linux для тебя

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Дисклеймер: Я никого не призываю переходить на другую операционную систему(ОС), а просто хочу показать, что существуют альтернативные ОС. Выбор всегда за вами.

Начну, пожалуй с истории. Все началось с UNIX систем, которые в конце 60-x годов были разработаны сотрудники компании Bell Labs. Они мало чем были похожи на современные ОС, просто терминал и компилятор под ассемблер. Компания AT&T, которой принадлежала Bell Labs понимала коммерческую ценность UNIX, но из-за запрета наложенного правительством США, компания могла заниматься только телефонными сетями и смежным оборудованием. Для того, чтобы обойти запрет, компания передала исходный код ОС некоторым высшим учебным заведениям. Одним из первых исходный код получил университет Беркли.

В 1991 году Линус Торвальдс студент Хельсинского университета, начал написание ядра Linux. Когда он выложил исходный код, другие разработчики заинтересовались и стали помогать в разработке ядра.

Так почему более зрелая и мощная система BSD не сыскала популярности в open source сообществе в отличии от Linux? Все дело в лицензии под которой распространяется ОС. Лицензия BSD позволяет использовать ее код, а затем сделать его закрытым, так в свое время поступила Apple. С Linux так сделать нельзя, лицензия обязывает после изменения кода выложить его в открытый доступ, поэтому сообществу выгодно писать программное обеспечение (ПО) под лицензией Linux.

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

С того момента было создано огромное количество дистрибутивов на основе ядра Linux. Коммерческие организации также участвуют в разработке ядра и поддерживают open source сообщество.

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Теперь хочу рассказать как я познакомился с миром Linux. До университета я был обычным пользователем Windows и только слышал о существовании Linux. Когда мне пришлось по надобности столкнуться с этой ОС, а я ничего особо не знал, то я поставил самый популярный дистрибутив Ubuntu и пользовался им около недели. Он мне не понравился и я стал пробовать другие дистрибутивы. Дольше всего я использовал Fedora от Red Hat и Elementary OS. Сейчас использую Manjaro с рабочим окружением KDE, вообще рабочие окружения это отдельная тема. Существует огромное количество дистрибутивов и такое многообразие может отпугнуть неподготовленного пользователя.

Fedora с окружением Gnome

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

Manjaro с окружением KDE Plasma 5

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

В основном, когда человек задумывается о переходе на новую ОС, его останавливает мысль об отсутствии привычных программ. Я провел небольшой опрос среди своих друзей и знакомых, чем они пользуются ежедневно для решения своих задач.

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

В опросе участвовало 25 человек. Для большинства людей необходим браузер, офисный пакет, мессенджер и графический редактор. Большая часть ПО нативно есть под Linux, а остальная имеет достойные альтернативы. Например, пакет MS Office я заменил на Google Docs и Open Office, они прекрасно справляются со своими задачами и имеют обратную совместимость с MS Office. Для работы с фото Krita и Gimp, для видео DaVinci Resolve и Kdenlive, LMMS и Audacity использую для работы с аудио. Дефицита программ нет и они бесплатные.

Установил нескольким друзьям и девушке, пока всем всё нравится

Как сделать игру 2048. Смотреть фото Как сделать игру 2048. Смотреть картинку Как сделать игру 2048. Картинка про Как сделать игру 2048. Фото Как сделать игру 2048

В СНГ пользователи персональных ПК не пользуются лицензионным софтом. Все привыкли пиратить все, что можно. За свою жизнь не встречал тех, кто имеет подписку Adobe или MS Office, кроме бизнес сегмента. В СНГ пиратство не наказуемо для пользователя ПК. Но кроме моральных терзаний, есть еще один момент, задумывались ли вы, какая выгода человеку, который взламывает ПО и отдает его в массы, это хорошая пища для размышления.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *