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

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


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

В этой статье поделюсь своими наработками по ведению проектов в 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.

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

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

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

 

 

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

  • 3 недели спустя...

Могу дополнить своими практиками:

1. В каждом проекте создаю отдельный лист событий "eVAR" (для глобальных переменных), "eFUNC" (для некоторых функций, вроде тех, которые, например, считают по формулам урон игрока и возвращают значение) и "eGLOBAL" (для тех событий, которые работают на каждом уровне, например, эффект затемнение экрана при переходах между Layout'ами).

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

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

Например, у меня есть группа "TUTORIAL", в которой находятся всё, что связано с обучением игрока. Внутри этой группы есть (в том числе) функции, связанные с механиками обучения, которые могут быть вызваны из других групп. Но если я отключу группу "TUTORIAL", то это не вызовет багов в других частях игры и никакие другие механики не пострадают.

3. Сортировка по папкам. В каждом проекте есть папки: SYS (для системных плагинов), DATA (для словарей и массивов), BG (для фоновых объектов), FX (для частиц и спецэффектов) и MAIN (для всех остального). Имена большинства объектов начинаются с префиксов. Например, "HUD_PlayerHealth", "FX_PlayerBlood", "BG_SkyParalax" и т.д.

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

Дополню и я коротко своими мыслями по тому, как организовываю у себя.

Попробовал два варианта формирования проекта с пустого листа в с3.

Общее: в проекте имеется главный лист событий, к которому присоединяются остальные.
К уровням подключается главный лист и уникальные. Например, туториал или правила бонусного уровня

Первый вариант: для ключевых объектов создаются листы событий. Лучники, рыцари, ИИ, режимы. В которых прописывается их алгоритм. Отдельного упоминания стоит лист с функциями. Кроме тех функций, которые уникальны для тех или иных 

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

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

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

ecs_game_architecture.png

Кроме этого, в определенный момент перевел листы в группы для главного листа

плюсы: легко отключать объекты от игры, интуитивность функции паузы (перечень объектов, отключаемых для расчета), хорошая структура проекта, легкость перемещения на отдельные листы при необходимости

минусы: при работе с одним листом сложно отслеживать нагрузку (лечится вынесением крупных групп в отдельные листы), затруднен переход от работы с одними объектами к другим


 

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

Всё. зависит от проекта . В небольшой игрульке до 50-100 строк кода - 1 лист событий и 1-2 Layout (меню, игра), а вот объекты требуется всегда распределять по группам. В более крупных проектах делаю как описал ViGaCi https://prodevs.ru/forum/profile/139-vigaci/

Процесс же создания у меня всегда слоями - от простого к сложному и иногда возврат в начало, тут то и компоновка по группам очень помогает.

2022-01-27_13-38-06.jpg

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

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

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

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

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

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

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

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

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

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

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