LINUX.ORG.RU

Игры и учебные среды для программирования

 robozzle, , кумир, ,


3

3

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

Интересуют только такие, которые или
a) запускаются нативно на GNU/Linux и с полным исходным кодом, или
б) запускаются через браузер без регистрации, но в этом случае обязательна возможность создания своих уровней.

Те какие я уже щупал и мои впечатления по ним, что бы снова их не предлагали:

  • RoboZZle — работает через Web, есть тысячи готовых уровней, кампания с фиксированной последовательностью избранных уровней и редактор, что бы делать свои уровни. К сожалению сайт на данный момент подглючивает: вики не работает, а форум засран спамерами.
    На данный момент лучшее, что нашлось из онлайновых. Правила игры: имеется поле из квадратных клеток одного из трёх цветов (RGB), можно двигаться вперёд и поворачивать на 90°, можно проверять цвет текущей клетки и вызывать процедуры (до пяти процедур, включая F1 которая запускается при старте). В некоторых уровнях разрешено перекрашивать текущую клетку. Цель игры — собрать все звёзды на уровне.
  • Light-bot. Есть в нескольких вариантах. lightbot.lu самый простой в использовании, но крайне примитивен, так как нет ни процедур, ни условных выражений. Есть две флеш версии: [https://armorgames.com/play/2205/light-bot]первая 1.x чуть получше веб-версии, так как есть одна процедура, работает через эмулятор без флеша. Флеш версия 2.0 без флеша уже не работает, а флеш RIP, зато там уже есть зачатки control flow похожие на то что есть в Robozzle. В общем, не годится.
  • ПиктоМир. Есть две онлайн версии: https://www.niisi.ru/piktomir/online/index.html — инопланетянский интерфейс какой-то, но выглядит прикольнее, хотя сходу непонятно, какая кнопка для чего. https://online.piktomir.ru/index.html — задания и команды те же самые, интерфейс более понятный, есть справка, но выглядит скучновато. Пока что нигде не нашел комментариев, почему в онлайне висит две версии и какая новее.
    Ещё есть оффлайн версии, причём на одном сайте только для Windows и мобильных платформ, а на другом и для Linux, но где исходники этой версии, я не нашел, возможно она проприетарная.
    Система команд — что-то среднее между robozzle и lightbot, и имеет команды и оттуда и оттуда. Control Flow есть, но сделан довольно сложно и топорно, а не красиво и элегантно, как на roboZZle.
    В ПиктоМире у процедуры в начале есть опциональный флажок, куда можно вставить повторитель на фиксированное к-во раз (от 1 до 6), условное выражение или условие цикла while. Причём, можно ли вставить флажок и какого типа решает составитель уровня, а не игрок.
    В то же время в robozzle никаких специальных операторов не требуется, поскольку можно, например, внутри F2 в конце положить вызов F2 на красной клетке. Тогда получится цикл while (red) {остальной код}. А если процедура сама себя не вызывает, то её вызов будет иметь эффект if(some color) {код процедуры} и так далее. Имитировать счётчик для фиксированного числа повторений можно с помощью процедуры с не-хвостовой рекурсией.
  • Cargo-Bot Online — клон игры Cargo-Bot, работающий в браузере. (UPD)
    На нескольких (вроде не более 8) платформах расположены башни из ящиков четырёх цветов (красный, желтый, зелёный, голубой) высотой не более шести штук. Над ними на рельсе может перемещаться кран. Цель игры — переместить эти ящики на указанные платформы в указанном порядке.
    Система команд очень похожа на RoboZZle, и как оказалось, написана под впечатлением от неё: взять/положить ящик (одна и та же команда), сместиться к платформе слева, сместиться к платформе справа, вызов процедур от первой до четвёртой. Каждая команда может быть выполнена в зависимости от содержимого крана (пустой, любой ящик, ящик конкретного цвета).
    На мой взгляд, RoboZZle интереснее, так там работа идёт в двумерном пространстве. Кроме того, нет редактора уровней.
    UPD Нашел версию лучше, старая ссылка вот.

Далее, три похожих игры про гусеничного робота:

  • Кодвардс — программа пишется на урезанном CoffeeScript, с добавлением цикла.
    loop 3
        robot.rotate left
        robot.move 1
        robot.rotate right
        robot.move 1
    end
    Если залогинится, то дают доступ к демо курсу, где нет ничего кроме этих двух команд, даже циклов и условий, а дальше платно и дорого. Лучше тыкать в режиме Hour of Code, там чуток интереснее и есть другой исполнитель, который может поднимать предметы на двух картах. В общем на один раз пройти и забыть сгодится. Регистрация того не стоит. Кроме того, не запоминает написанный код. Если перейдёте на предыдущий уровень — начинайте заново.
  • RoboMind — программа пишется на языке, похожим по синтаксису на C, только циклы называются по-другому, в частности есть repeat(3) {} для повторения фиксированное к-во раз, repeat {}, откуда выход только через break или end, repeatWhile () {} (аналог обычного while () {} ). Команды движения выглядят как forward, backward (заменяется forward с отрицательным аргументом), left, right, paintWhite, StopPainting, pickUp, putDown. У команд движения в скобках можно указать аргумент, например backward(-2) эквивалентно forward(2). Если зарегистрироваться, открываются дополнительные «курсы», где я видел Python в качестве управляющего языка. Есть Offline-версия на Java 11, но исходников я не нашел, хотя лицензия указана Apache. До этого была проприетарной и платной и требовала лицензионного ключа. В русской версии Hour Of Code где-то посередине был баг, мешающий пройти. Хотя может уже устранили.
  • Karel the robot — похоже на предыдущие два, но есть задания чуток сложнее и интереснее. Не требует регистрации, но есть некие continuation code, которые позволяют получить доступ сразу к последним заданиям из другого браузера. Примерно как пароли к старым играм. Язык самый простой из всех перечисленных — упрощённый python, с ещё более короткими командами (go, left, right, get, put) и без необходимости писать : после if, while, и с отступами в качестве операторных скобок, например так выглядит код для предпоследнего задания:
    while not home
      while not wall
        if sword
          get
        go
      left
    
    В отличии от двух предыдущих, здесь нет пульта, где можно вводить команды мышью.

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

Меня интересует, есть ли что-то подобное перечисленному, но с понятной свободной лицензией, работающее на GNU/Linux? Что бы именно робот, который ходит по миру с препятствиями, может идти вперёд и поворачивать и управляется кодом, который можно писать текстом.

Другие браузерные игры. Не то, что нужно, но тоже кому-то интересные:

  • http://box-256.com/ — Восьмибитный компьютер, работающий через браузер с 256 байтами памяти, где нужно писать программу на ассемблере. Написан, к сожалению на Unity, поэтому несвободный и долго загружается.
  • https://alexnisnevich.github.io/untrusted/ — выйти из лабиринта, меняя код игры (на java script)
  • https://david-peter.de/cube-composer/ — Паззл, из одной башни кубиков собрать другую башню кубиков.
  • Jahooma's LogicBox — на входе имеется строка. Есть базовые блоки: стартовый, удаление первого символа, проверка первых двух символов на совпадение, удвоение первого символа и просто перенаправление входа на выход и составные блоки, которые надо сделать самому в первых уровнях из базовых, а в следующих можно их использовать. Блоки нужно выстраивать на сетке 6 на 7 клеток, что бы получался нужный результат на выходе. Первые 10 уровней простые, на 10 резко возрастает сложность.
  • blockly.games — семь игр для обучения программированию. Правда здесь используется Scratch и только в последней игре можно писать ещё и кодом на JavaScript. Задания все относительно несложные.

Ещё есть множество всяких онлайновых игр на code.org, tynker.com и нескольких других сайтах, но они все дальше простейших условных выражений и циклов не идут и довольно однотипные и слишком простые, поэтому подробно останавливаться не буду. Может там есть что-то более интересное, но это надо копаться и перебирать все.

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

Из таких я видел две:

  • KTurtle — имеется в комплекте KDE, ничего дополнительно ставить не надо, часто ставится прямо сразу с системой. Что можно сказать — черепашка, может рисовать картинки. К сожалению не очень зацепило, так как нет уровней с заданиями которые можно проходить. Кроме того, на мой взгляд роботы в мире с препятствиями интереснее.
  • КуМир — не смотря на невзрачный вид, эта система на мой взгляд лучше всех перечисленных выше, поскольку её исходный код сразу доступен, не нужно и можно его скачать и скомилировать, а можно взять готовые бинарники, включая автоматические ночные сборки.
    Сразу после установки доступен один «практикум», что в терминах игр эквивалентно кампании. Задания довольно простые, но можно проявить творческий подход и написать более универсальный код, чем минимально необходимый для прохождения автоматического теста.
    В среде есть всё необходимое для разработки своих «практикумов», включая редактор «учителя», где доступны функции и процедуры, заблокированные для «студента», но позволяющие писать проверяющие алгоритмы. Для исполнителей есть простые редакторы сред, позволяющие, например, нарисовать лабиринт.
    Программирование ведётся на диалекте Учебного алгоритмического языка, который используется в некоторых школьных учебниках информатики.
    алг Вперед
    нач
    · цел напр
    · напр := mod(направление, 4)
    · выбор
    · · при напр = 0: игрек := игрек + 1
    · · при напр = 1: икс := икс + 1
    · · при напр = 2: игрек := игрек - 1
    · · при напр = 3: икс := икс - 1
    · все
    · вперед
    кон

    Язык на мой взгляд неплохой, близкий по духу к Паскалю, но имеющий особенности синтаксиса, которые появились только в более поздних языках. Например, нач (аналог begin) нужен только в начале описания подпрограммы (алгоритма, алг), а для циклов и условий используются другие операторные скобки (кц ... нц и если ... то ... иначе ... все), для объявления переменной достаточно написать её тип и имя как в C, а слово var и двоеточие как в паскале не нужно.
    Имеется довольно много синтаксического сахара, облегчающего читаемость кода. Например, функции и переменные могут иметь имена из нескольких слов, разделенных пробелами, е и ё эквивалентны. Логический оператор не можно воткнуть между не только перед, но и между словам в многословной логической функции, например можно написать если не справа стена то ... все, а можно если справа не стена то ... всё и в цикле можно написать нц 3 раз ... кц, а можно нц 3 раза ... кц.
    Понравилось в этом языке разделение функций и процедур. И те и другие имеют синтаксис алг нач кон с опциональными параметрами, которые могут быть входными, выходными (рез) входными-выходными (арг рез или аргрез). Объявление функции выглядит так же, только добавляется ключевое слово типа возвращаемого значения (цел, вещ, лог, лит и тд) между словом арг и именем алгоритма. Возврат значения выполняется с помощью присвоения специальной переменной знач вместо аналога return, что на мой взгляд хуже.

    Есть конечно и недостатки. Использование кириллических символов и русской лексики затрудняет понимание кода иностранцам, а писать сам код менее удобно, так как <> (сравнения) [] (массивы) | (комментарии) набирать из русской раскладки по умолчанию нельзя. Впрочем этот недостаток легко решается с помощью самой IDE, где вроде бы есть сочетания клавиш, которые вставляют эти символы из русской раскладки, но даже если бы их не было, и в Windows и в GNU/Linux можно сделать свою раскладку, использующую вторую клавишу регистра (Обычно AltGr, он же правый альт) или поставить готовую. Ну и переключение раскладки одним нажатием CapsLock (или чего-нибудь другого на вкус пользователя) вместо комбинации из двух нажатий типа Ctrl-Shift тоже сильно облегчает набор символов, недоступных в текущей раскладке.
    Но, на мой взгляд, непривычная лексика — это не особо значительный минус. Чем кц пока ... нц из КуМира хуже какого-нибудь repeatWhile () {} из RoboMind? По-моему, ничем. А, поскольку код во всех этих системах, сугубо учебный, то и необходимости шарить его с иностранцами особой нет.

Интересуют только свободные игры, где есть готовые кампании с уровнями с плавно, но не слишком медленно повышающейся сложностью и возможностью делать свои уровни. Просто какие-то среды типа KTurtle — их полно, но там или готовых задачников/кампаний нету или есть, но дальше освоения простейших конструкций языка они не идут. В этом плане мне понравились задания из Karel Challenges, там есть например рекурсивный сбор яблок, выложенных в виде двоичного дерева. Не слишком сложно, но и не слишком просто. Хотелось бы ещё чего-то вроде прохождения лабиринта, но не по правилу левой или правой руки, а по более продвинутым алгоритмам, где правило * руки не работает.

★★★★★

Последнее исправление: Xenius (всего исправлений: 9)

Сколько человек прочитает дальше б) запускаются через браузер без регистрации?

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

vvn_black ★★★★★
()
Ответ на: комментарий от Miguel

Cargo-Bot

Система команд похожа на Robozzle. А где исходники скачать?

Xenius ★★★★★
() автор топика

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

doc0
()
Последнее исправление: doc0 (всего исправлений: 4)
Ответ на: комментарий от doc0

Проприетарщина-то зачем. Если уж на то пошло, то тот же КуМир почти всем хорош. Просто интересно есть ли что-то ещё подобное.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius

много подобного не нужно, проприетарщина тоже, от большого колл-ва квадратов квадратной голова будет, узкой, плоской, а шар идеален слишком

doc0
()
Последнее исправление: doc0 (всего исправлений: 3)
Ответ на: комментарий от MKuznetsov

Ссылка есть на лицензию прямо на главной странице — проприетарщина, очевидно, да ещё и под Windows. Под Windows такого было полно, да и под DOS например тоже.

Меня интересует то, что работает в современных свободных ОС.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Miguel

Cargo-Bot: https://youtu.be/XPmwz_FVcmU

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

Xenius ★★★★★
() автор топика
Ответ на: комментарий от anonymous

https://code.org/starwars

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

Xenius ★★★★★
() автор топика
Ответ на: комментарий от vvn_black

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

Поменял начало. А так, это и обзор и вопрос. Обзор того, что щупал, вопрос о том, есть ли что-то подобное, но лучше.

Xenius ★★★★★
() автор топика
Последнее исправление: Xenius (всего исправлений: 1)

https://www.codingame.com/multiplayer : произвольный язык программирования (от bash до haskell). Игры только многопользовательские (кампаний нет), но уровень плавно повышается за счёт того, что в начальных лигах доступны не все действия.

monk ★★★★★
()
14 апреля 2023 г.
Ответ на: комментарий от WebCoder

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

Xenius ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.