Coder Social home page Coder Social logo

javarush_games's Introduction

JavaRush Games

Мои игры на JavaRush - портале для изучения языка Java


Идея

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

Во время работы над этими играми я проходил курс и учился применять возможности Java 8, Clean Code и базовых паттернов программирования.


Какие возможности предоставляет JavaRush Games API:

  • Создание поля из клеток размером от 3х3 до 100х100
  • Закрашивание клеток цветами JavaFX
  • Вписывание символов/строк в клетки
  • Отображение одиночных сообщений в центре экрана
  • Выполнение хода с заданным интервалом
  • Управление клавишами UP, DOWN, LEFT, RIGHT, ENTER, SPACE, ESCAPE, PAUSE, ЛКМ, ПКМ

Не поддерживается движком:

  • Java выше 8 версии
  • Работа с файлами
  • Работа с сетью
  • Многопоточность
  • Reflection API и многое другое

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


Как работают игры

Для запуска игр локально нужно подключать библиотеку JavaFX и JavaRush Game Engine. Поддерживается только Java 8. В принципе, это нужно только на этапе разработки. Точкой входа в игру и слушателем событий является главный класс с названием игры, который находится в корне пакета, и его нельзя перемещать.

Игры публикуются на сайте JavaRush. При публикации игра переводится на JS и каждая клеточка становится тегом div в HTML, из-за чего на слабых устройствах могут наблюдаться тормоза с постоянным обновлением большого поля из div-ов.


Список игр

Сапёр (Minesweeper)

Авторами курса представлена как самая простая для написания игра. По этой причине решил превратить её в самую продвинутую.

  • Техническая реализация:

В отличие от предлагаемой базовой версии я отказался от использования текста и ограничился перекрашиванием клеток на поле 100х100. В итоге поверх движка получился собственный движок с "живым" GUI - можно создавать окна, анимированные кнопки, рычажки (которые без явного указания координат понимают, что по ним кликнули). Можно переключать виды, тему оформления, вставлять картинки, двигать, отражать, перекрашивать, и т. п. Можно писать текст из пикселей в любом месте экрана (сделаны шрифты и возможность выравнивать текст по краям, по центру, делать обводку). Обновления экрана оптимизированы с помощью класса Display, где все элементы сначала слоями рисуются на виртуальном кадре, и только потом уже итоговый "плоский" кадр отображается на экране - сделано исключительно, чтобы браузеру было легче.

Для распределения ответственностей классов я создал структуру, приближенную к MVC, где игровая логика отделена от управления и от представления. Позже по той же аналогии сделал рефакторинг остальных игр.

  • Игровой процесс:

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

С этой игры я начал знакомство с движком JavaRush Games.

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

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

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

JavaRush Games Sprite Maker (вместо MoonLander)

Единственная "игра", которая не игра. Это небольшой графический редактор, при помощи которого можно рисовать спрайты к другим играм на JavaRush. Рисунок экспортируется в массив элементов int[][] с кодами цветов, который в последствии можно вставить в любую игру на движке JavaRush. В первую очередь сделал это для того, чтобы рисовать графику к своим же играм, но в последствии доработал интерфейс, чтобы им могли с удобством пользоваться и другие ученики.

Я остановил разработку MoonLander из-за проблем с тормозами после публикации на сайте. Браузер не может быстро обновлять сразу 1000 div-ов на динамично меняющейся картинке. Осталось короткое видео с момента разработки.

Заезд на километровую дистанцию в ДеЛореане по мотивам фильма "Назад в будущее".

Марти и Док оказались на российском шоссе 21 века, и у них осталось всего 2 литра бензина. Нужно собрать 1.21 ГВт энергии (зелёные канистры), разогнать машину до 88 миль в час и прыгнуть во временной портал. Лужи и ямы на дорогах выступают в качестве препятствий и будут затормаживать автомобиль.

Техническая заметка:

Во время переработки этой игры я извлёк из "сапёра" алгоритм отображения текста, убрал лишние функции и оформил его в отдельном пакете, в изоляции от другой логики. Теперь при желании пакет printer можно легко подцепить к другой игре и переиспользовать код.

Mario World Invaders (Space Invaders)

Сюрреалистичный мэшап по мотивам игр на NES: Марио (Super Mario Brothers), танчиков (Battle City) и Space Invaders, в котором враги стреляют фигурками из тетриса :) Танки в стиле космических захватчиков приближаются к миру Марио. Марио ударами по кирпичам выбивает монеты, уничтожающие танки. Иногда из кирпичей со знаком вопроса вылезают бонусы: гриб или звёздочка. При столкновении со вражескими пулями гриб поглотит удар, а звёздочка отразит пулю обратно во врагов. После подбора гриба Марио сможет метнуть огненный шар, а после подбора звёздочки - уничтожить все пули на экране (клавиша SPACE).

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

Реверси (Отелло) (вместо Tic-Tac-Toe)

Классическая игра в реверси против компьютера.

javarush_games's People

Contributors

lunefox avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.