Онлайн ресурсы:
Обновления. AsmX, как и все языки постоянно развивается. Сам язык программирования AsmX можно посмотреть тут.
Расширение для подсветки AsmX кода тут (VS Code).
Сама игра тут находится. (под лицензией) (Недавно открылась AsmX Games Studios).
Введение
Разработка игр на языке AsmX - увлекательный процесс, который позволяет создавать неповторимые миры и персонажей. Одной из таких игр является "Рулетка Фруктов". В данной статье мы рассмотрим, как создавалась данная игра, начиная от идеи и концепции игры, до разработки графики и программной части.
Часть 1: Идея и концепция игры
Первый этап создания игры - это разработка идеи и концепции. "Рулетка Фруктов" - это игра-автомат, в которой игроку нужно выиграть, получив четыре одинаковых фрукта в автомате. Основная идея игры заключается в простоте и увлекательности.
Часть 2: Разработка графики
Второй этап - это разработка графической части игры. Для игры на языке AsmX используется библиотека gpu для импортирования графических элементов. В игре "Рулетка Фруктов" использован обычный UI с красочными фруктами.
Часть 3: Программирование игры
Третий этап - это программирование игры на языке AsmX. Для отображения фруктов в ячейках автомата использовалось ветвление. Для отрисовки автомата использовались функции, которые вызывались в соответствии с рандомным числом.
@import gpu; # в начале файла нужно прописать это - импорт библиотеки gpu
Для правильного отображения фруктов, необходимо создать ветвления в языке AsmX. Это позволит выводить фрукты в соответствующие ячейки игрового автомата. Например, если нужно вывести виноград, то для этого необходимо использовать следующий код:
@label grapes: # ветка с именем grapes
@route '????'; # добавляем в стек виноград '????'
@invoke 0x05; # 0x05 - Отрисовка на текущей строке
# Рисуем последний элемент из стека ($lis - последний элемент стека)
Аналогично можно использовать и другие фрукты, например, черешню:
@label cherry:
@route '????';
@invoke 0x05;
Или лимон:
@label lemon:
@route '????';
@invoke 0x05;
А также апельсин:
@label orange:
@route '????';
@invoke 0x05;
Таким образом, используя ветвления и соответствующие символы, можно отображать различные фрукты в игровом автомате при помощи языка AsmX.
Теперь нам нужно нарисовать сам игровой автомат. AsmX поддерживает отображение в Юникоде, эмодзи и многое другое. Давайте сделаем аппарат красным и отобразим случайный фрукт. Нам нужно сделать это в подпрограмме с именем "start".
@subprogram start: # подпрограмма с именем start
@call print(RED);
@call print('\t\t\t┏━━━━┳━━━━┳━━━━┳━━━━┓┏━'); # отрисовка крышки иггрового автомата
@execute rand 1 4; # 1
@set cell_1 Int $ret; # 2
@execute rand 1 4;
@set cell_2 Int $ret;
@execute rand 1 4;
@set cell_3 Int $ret;
@execute rand 1 4;
@set cell_4 Int $ret;
@route "\t\t\t┃\u0020"; # отрисовка границ игрового автомата
@invoke 0x05;
@execute goto_sbp check_emoji_1; # 3
@route "\u0020┃\u0020";
@invoke 0x05;
@execute goto_sbp check_emoji_2;
@route "\u0020┃\u0020";
@invoke 0x05;
@execute goto_sbp check_emoji_3;
@route "\u0020┃\u0020";
@invoke 0x05;
@execute goto_sbp check_emoji_4;
@route "\u0020┣┛";
@invoke 0x05;
@call print('\n\t\t\t┗━━━━┻━━━━┻━━━━┻━━━━┛'); # отрисовка конца игрового автомата
@call print(RESET); # сбрасываем цвет текста и фона
Позвольте мне объяснить, что происходит в приведенном выше списке кода.
Нам нужно нарисовать 4 фрукта в автомате, поэтому нам нужны числа от 1 до 4. Используя команду rand, мы получим случайные числа от 1 до 4, и пронумеруем каждую ячейку. Мы сохраняем результат в переменной, потому что регистры $art и $math изменятся в следующий раз. Здесь фрукт уже извлекается из полученного случайного числа. Кроме того, машина становится красной.
Давайте теперь напишем четыре функции, которые отвечают за вывод нужного фрукта из полученной переменной.
@subprogram check_emoji_1:
@execute eq set::cell_1 0x01; # $eq = a == b
@execute jmp_equal grapes; # jmp_equal это переход на ветку если $eq = true
@execute eq set::cell_1 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_1 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_1 0x04;
@execute jmp_equal orange;
Эта функция проверяет значения рандомного числа из первой ячейки и вызывает нужные ветки для отрисовки. Теперь скопируем три таких же функции и измените нумерацию переменных и название ячеек. Вот собственно результат:
@subprogram check_emoji_1:
@execute eq set::cell_1 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_1 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_1 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_1 0x04;
@execute jmp_equal orange;
@subprogram check_emoji_2:
@execute eq set::cell_2 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_2 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_2 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_2 0x04;
@execute jmp_equal orange;
@subprogram check_emoji_3:
@execute eq set::cell_3 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_3 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_3 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_3 0x04;
@execute jmp_equal orange;
@subprogram check_emoji_4:
@execute eq set::cell_4 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_4 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_4 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_4 0x04;
@execute jmp_equal orange;
Теперь нам нужно инициализировать все подпрограммы, в том числе ветки, которые мы написали. Также мы должны вызвать главную подпрограмму start.
@import gpu;
@using label grapes;
@using label cherry;
@using label lemon;
@using label orange;
@Using subprogram check_emoji_1;
@Using subprogram check_emoji_2;
@Using subprogram check_emoji_3;
@Using subprogram check_emoji_4;
@using subprogram start;
@execute goto_sbp start;
Полный исходный код
@import gpu;
@using label grapes;
@using label cherry;
@using label lemon;
@using label orange;
@Using subprogram check_emoji_1;
@Using subprogram check_emoji_2;
@Using subprogram check_emoji_3;
@Using subprogram check_emoji_4;
@using subprogram start;
@execute goto_sbp start;
#----------------------------------------------------------------
@subprogram start:
@call print(RED);
@call print('\t\t\t┏━━━━┳━━━━┳━━━━┳━━━━┓┏━');
@execute rand 1 4;
@set cell_1 Int $ret;
@execute rand 1 4;
@set cell_2 Int $ret;
@execute rand 1 4;
@set cell_3 Int $ret;
@execute rand 1 4;
@set cell_4 Int $ret;
@route "\t\t\t┃\u0020";
@invoke 0x05;
@execute goto_sbp check_emoji_1;
@route "\u0020┃\u0020";
@invoke 0x05;
@execute goto_sbp check_emoji_2;
@route "\u0020┃\u0020";
@invoke 0x05;
@execute goto_sbp check_emoji_3;
@route "\u0020┃\u0020";
@invoke 0x05;
@execute goto_sbp check_emoji_4;
@route "\u0020┣┛";
@invoke 0x05;
@call print('\n\t\t\t┗━━━━┻━━━━┻━━━━┻━━━━┛');
@call print(RESET);
#----------------------------------------------------------------
#----------------------------------------------------------------
@subprogram check_emoji_1:
@execute eq set::cell_1 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_1 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_1 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_1 0x04;
@execute jmp_equal orange;
@subprogram check_emoji_2:
@execute eq set::cell_2 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_2 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_2 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_2 0x04;
@execute jmp_equal orange;
@subprogram check_emoji_3:
@execute eq set::cell_3 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_3 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_3 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_3 0x04;
@execute jmp_equal orange;
@subprogram check_emoji_4:
@execute eq set::cell_4 0x01;
@execute jmp_equal grapes;
@execute eq set::cell_4 0x02;
@execute jmp_equal cherry;
@execute eq set::cell_4 0x03;
@execute jmp_equal lemon;
@execute eq set::cell_4 0x04;
@execute jmp_equal orange;
#----------------------------------------------------------------
@label grapes:
@route '????';
@invoke 0x05;
@label cherry:
@route '????';
@invoke 0x05;
@label lemon:
@route '????';
@invoke 0x05;
@label orange:
@route '????';
@invoke 0x05;
Заключение
В этой статье мы рассмотрели процесс создания игры "Рулетка Фруктов" на языке AsmX. Основные этапы программирования игры - это создание идеи и концепции, разработка графической части и программирование игры с использованием ветвления и подпрограмм. Отметим, что данный процесс требует тщательной разработки и отладки, но результат максимально увлекателен для игроков.
Комментарии (13)
nkozhevnikov
22.05.2023 12:54+2Офтопик: время для цитаты от создателя BolgenOS
Вы говорите что HTML невозможно программировать. По-моему вы просто жутко наелись конфет…
vilgeforce
22.05.2023 12:54Какая печаль, столько энергии и не туда :-(
cat_chi
22.05.2023 12:54+2Ну а что делать?
Человек выбрал себе путь и куда-то идёт. Критики он не слушает и не слышит. Вероятно, нездоров, т.к. для троллинга слишком много работы проделано. Зато никому не вредит, просто тихо занимается чем-то бесполезным.vilgeforce
22.05.2023 12:54+4Наличие кучи бесполезной информации вредит тем, кто ищет информацию полезную. Увы :-(
cat_chi
22.05.2023 12:54+1Не переживайте, никто не будет искать полезную информацию по AsmX :)
И вред, наносимый этой статьёй, не составляет и доли процента от того потока дерьма, которым засоряют Хабр некоторые (хорошо хоть не все) корпоративные блоги
lair
Такие статьи неплохо бы начинать со введения типа "Что за язык AsmX, и зачем он нужен".
(а то тут есть люди, которые помнят .ASMX-файлы)
dynamica
AsmX - это не язык, а недоразумение. ТС написал интерпретатор ассемблероподобного языка на js, который работает, только в js-окружении (в его случае только в ноде).
ТС категорично не понимает, чем его разработка отличается от языка, тем более от ассемблера. Он не понимает концепции ABI/системных вызовов/какого-либо интеропа с чем-угодно. Разниц между компиляцией, интепретацией, трансляцией тоже не понимает.
Под не понимает подразумевается то, что он отказывает это делать. Ему пытались объяснить и не раз. У него есть какая-то своя позиция (никто не знает какая) и он принципиально ей верен, по каким-то причинам.
AsmX не умеет ничего, кроме как работать с выводом в stdout, средствами nodejs.
Многие ошибочно принимают ТС за тролля, но это не так, и винить ТС в его профанации, в общем-то не стоит.
Дело в том, что он во-первых еще достаточно юн - ему 16 лет. Во-вторых он инвалид по рождению, имеющий как физиологические недостатки, так и ментальные расстройства.
Это уже его вторая статья на этом ресурсе, а комьюнити-чаты он уже давно засорил. Что с ним делать, на самом деле не ясно. Кто-то банит, кто-то подыгрывает, кто-то игнорирует.
candyboah
Удивлен что у вас есть время на это всё????
cat_chi
Вы даже задеанонить его ухитрились? :)
Как вариант – ничего? Вреда он не причиняет.
candyboah
Я думаю этот чел из Телеграм'а просто, потому знает его.
raspberry-porridge
Тем не менее, я в 16 лет только юКоз дёргал за вымя. А тут хотя бы что-то рабочее. Другое дело, что бесполезное, а пафосу позавидуют Бабушкин и Попов.
Lirix_vladimir
Ничего себе. 16 лет и уже свой интерпритатор. Достойно уважения на самом деле. И упорность автора тоже достойна уважения.