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 от Илья

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

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

Сообщений: 992


Ответ № 21 15 Апреля 2018 в 14:22
I am not a lawyer security specialist.

Первое, что приходит в голову — ставить подпись при отправке. Добиваешь результат нулями (чтобы усложнить брутфорс), дописываешь секретную строчку, получаешь хэш и отправляешь его вместе с результатом. На стороне сервера делаешь то же самое и сверяешь хэш, вычисленный сервером, с тем, что отправил игрок. Если они совпадают — всё ок.

Чтобы защититься от Артмани, можно проверять программу непосредственно перед отправкой результата. Игрок поменял счёт в артмани, нажал «Отправить» — а ты ещё раз прогнал программу, вычислил результат заново и сразу же отправил.

Но самым крутым вариантом было бы переложить верификацию над пользователей. Чтобы игра в фоновом режиме проверяла решения других игроков.
Илья
Ветеран форума
*****

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

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

Ответ № 22 15 Апреля 2018 в 16:59
Огин, тут нюанс в том, что игра, по сути, open-source. В LOVE 2D просто собирается zip с файлами, и все. Можно их распаковать и изменять как душе угодно.

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

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

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


Ответ № 23 15 Апреля 2018 в 17:01
I am not a lawyer security specialist.

Первое, что приходит в голову — ставить подпись при отправке. Добиваешь результат нулями (чтобы усложнить брутфорс), дописываешь секретную строчку, получаешь хэш и отправляешь его вместе с результатом. На стороне сервера делаешь то же самое и сверяешь хэш, вычисленный сервером, с тем, что отправил игрок. Если они совпадают — всё ок.
Было бы проще понять, что ты сейчас нагромоздил, если бы объяснил откуда берётся секретная строчка, и как она оказывается на сервере.
Если из исходной программы, то зачем лишние шаги, и как это вообще должно помочь? Если программу не исполнять на сервере, то выходит что сервер доверяет программе что результат, секретная строчка и хэш не подменены.
Хотя на фразе «добиваешь результат нулями чтобы усложнить брутфорс» можно было и остановиться.

Чтобы защититься от Артмани, можно проверять программу непосредственно перед отправкой результата. Игрок поменял счёт в артмани, нажал «Отправить» — а ты ещё раз прогнал программу, вычислил результат заново и сразу же отправил.
От артмани поможет, но давай предположим, что у игры открытый исходный код (Lua компилируется в байт-код, который легко декомпилировать).
Если человек настроен на подмену результата, ему ничто не помешает убрать строку выполнения, который находится прямо перед отправкой. Но в этом случае гораздо проще отсылать любое число вместо переменной результата.
Можно попытаться защитить программу от «взлома», написав какой нибудь самописный DRM, но это будет пустой тратой времени.

Но самым крутым вариантом было бы переложить верификацию над пользователей. Чтобы игра в фоновом режиме проверяла решения других игроков.
Вот этот вариант самый адекватный (после выполнения кода на сервере, но Илья просил другие варианты). Осталось добавить блокчейн, кошельки, и назвать Fungecoin'ом.
Он сводится к тому, что сервер не доверяет результатам, и хочет чтобы его проверили. Но всё зависит от того, как реализуется проверка, поскольку это всё таки не криптовалюта, в которой миллионы майнеров независимо проверяют результат. В какой нибудь медленный день, когда игроков в сети совсем нет, ничто не помешает мамкиному хакеру запустить сотню экземпляров «взломанной» игры, которая говорит что результат определённой программы правильный.
В таком случае есть два варианта - каждому игроку проверять каждый результат топовой таблицы (надеюсь, больше чем ТОП-100 не будет), либо если не на сервере, то хотя бы на компьютере Ильи держать проверятель топовой таблицы.
Илья
Ветеран форума
*****

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

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

Ответ № 24 15 Апреля 2018 в 18:00
Писал-писал пост, прикрепил файлик, все сломалось и текст потерялся. Эх...

Короче - демка есть, но ее нет. Я не смог собрать бинарник, че-то не работает, хз. В прикреплении love-файл с игрой, для его запуска установите love2d.

О демке - там все тоже задание, нужно умножать числа на два. Мой рекорд - 119 шагов, пишите о том, сколько получилось у вас.

Про управление - я специально ни чего не пишу. Мне интересно, сможете ли вы разобраться. Скажу только, что по мимо символьных кнопок работает еще Enter, space, ctrl & esc.
Прикреплённые файлы
* fungi.love.zip (170.81 Кб - загружено 18 раз.)

input.txt
Не очень
Активный участник
**

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

Сообщений: 145


12.8 Gb

Ответ № 25 15 Апреля 2018 в 18:30
У меня 80

Выглядит круто, аж TIS-100 захотелось пройти. Но как, блин, удалять символы из клеточек?
Прикреплённые файлы Графические миниатюры:
Илья
Ветеран форума
*****

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

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

Ответ № 26 15 Апреля 2018 в 18:40
У меня 80
Блин, я знал, что кто-то просто запишет все в линию =)

Выглядит круто, аж TIS-100 захотелось пройти.
Спасибо, приятно слышать =)

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

Как бы ты хотел удалять символы? Как тебе будет удобно?

П.С. А с режимами разобрался?  RUN, DEBUG, SELECT DIRECTION?

input.txt
Не очень
Активный участник
**

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

Сообщений: 145


12.8 Gb

Ответ № 27 15 Апреля 2018 в 19:57
Как бы ты хотел удалять символы? Как тебе будет удобно?
На самом деле ничего лучше удаления текущего символа через delete я тоже не придумал.
Сделай еще love.keyboard.setKeyRepeat(true) в love.load()
Кто-тo
Ветеран форума
*****

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

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


Ответ № 28 15 Апреля 2018 в 21:25
Поставил Löve 11.0.0 64-bit, получаю:
Error

main.lua:57: attempt to call field 'getPixelScale' (a nil value)


Traceback

main.lua:57: in function 'draw'
[C]: in function 'xpcall'
Запускаю на Windows 10 1709, если заменить на scale = 1.0 всё работает.
input.txt
Не очень
Активный участник
**

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

Сообщений: 145


12.8 Gb

Ответ № 29 15 Апреля 2018 в 21:34
Renamed APIs
All renamed APIs in 11.0 are deprecated rather than removed, until the next major release.

Renamed love.window.getPixelScale to love.window.getDPIScale.
...
Илья
Ветеран форума
*****

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

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

Ответ № 30 15 Апреля 2018 в 21:46
На самом деле ничего лучше удаления текущего символа через delete я тоже не придумал.
Тогда давай так и сделаем, че уж.

love.keyboard.setKeyRepeat(true)
Ага, добавил, спасибо.

Поставил Löve 11.0.0 64-bit, получаю
Спасибо, что указал версию. В 11-ой версии чуть-чуть сломали совместимость, у меня используется 10-ая.

Попробуй с вот этой версией: https://bitbucket.org/rude/love/downloads/love-0.10.2-win64.exe
Ну или просто подожди чуть-чуть, пока я не перелезу на 11-ую версию, это в планах =)

П.С. Пожалуй, перелезу на 11-ую прям щас. Через часик-другой обновлю демку.

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

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

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


Ответ № 31 15 Апреля 2018 в 21:50
Я спокойно заменил строку в main.lua, больше ни на что не жаловалось. Если что, High DPI в 11й нет, например со шрифтом Consolas выходит мыло.
Для удаления текущего символа лучше добавить Backspace (если только вы не говорили про маковский Delete, который Backspace'ом и является)

EDIT: 84, не в одну строчку.

* Снимок экрана (98).png (10.36 Кб. 727x528 - просмотрено 131 раз.)
Прикреплённые файлы Графические миниатюры:
Последнее редактирование: 15 Апреля 2018 в 22:13 от Кто-тo
Илья
Ветеран форума
*****

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

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

Ответ № 32 15 Апреля 2018 в 22:22
Версия, которая работает и со старыми версиями, и с новой:
https://www.dropbox.com/s/5zy5ibgmu8njpsr/fungi.love?dl=0

Я вообще выпилил скейлинг. Что с ним, что без него, все работает одинаково, хз зачем я вообще с ним заморачивался.

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

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

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

Ответ № 33 15 Апреля 2018 в 22:23
Кто-тo, ахах, не лень тебе было столько набивать? =)

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

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

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

Ответ № 34 15 Апреля 2018 в 22:32
Я сейчас вам новую задачку сделаю, раз интерес есть =)

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

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

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

Ответ № 35 15 Апреля 2018 в 22:57
Обновленная демка, с новым заданием. Здесь нужно найти абсолютное значение числа (abs):
https://www.dropbox.com/s/5zy5ibgmu8njpsr/fungi.love?dl=0

Все необходимые инструкции все там же, в первом посте =)

Ну и скрин моего решения (не подглядывайте):

input.txt
Не очень
Активный участник
**

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

Сообщений: 145


12.8 Gb

Ответ № 36 15 Апреля 2018 в 23:09
Löve 0.10.2: на полсекунды появляется интерфейс потом чёрный экран. Что-то ты там сломал.
Илья
Ветеран форума
*****

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

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

Ответ № 37 15 Апреля 2018 в 23:28
Очень странно, завтра постараюсь разобраться.

input.txt
Не очень
Активный участник
**

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

Сообщений: 145


12.8 Gb

Ответ № 38 16 Апреля 2018 в 00:00
Хз почему, но если в setColor не передавать четвертый параметр (альфа), то все ок.

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

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

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

Ответ № 39 16 Апреля 2018 в 00:09
Все верно, в 11-ой версии в качестве альфы нужно передавать флоат 0.0-1.0, а раньше - 0-255.

Я завтра разберусь с тем, как создавать билды и буду кидать их, чтобы вы не мучились.

input.txt
Не очень
Активный участник
**

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

Сообщений: 145


12.8 Gb

Ответ № 40 16 Апреля 2018 в 00:13
Лучше я 11.0 скачаю
Страниц: 1 2 3 4   Вверх
  Печать  
 
Перейти в:  

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