Перейти к содержанию

Порядок в проекте - собственный взгляд


Рекомендуемые сообщения

в сети

В этой статье поделюсь своими наработками по ведению проектов в C3.

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

Статья будет иногда пополняться по мере вспоминания новых приёмов наведения порядка. Ну и в комментариях наверняка будет кому что добавить.

Спойлер

Всегда создаю новый проект с нуля.

Потом постепенно копирую в него отработанные приёмы из предыдущих проектов, но по возможности проверяю, не изменились ли используемые функции?

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

К примеру, поведение Pin, скопированное из старого проекта имеет несколько иные настройки, чем у созданного заново.

Обязательно заполняю параметры проекта (в настройках редактора можно задать некоторые из них по умолчанию).

image.png

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

image.png

image.png

Всегда сразу отключаю Worker в продвинутых настройках проекта. Эта зараза умеет запускать события "с пятого на десятое", в результате чего некоторые события выполняются до того, как выполнятся предыдущие. Возможно я просто не понимаю его принципа, но мне без него лучше 🙂

image.png

 

 

Спойлер

Сортирую всех материалы, используемые в игре по соответствующим папкам.

Картинки - к картинкам, звуки - к звукам и т.д.

image.png

В папке Документы лежат исходники, присланные заказчиком а также ключи для создания APK и прочие документальные вещи.

Их сортирую по дате получения.

image.png

Картинки сортирую по назначению. Файл Всё вместе.svg - исходник, в котором рисую векторные интерфейсные элементы для игры. 

image.png

В папке ! Интерфейс храню всякие кнопки-иконки и прочие маски.

image.png

Звуки и музыку обычно не сортирую - их редко бывает больше десятка файлов.

В папку Резервные копии по вечерам копирую исходник игры (файл c3p), и файл Всё вместе.svg доработанные за день. Таким образом, всегда есть вчерашняя резервная копия, на случай, если за день что-то сильно накосячил (несколько раз спасало почти готовые проекты).

Сортировка в этой папке - по датам.

image.png

В папку Тестовые версии скидываю то, что хочу закинуть на сайт. Также сортирую по датам.

image.png

Текущие задачи веду в notion.so - там можно сделать удобную канбан-доску и оперативно перетаскивать выполненные задания между колонками.

image.png

Шрифты для игр обычно беру в Google Fonts, чтобы не иметь проблем с правообладателями. Выбор не самый широкий, но есть удобная сортировка по типам.

image.png

Звуки для игр беру вот с этого ресурса: https://wav-library.net/sounds/

image.png

Музыку как правило беру у Кевина МакЛауда (с указанием ссылки на автора - по возможности).

image.png

 

Спойлер

Экраны всегда называю с заглавной буквы.
Листы событий - всегда с маленькой.

Если лист событий относится к определённому экрану - у них одинаковое имя (разница только в регистре первой буквы).

image.png

В отдельные листы событий выношу:

  • массивы (array),
  • обработку кнопок (menu),
  • обработку непрерывными действиями: бег персонажа, всякие ползунки, прокрутки и т.п. вещи (control),
  • тестовые кнопки и события (test),
  • обработку функций Вконтакте, Яндекса, Google (vk, yandex, google),
  • мультиплеерные функции (photon),
  • всё, что условно можно назвать анимациями, в том числе и всякие общие функции - выношу в общую папку animations.

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

image.png

 

 

Спойлер

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

К переменным применяю принцип camalCase: начинаются они со строчной буквы, а каждое следующее слово в ней - с прописной:

image.png

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

image.png

Никогда не создаю булевых переменных (boolean - триггеров true-false). Не нравятся они мне. 🙂

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

Чтобы не скакать потом по всему коду заменяя булеву переменную, я заранее делаю её строковой (string) и задаю ей одно из двух значений: on или off,

Почему не true и false? Так короче, легче менять одно на другое (on на off и обратно) и понятнее по смыслу (включено-выключено).

image.png

Если уверен, что какая-то переменная является константой (не должна меняться в ходе игры) - задаю ей состояние константы.

image.png

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

Большая часть переменных, как и большая часть событий у меня оказывается в листе animations.

Список переменных в листе сортирую по алфавиту (латинскому).

image.png

 

Спойлер

Для всех объектов создаю 3 разных подкаталога:

image.png

  • В Interface у меня хранятся кнопки, окна, фоны и всё, что не участвует непосредственно в игровом процессе.
  • В Objects лежат объекты, составляющие основу игровых механик: персонажи, оружие, всё, что летает по игровому полю, а также массивы.
  • В Object Types кидаю поведения и плагины (Touch, Keyboard, AJAX и прочие вещи, не выносящимися на игровое поле).

Количество однообразных объектов в проекте (кнопок, текстов, фонов и т.д.) стараюсь ограничивать насколько это возможно, но не более того.

Объекты называю с заглавной буквы.

image.png

Для различения однообразных объектов (кнопок, надписей и др.) добавляю им собственные переменные class, classSub, num, id.

image.png

Затем обращаюсь к этим объектам по их переменным.

image.png

С помощью собственной переменной state включаю-выключаю отдельные кнопки, когда это нужно.

Для текстов использую несколько типовых имён:

  • TextButton - текстовая кнопка,
  • TextDescription - описательный не изменяющийся текст (подзаголовки, подсказки, описания),
  • TextInfo - изменяющийся текст (таймеры, счётчики, очки, патроны и т.п.),
  • TextTest - тестовый текст - помогает отслеживать параметры игры при ошибках. Обычно он скрыт и включается по какой-то кнопке,
  • TextTitle - заголовки игры и окон.

Для графических объектов использую типовые имена:

  • Button - кнопки,
  • Mask - маски,
  • Array - массивы,
  • Background - фоны и т.д.

Если нужно разнообразить - добавляю в конец имени уточняющие слова. На примере массивов:

image.png

Так их проще вспомнить, если нужно подставить имя объекта в какую-то переменную.

 

Спойлер

Группы

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

image.png

Группы называю по-русски, чтобы быстро понять, что они содержат. С английским дружу постольку-поскольку 🙂 

Функции

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

image.png

Название функции дублирую в названии её группы - чтобы проще было искать по закрытым группам.

Комментарии

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

image.png

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

image.png

 

Спойлер

Слои старюсь называть типовыми именами c маленькой буквы. Типовой набор для игрового экрана.

image.png

  • transition - непрозрачный слой для плавного затемнения при переходах между экранами. Для этого использую специальную функцию.
  • windows - окна, которые нужно показать поверх остального интерфейса,
  • windowsBackground - фон для окон,
  • gui - кнопки, тексты и т.д.
  • objects - игровые объекты: персонажи, оружие, предметы. спецэффекты,
  • buttons - необязательный слой, который был нужен именно в том проекте, из которого сделан скриншот.
  • background - всевозможные фоны на заднем плане.

На некоторых экранах могут быть не нужны слои типа objects, но как правило, везде есть transition, gui и background.

 

Спойлер

В играх стараюсь использовать принцип Final State Machine. То есть, в каждый момент времени игра находится только в одном каком-то состоянии.

Для этого использую переменные mode (текущий режим) и modePrevious (предыдущий режим).

К примеру, на стартовом экране у нас игра запускается в режиме "start".

image.png

В этом режиме работают все кнопки интерфейса на этом экране (мы об этом позаботились).

image.png

Затем игрок нажал на кнопку Поделиться и игра переходит в новый режим:

  • в переменной modePrevious запоминаем то, что было в mode,
  • переменной mode задаём состояние "share".
  • появляется окно Поделиться
  • кнопка Поделиться уже не будет срабатывать, поскольку это не нужно и будет только мешать игроку.

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

По поводу переменной modePrevious - она нужна в моменты, когда следующее действие зависит не от текущего режима, а от предыдущего.

Например, у нас есть окно меню, которое работает и на стартовом экране и на игровом.

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

image.png

А по выходе из меню возвращаем значение сохранённого режима переменной текущего режима.

image.png

 

Спойлер

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

Пример:

image.png

Здесь пробел есть как между операциями (+, -), так и между параметрами массивов ArrayDate.At,(0, 0).

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

 

Спойлер

Если нужно записать в массив набор данных, к примеру из XML и неизвестно, какое именно там будет количество строк, стараюсь делать это "гибким" способом.

Изначально задаю нулевую ширину массива (высота обычно известна). Это одновременно обнуляет массив, если он уже был заполнен.

image.png

Затем в цикле вставляю новые элементы в массив (одновременно задаётся 0-й столбец) и затем задаю им остальные сталбцы.

image.png

Таким образом у нас не будет ситуации, когда по умолчанию массив имеет ширину 100 строк, а из них используется только 5.

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

К примеру, получаем количество строк массива из XML.

image.png

И в дальнейшем уже используем уже полученную ширину массива для цикла перебора.

image.png

Можно конечно использовать и For Each. Тут дело вкуса. Мне он показался менее вкусным, поскольку не так очевидно отслеживается текущий шаг цикла, как если использовать конкретный счётчик "i". 

 

Спойлер

В каждой игре есть внутренняя часть и есть внешняя.

Внутренняя - это обработка событий, работа с переменными, изменение массивов и т.д.

Внешняя - передвижение персонажей по экрану, нажатие кнопок, раскрывание окон и т.п.

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

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

Если по 60 раз в секунду опрашивать каждый квадратик на пересечение со спрайтом героя - это может затормозить игру. А если герой скачет достаточно быстро - то игра может не успеть просчитать его столкновения и не учтёт какое-нибудь важное событие.

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

А игроку можно будет показывать уже только результат этой проверки.

 

Спойлер

Не так давно открыл для себя "резиновый" объект 9-patch.

С его помощью делаю в игре окна и резиновые кнопки.

image.png

image.png

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

Если бы ещё в 9-patch можно было задавать разные анимации и спрайты - цены бы ему не было.

 

 

image.png

image.png

Изменено пользователем ru1000
Спойлер

В Google Play:

Tap Tap Speedrun - Скоростной платформер с прохождением на время и мировой таблицей рекордов. Сделан на заказ, поэтому аккаунт чужой. На английском.

FireSnake - Гиперказуалка про змейку, которой нужно доползти до домика.

bARTley-Break with Freeda - Пятнашки с таблицей умножения (на английском).

Одень Фриду HD - Одевалка для девочек. Игра на Unity - выступал в роли руководителя команды.

В ВК:

Еваноид - арканоид с персонажем.

ПятНЯшки с Евой - пятнашки с таблицей умножения.

Кошароматика - продвинутая версия Шароматики - с персонажами и плюшками. Сделано на заказ.

Tap Tap Speedrun - Platformer - Тот же скоростной платформер, но под ВК и с поддержкой русского языка.

FireSnake - the way home - Змейка, адаптированная под ВК.

Делитель-2 - Помесь шариков с обучалкой правилам деления целых чисел. Сделана на заказ.

Шароматика - Гибрид "три в ряд" и обучалки сложению и умножению. Сделана на заказ. 

На прочих сайтах:

Цветовод - визуализатор таблицы умножения. Сделано на заказ.

МатТаб - математическое судоку. Сделано на заказ.

Еваноид - арканоид с персонажем.

Умножай-ка - тренажёр таблицы умножения. Сделано на заказ.

TEZ World Runner - Раннер по разным странам. Сделано на заказ для TEZ Tour. Сделано на заказ.

Travel Antivirus - Леталка-стрелялка по вирусам. Сделано на заказ для TEZ Tour. Сделано на заказ.

Крутой прикид - Мультиплеерная настолка, обучающая основам инвестиций. Сделано на заказ.

Космограф - Узконаправленная алгебраическая обучалка. Показывает, как работают квадратные уравнения. Сделано на заказ.

Крепёж - Игра Найди пару, посвящённая крепёжным элементам. Сделано на заказ для Трайв Комплект.

Outfit - Игра-одевалка, посвящённая стилям в одежде и интерьерах начала 20 века. Сделано на заказ.

Геометр 2 - Тренажёр-тест по геометрии. Сделано на заказ.

Побег 2.0 - Тренажёр по химии. Сделано на заказ.

Лица Истории - Тренажёр по истории. Сделано на заказ.

КСОА - Симулятор защитной системы акватории при нападении диверсантов. Сделано на заказ.

Кот учёный - Арифметически тренажёр. Сделано на заказ.

Шарики - Рекламный кликер, дающий скидку на покупку. Сделано на заказ.

Химический конструктор - Пазл с молекулами химических веществ. Сделано на заказ.

Робоскейт Фриды - Клавиатурный тренажёр с сюжетом.

Магия Морзе - Тренажёр азбуки Морзе в стиле абстракционизма.

Магия Морзе 2 - Самоучитель азбуки Морзе в стиле фэнтези.

Firebutton - Клавиатурный тренажёр со стрельбой и сюжетом.

Пятнашки для программистов - Пятнашки с двоичными числами в стиле Fallout.

Пятнашки - Римские цифры - Пятнашки с римскими цифрами (как ни странно).

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

И ещё десятки других (в основном - не законченных).

 

 

Ссылка на комментарий
Поделиться на другие сайты

Чтобы в открытом проекте не запутаться во вкладках "Logo" "logo", я у листов событий приписываю "E_logo" (Eventsheet).

В названиях объектов использую сокращения: массив инвентаря - Array inventory - Arr_inv; словарь с английской локализацией - Dictionary language english - Dict_lang_en; TiledBackground - TB...

В остальном ± также (некоторое надо будет использовать у себя :good: )

Изменено пользователем ReviveR200

Сижу с телефона, исходник не посмотрю / не отправлю.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, ru1000 сказал:

Чтобы не скакать потом по всему коду заменяя булеву переменную, я заранее делаю её строковой (string) и задаю ей одно из двух значений: on или off

после этих слов где-то умер один программист

Ссылка на комментарий
Поделиться на другие сайты

в сети
10 минут назад, Aventiy сказал:

после этих слов где-то умер один программист

У программистов - буквы. Им проще поменять значение переменной. А тут - галочки... Даже не представляю, каково это - по всему проекту менять boolean на string.

Некоторые любят цифровые триггеры (0 - false, 1 - true), но мне они кажутся неочевидными. Иногда они удобнее, но не повсеместно.

34 минуты назад, ReviveR200 сказал:

Чтобы в открытом проекте не запутаться во вкладках "Logo" "logo", я у листов событий приписываю "E_logo" (Eventsheet).

В названиях объектов использую сокращения: массив инвентаря - Array inventory - Arr_inv; словарь с английской локализацией - Dictionary language english - Dict_lang_en; TiledBackground - TB...

Многие моменты - действительно - дело вкуса. Можно и так и так.

Правда, иногда приходится переделывать чужие исходники и сижу, гадаю - что это автор насокращал 🙂

Спойлер

В Google Play:

Tap Tap Speedrun - Скоростной платформер с прохождением на время и мировой таблицей рекордов. Сделан на заказ, поэтому аккаунт чужой. На английском.

FireSnake - Гиперказуалка про змейку, которой нужно доползти до домика.

bARTley-Break with Freeda - Пятнашки с таблицей умножения (на английском).

Одень Фриду HD - Одевалка для девочек. Игра на Unity - выступал в роли руководителя команды.

В ВК:

Еваноид - арканоид с персонажем.

ПятНЯшки с Евой - пятнашки с таблицей умножения.

Кошароматика - продвинутая версия Шароматики - с персонажами и плюшками. Сделано на заказ.

Tap Tap Speedrun - Platformer - Тот же скоростной платформер, но под ВК и с поддержкой русского языка.

FireSnake - the way home - Змейка, адаптированная под ВК.

Делитель-2 - Помесь шариков с обучалкой правилам деления целых чисел. Сделана на заказ.

Шароматика - Гибрид "три в ряд" и обучалки сложению и умножению. Сделана на заказ. 

На прочих сайтах:

Цветовод - визуализатор таблицы умножения. Сделано на заказ.

МатТаб - математическое судоку. Сделано на заказ.

Еваноид - арканоид с персонажем.

Умножай-ка - тренажёр таблицы умножения. Сделано на заказ.

TEZ World Runner - Раннер по разным странам. Сделано на заказ для TEZ Tour. Сделано на заказ.

Travel Antivirus - Леталка-стрелялка по вирусам. Сделано на заказ для TEZ Tour. Сделано на заказ.

Крутой прикид - Мультиплеерная настолка, обучающая основам инвестиций. Сделано на заказ.

Космограф - Узконаправленная алгебраическая обучалка. Показывает, как работают квадратные уравнения. Сделано на заказ.

Крепёж - Игра Найди пару, посвящённая крепёжным элементам. Сделано на заказ для Трайв Комплект.

Outfit - Игра-одевалка, посвящённая стилям в одежде и интерьерах начала 20 века. Сделано на заказ.

Геометр 2 - Тренажёр-тест по геометрии. Сделано на заказ.

Побег 2.0 - Тренажёр по химии. Сделано на заказ.

Лица Истории - Тренажёр по истории. Сделано на заказ.

КСОА - Симулятор защитной системы акватории при нападении диверсантов. Сделано на заказ.

Кот учёный - Арифметически тренажёр. Сделано на заказ.

Шарики - Рекламный кликер, дающий скидку на покупку. Сделано на заказ.

Химический конструктор - Пазл с молекулами химических веществ. Сделано на заказ.

Робоскейт Фриды - Клавиатурный тренажёр с сюжетом.

Магия Морзе - Тренажёр азбуки Морзе в стиле абстракционизма.

Магия Морзе 2 - Самоучитель азбуки Морзе в стиле фэнтези.

Firebutton - Клавиатурный тренажёр со стрельбой и сюжетом.

Пятнашки для программистов - Пятнашки с двоичными числами в стиле Fallout.

Пятнашки - Римские цифры - Пятнашки с римскими цифрами (как ни странно).

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

И ещё десятки других (в основном - не законченных).

 

 

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, ru1000 сказал:

Им проще поменять значение переменной

ахахха ну да, конечно )

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

они также при замене булеан меняют код

Изменено пользователем Aventiy
Ссылка на комментарий
Поделиться на другие сайты

М, да... Как сложно жить, а программистом и подавно.

Коменты - вот всё наше! 

Знание инглишь порой вредит: был такой случай - художник в 3д сцене назвал предметы правильно на инглишь и вот не задача клавиатуру назвал keyboard, а я очень долго искал ошибку в коде 😂 .

Ссылка на комментарий
Поделиться на другие сайты

в сети
1 час назад, Aventiy сказал:

они также при замене булеан меняют код

Ну, ок, беру свои слова обратно. 🙂 Но булеаном пользоваться всё же отказываюсь 🙂

5 минут назад, Smebor сказал:

Знание инглишь порой вредит: был такой случай - художник в 3д сцене назвал предметы правильно на инглишь и вот не задача клавиатуру назвал keyboard, а я очень долго искал ошибку в коде 😂 .

Ненавязчиво подставил :))

Буквально вчера прочитал новость о том, что геологи нашли целёхонькое яйцо динозавра, вызвали из Москвы специалистов, но те опоздали буквально на несколько часов. Рабочие-таджики пожарили из яйца яичницу и даже скорлупы не осталось 🙂 Экспресс-опрос рабочих показал что: "Было не очень вкусно" 🙂
А так могли бы в этом году уже велоцераптора клонировать...

Спойлер

В Google Play:

Tap Tap Speedrun - Скоростной платформер с прохождением на время и мировой таблицей рекордов. Сделан на заказ, поэтому аккаунт чужой. На английском.

FireSnake - Гиперказуалка про змейку, которой нужно доползти до домика.

bARTley-Break with Freeda - Пятнашки с таблицей умножения (на английском).

Одень Фриду HD - Одевалка для девочек. Игра на Unity - выступал в роли руководителя команды.

В ВК:

Еваноид - арканоид с персонажем.

ПятНЯшки с Евой - пятнашки с таблицей умножения.

Кошароматика - продвинутая версия Шароматики - с персонажами и плюшками. Сделано на заказ.

Tap Tap Speedrun - Platformer - Тот же скоростной платформер, но под ВК и с поддержкой русского языка.

FireSnake - the way home - Змейка, адаптированная под ВК.

Делитель-2 - Помесь шариков с обучалкой правилам деления целых чисел. Сделана на заказ.

Шароматика - Гибрид "три в ряд" и обучалки сложению и умножению. Сделана на заказ. 

На прочих сайтах:

Цветовод - визуализатор таблицы умножения. Сделано на заказ.

МатТаб - математическое судоку. Сделано на заказ.

Еваноид - арканоид с персонажем.

Умножай-ка - тренажёр таблицы умножения. Сделано на заказ.

TEZ World Runner - Раннер по разным странам. Сделано на заказ для TEZ Tour. Сделано на заказ.

Travel Antivirus - Леталка-стрелялка по вирусам. Сделано на заказ для TEZ Tour. Сделано на заказ.

Крутой прикид - Мультиплеерная настолка, обучающая основам инвестиций. Сделано на заказ.

Космограф - Узконаправленная алгебраическая обучалка. Показывает, как работают квадратные уравнения. Сделано на заказ.

Крепёж - Игра Найди пару, посвящённая крепёжным элементам. Сделано на заказ для Трайв Комплект.

Outfit - Игра-одевалка, посвящённая стилям в одежде и интерьерах начала 20 века. Сделано на заказ.

Геометр 2 - Тренажёр-тест по геометрии. Сделано на заказ.

Побег 2.0 - Тренажёр по химии. Сделано на заказ.

Лица Истории - Тренажёр по истории. Сделано на заказ.

КСОА - Симулятор защитной системы акватории при нападении диверсантов. Сделано на заказ.

Кот учёный - Арифметически тренажёр. Сделано на заказ.

Шарики - Рекламный кликер, дающий скидку на покупку. Сделано на заказ.

Химический конструктор - Пазл с молекулами химических веществ. Сделано на заказ.

Робоскейт Фриды - Клавиатурный тренажёр с сюжетом.

Магия Морзе - Тренажёр азбуки Морзе в стиле абстракционизма.

Магия Морзе 2 - Самоучитель азбуки Морзе в стиле фэнтези.

Firebutton - Клавиатурный тренажёр со стрельбой и сюжетом.

Пятнашки для программистов - Пятнашки с двоичными числами в стиле Fallout.

Пятнашки - Римские цифры - Пятнашки с римскими цифрами (как ни странно).

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

И ещё десятки других (в основном - не законченных).

 

 

Ссылка на комментарий
Поделиться на другие сайты

  • ru1000 изменил название на Порядок в проекте - собственный взгляд

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...