RS Game Maker Community
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

 
Расширенный поиск
  Главная  Форум   Вики Блоги FAQ Игры Статьи Примеры Войти Регистрация  
Вики
Все желающие приглашаются редактировать вики. Можете писать о своих (или чужих) играх, размещать туториалы, постить статьи - главное навесить категорию.
Страниц: 1 2 3 4   Вниз
  Печать  
Fungeoid [игра для программистов, головоломка]
0 Пользователей и 1 Гость смотрят эту тему.
Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

18 Март 2018 в 21:17
Пару лет назад я наткнулся на игрушки TIS-100 и MHRD, поиграл, понравились.
Долго вынашивал идею, что еще можно сделать "для программистов". Вспомнил про эзотерические языки, в частности, про Befunge.

Подробное описание языка под спойлером.
Befunge — стековый эзотерический язык программирования. Считается двумерным, так как программа на Befunge записывается в таблицу со сшитыми краями (тор), по которой в различных направлениях перемещается интерпретатор, исполняя команды, расположенные в её ячейках.

Язык имеет вот такие команды:
перемещение (9):
  • >   Двигаться вправо
  • <   Двигаться влево
  • ^   Двигаться вверх
  • v   Двигаться вниз
  • _   Двигаться вправо, если на вершине стека 0, иначе — влево.
  • |   Двигаться вниз, если на вершине стека 0, иначе — вверх.
  • ?   Двигаться в случайном направлении
  • #   Пропустить следующую ячейку ("трамплин")
  • @   Конец программы
манипулирование со стеком (3):
  • :   Поместить в стек копию вершины (forth:DUP)
  • \   Обменять местами вершину и подвершину (forth:SWAP)
  • $   Удалить вершину (forth:DROP)
модификация кода программы (2):
  • p   "PUT": со стека извлекаются координаты ячейки и ASCII-код символа, который помещается по этим координатам
  • g   "GET": со стека извлекаются координаты ячейки; ASCII-код символа по этим координатам помещается в стек
константы (2):
  • 0-9   Поместить число в стек
  • "   Начало/конец символьного режима, в котором ASCII-коды всех текущих символов программы помещаются в стек
стековые арифметические операции (5):
  • +   Сложение вершины и подвершины (forth:+)
  • -   Вычитание вершины и подвершины (forth:-)
  • *   Умножение вершины и подвершины (forth:*)
  • /   Целочисленное деление (forth:/)
  • %   Остаток от деления (forth:MOD)
стековые логические операции (2):
  • !   Отрицание: нуль на вершине заменяется на 1, ненулевое значение — на 0 (forth:0=)
  • `   Сравнение "больше, чем": если подвершина больше вершины, в стек помещается 1, иначе 0 (forth:>)
ввод-вывод (4):
  • &   Запросить у пользователя число и поместить его в стек
  • ~   Запросить у пользователя символ и поместить в стек его ASCII-код
  • .   Распечатать вершину стека как целое число (forth:.)
  • ,   Распечатать символ, соответствующий ASCII-коду на вершине стека (forth:EMIT)

И пример программы от туда же:
>                          v
@,,,,,,,,,,,,"Hello World!"<
Более наглядный пример:
22+
В стек будет помещена двойка, потом еще двойка.
Когда интерпретатор наткнется на "+" - он достанет со стека два числа, сложит их и поместит в стек результат.

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

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

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

В данный момент, спустя пару часов разработки, у меня есть интерпретатор и почти готовый редактор. Думаю 3-4 дня потрачу на то, чтобы навести порядок, продумаю как делать "задания" и кину вам демку.

Скриншотик для затравки:
На скриншоте - почти готовый редактор. Почти - по тому, что я пока не знаю как сделать его удобным для редактирования "2д-тянпрограмм".
Цветастые полосы - это возможные траектории выполнения кода программы. Строятся на лету, при вводе кода.

Глобальные задачи:
  • Допилить редактор
  • Придумать удобный менеджер миссий
  • Прикрутить таблицу рекордов
  • Разобраться с дизайном, сюжетом, графической частью (если она вообще будет)
  • Релизнуться в стиме

Последнее редактирование: 18 Март 2018 в 21:44 от Илья

 
Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 61 22 Апрель 2018 в 01:36
input.txt, спасибо, да, проблема была в этом.

Подумываю сделать такое меню:

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

Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 62 23 Апрель 2018 в 00:56
Сегодня тестировал графики в меню. Если в кратце - то практически готово. Нужно причесать код и вывести результаты игрока, само собой.

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

Убил кучу времени, чтобы найти багу в формуле, оказалось, что все дело в округлении.


П.С. Вступайте в группу в ВК, еси чо: https://vk.com/fungeoid
П.П.С. И добавляйтесь в друзья. А то РКН завтра заблочит наш жмакерс, и все, а с вами весело бывает.

Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 63 24 Апрель 2018 в 00:25
Почти готовый вариант меню с тестовыми данными:

У меня есть вопрос - сильно плохо, если я сделаю регистрацию и вход прямо в игре?
Просто я хз как еще сделать таблицу рекордов без этого.
Можно, конечно, попробовать прикрутить логин через стим (или хз, как там это работает), но я ни когда не работал с его АПИ, и вообще я сомневаюсь, что есть биндинги для LUA.

П.С. Если у вас есть варианты как сделать табличку рекордов без регистрации, пишите, плиз.
Последнее редактирование: 24 Апрель 2018 в 11:17 от Илья

Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 64 28 Апрель 2018 в 01:40
В прошлом посте я кидал скрин меню. После, я решил еще чуть-чуть поиграться с ним, передвигаю блоки с места на место.

Из-за того, что приходилось постоянно переписывать формулы по которым вычислялись x, y, w, h блоков, это стало приносить боль.

Так в моей игре появился недо-css-движок, который во многом копирует флексбоксы css'a.

Вот такая схема layout'a:
local layout = {
  gap = GUI_GAP,
  direction = "column",
  childs = {{
      width = 172,
      callback = drawTasksFrame,
      direction = "row",
      childs = {
        { height = GUI_LINE_HEIGHT }, -- frame header
        { callback = drawTasksList },
      }
    }, {
      space = GUI_GAP,
      direction = "row",
      childs = {
        {
          callback = drawInstructionsFrame,
          direction = "row",
          childs = {
            { height = GUI_LINE_HEIGHT }, -- frame header
            {
              gap = GUI_GAP,
              direction = "column",
              childs = {
                { callback = drawInstructionsGraph },
                { callback = drawInstructionsLeaders },
              }
            }
          }
        }, {
          callback = drawStepsFrame,
          direction = "row",
          childs = {
            { height = GUI_LINE_HEIGHT }, -- frame header
            {
              gap = GUI_GAP,
              direction = "column",
              childs = {
                { callback = drawInstructionsGraph },
                { callback = drawInstructionsLeaders },
              }
            }
          }
        }, {
          height = GUI_LINE_HEIGHT, -- frame header
          callback = drawToolbar
        }
      }
    }
  }
}
Генерит такое меню:


Как видно из схемы, я только ширину первой колонки задал, 4 отступа (frame header, они у меня вместо margin-top) и gap - отступы со всех сторон.

Теперь, если что-то нужно поменять, не надо пересчитывать десяток формул, достаточно поменять схему, все пересчитается само.

Круто же? =)

П.С. Да, я вообще не кодил игру

Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 65 01 Май 2018 в 01:31
https://www.dropbox.com/s/5zy5ibgmu8njpsr/fungi.love?dl=0

Новая демка:
0) Теперь можно писать самомодифицирующийся код
1) Редактор и меню используют мой недо-css-движок
2) В менюшке можно выбирать задачи
3) Новая задачка, на нахождение минимального и максимального числа

Для запуска все так же юзайте LOVE 11.1, а завтра я таки напишу скриптик для сборки бинарников.

П.С. Задачка с min и max получилось чет через чур сложной. По крайней мере, мне так кажется. Я решал ее часа 2, в итоге получил дико громоздкое и тормозное решение. Под спойлером решение.
П.П.С. 4500 шагов и 67 инструкций, ужас.

Кто-тo
Ветеран форума
*****

Репутация: 81
Offline Offline

Сообщений: 1 112


Ответ № 66 01 Май 2018 в 01:45

* Снимок экрана от 2018-04-30 23-38-49.png (10.25 Кб. 782x637 - просмотрено 199 раз.)

Я вот не пойму, это баг в линуксовском Löve (отсюда, не компилировал ибо лень, в репозитории 0.10.2), ошибка в шрифте, или ошибка в моих линуксах (чего быть не может).
Это происходит только с A. Под Windows проверить не могу, занят обновлением десятки.

Комментарии бы пригодились, может не для других, но для объяснения самому себе, что происходит.
Прикреплённые файлы Графические миниатюры:
input.txt
Не очень
Активный участник
**

Репутация: 19
Offline Offline

Сообщений: 145


12.8 Gb

Ответ № 67 01 Май 2018 в 04:28
Да, адресация по двум индексам приносит боль.

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


P.S. А все-таки перевернуть бы стек обратно, или переставить вниз, или как-нибудь отметить его "верх".

UPD Удалось разогнать до 1797
Последнее редактирование: 01 Май 2018 в 05:48 от input.txt
Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 68 01 Май 2018 в 23:21
Сори ребят, я пока не могу внятные ответы написать. Завтра все будет.

Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 69 02 Май 2018 в 18:03
Я вот не пойму, это баг в линуксовском Löve (отсюда, не компилировал ибо лень, в репозитории 0.10.2)
Хм, возможно проблема в версии Löve - я юзаю 11.1.
ошибка в шрифте
Вероятность есть. Текущий шрифт я нашел вообще хз где. Я соберу для тебя демку с другим шрифтом, потестим.
Под Windows проверить не могу, занят обновлением десятки.
Я првоерил у себя на винде, на двух ПК - все збс.



Да, адресация по двум индексам приносит боль.
Я думаю добавить команду для "вращения" трех верхних значений в стеке. Это избавит от боли, по идее.
С таблицей рекордов, кстати, будет проблема в том, что все 10 строчек рано или поздно (рано) забьются оптимальным решением и не изменятся уже никогда.
Ммм, да, есть такая проблема. Возможно, стоит совсем выпилить таблицу рекордов, и оставить только графики.


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

Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 70 03 Май 2018 в 00:47
Кто-то, протесть пожалуйста вот это: https://www.dropbox.com/s/ph7zd6y6uwn3njb/fungi.love?dl=0

Там Courier. Интересно как с ним будет работать.

Кто-тo
Ветеран форума
*****

Репутация: 81
Offline Offline

Сообщений: 1 112


Ответ № 71 03 Май 2018 в 21:36
Я вот не пойму, это баг в линуксовском Löve (отсюда, не компилировал ибо лень, в репозитории 0.10.2)
Хм, возможно проблема в версии Löve - я юзаю 11.1.
Я имел ввиду, что брал официальную сборку, поскольку в репозитории старая версия.
В Fedora 28 тоже 0.10.2. 11.x поломал некоторые вещи, поэтому либо мейнтейнер не стал обновлять, либо он просто уснул.

ошибка в шрифте
Вероятность есть. Текущий шрифт я нашел вообще хз где. Я соберу для тебя демку с другим шрифтом, потестим.

Кто-то, протесть пожалуйста вот это: https://www.dropbox.com/s/ph7zd6y6uwn3njb/fungi.love?dl=0

Там Courier. Интересно как с ним будет работать.
Я мог бы и сам поменять шрифт (что уже делал один раз), но вот:
Очевидно, проблема в шрифте, которая проявляется только под GNU/Linux. Нужно смотреть, что с ним не так.
Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 72 04 Май 2018 в 00:11
Кто-то, понял, спасибо. Попробую разобраться со шрифтом как нибудь.

У меня есть еще вопросик к вам, опять на счет рекордов.

Если честно, я не очень хочу интегрироваться со стимом в свете всех этих тотальных блокировок и отсутствия внятных биндингов для Lua.

Придумал вот такой вариант:
1) при выполнении задачи считаем хеш "программы".
2) Берем кол-во инструкций и шагов
3) Отправляем все это на сервер

Плюсы:
1) Это очень просто
2) Не нужно идентифицировать юзера

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

Блин, не уверен, что я понятно объяснил, и не уверен, что это вообще проблема.

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

Что скажете?

Илья
Ветеран форума
*****

Репутация: 100
Offline Offline

Сообщений: 1 571

Ответ № 73 07 Июнь 2018 в 22:59
Чуваки, я все таки хочу допилить эту игру и релизнуть ее в стиме, с рекордами и ачивками.
Сейчас я не могу это сделать, т.к. в луа непонятно как подключать стим да и вообще, луа мне не очень нравится.

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

Может подскажите че?

П.С. Раньше был XNA, но он, вроде, давно сдох.

Огион
Завсегдатай
****

Репутация: 133
Offline Offline

Сообщений: 989


Ответ № 74 10 Июнь 2018 в 14:51
Я слышал про Godot, но сам не пользовался. Вообще, твою игру должно быть несложно сделать с нуля на какой-нибудь игровой библиотеке: Allegro, SDL. SDL посложнее (вроде как), зато у него есть обёртка под C#, которую регулярно обновляют.
Кто-тo
Ветеран форума
*****

Репутация: 81
Offline Offline

Сообщений: 1 112


Ответ № 75 11 Июнь 2018 в 00:53
SDL посложнее (вроде как)
SDL в плане графики является обёрткой к OpenGL, если не использовать встроенный функционал двухмерной отрисовки, который насколько я помню (SDL 1.2) довольно примитивен.
OpenGL будет слишком сложным для такой игры, а двухмерного функционала не уверен что будет достаточно.
Страниц: 1 2 3 4   Вверх
  Печать  
 
Перейти в:  

RSGMC (gmakers.ru) © 2007—2018
Счётчик–@Mail.ru