Colobot _ #1 _ Знакомство с игрой _ Программируем ИИ на C++ в пожалуй лучшей игре этой тематики!

Ойындар

Друзья, представляю вам одну из лучших, на мой взгляд, игр про программирование искусственного интеллекта.
Здесь есть большой выбор роботов, производство, шикарная кампания, где мы путешествуем по космосу, начиная с луны и далее по списку.
Код пишется на реальном C++! И это не скучно!
Игра разрабатывается Open Source сообществом и доступна бесплатно.
Вы можете сами её скачать и поиграть, официальный сайт проекта colobot.info.
Также вы можете поддержать этот проект любым способом.
Желаю приятно просмотра!

Пікірлер: 8

  • @SmileSick
    @SmileSick Жыл бұрын

    2:30 в оригинале так и было, но в эту версию из ceebot-teen добавили рисующего бота Scribbler. У него батарейки нет. 4:40 если запускать программу из редактора, то она запускается в режиме отладки. Чтобы команды в этом режиме выполнялись, нужно нажимать на единицу. 5:20 и если на эту строку нажать, то попадём в справку по данной команде 7:30 я бы посмотрел на полностью автоматизированное прохождение. Сам пока добрался до 7 планеты в версии 0.1.12 и до 3 планеты в версии 0.2 (из-за отдельного бота для строительства прохождения сильно отличаются) используя только код. Дальше пока ступор. 8:40 в качестве усложнения предлагаю выполнить это задание без поворотов. 9:25 проверку синтаксиса можно сделать, нажав на кнопку компиляции. Она находится слева от кнопки запуска. 18:45 это не всё объекты. Часть пропущена. Также есть объекты без названий, но радаром их искать можно через их номера. На самом деле всё эти названия являются зашитыми в игру константами и имеют тип int. 19:30 если быть точным, то это функция, которая возвращает значение типа object. 23:05 под значком камеры есть кнопка рестарт. Программа сохраняется. 27:00 радар не зависнет, он просто вернёт null. Проблема возникнет в следующей строке, так как у null нет свойства position, и программа выдаст ошибку. Потому разумнее в этот условный цикл вставить условие о наличии батареи. Таких плохих примеров будет много в обучающих упражнениях, есть даже критические. В данном упражнении не критично, так как он успеет поставить только половину батарей. 29:30 не совсем ошибка, но нет смысла каждый раз пересоздавать переменную заново. 29:40 ускорение есть на клавише f8. Каждое нажатие увеличивает скорость в два раза. F6 наоборот замедляет игру. Стабилизация скорости на клавише f7 30:20 как это не заремейкали. Вообще то эта версия как раз и является ремейком. Оригинал 2001 года был на другом движке. 30:50 я бы с удовольствием поиграл бы в это чудо на Unreal Engine. Попробовать перенести можно в качестве обучения движку, но я не представляю как создавать язык внутри игры. 37:15 было бы неплохо в этом упражнении указать, что позиция бота это не просто position, а this.position, просто this опущено. Это было бы нагляднее.

  • @PlayCode1

    @PlayCode1

    Жыл бұрын

    Спасибо тебе дружище за столь подробный и полезный комментарий! Итак по порядку тайм кодов: 1) В ceebot не играл. 2) Про "единицу" понял, попробую. 3) Это про то, что если кликнуть по оператору в тексте редактора, то попадёшь в справочник? Это было бы логично. В любом случае, самое необходимое на мой взгляд - это сигнатура и она отображается ниже в редакторе окна. А вот автокомплита для категорий нет и поэтому приходится "вручную" писать категории вроде "AlienSpider" - это не очень удобно. 4) Попробую сделать полностью автоматизированное прохождение, если хватит времени, мне придётся также много механик в игре вспомнить или узнать. 5) Предположу, что имеется ввиду, заменить боту впереди батарейку, вытащив свою? Но в любом случае нужно будет её куда то сбросить, а для этого придётся повернуть ил я что-то не понял? 6) Спасибо, не обратил внимание, хотя по идее нажимая "запуск" синтаксис тоже должен проверяться, надо будет проверить. 7) Понятно, думаю скорее всего это не константы, а Enum с типом Int. 8) Выглядит как функция да, хотя на мой взгляд, было бы логичнее в объектной модели использовать методы, а не процедурный подход. С другой стороны вызов "radar()" вместо "this.radar()" ещё не говорит о том, что это не метод данного бота, в некоторых языках "this" опускается при вызове методов того-же класса и похоже в C++ как раз так, поэтому это может быть всё-таки методом. 9) Понял. 10) Я сказал "зависнет", т.к. ещё не увидел этой механики в игре - кидает ли она такие ошибки, ок. 11) Именно. 12) Вот это очень полезно! F6, F7, F8 надо запомнить. 13) На другом движке? Странно, я всегда думал, что игра изначально была написана на C++ и судя по репозиторию на гите, других языков там нет или имеется ввиду, что был другой движок на C++? Но тогда это очень странно вкладываться в написание нового движка на том же языке при наличии хороших альтернатив в виде Unreal и Unity, вместо доработки текущего, буду признателен если подсветишь тему. 14) Проблема с переносом скорее не в том, что-бы добавить туда возможность писать код текстом, а в количестве моделей и механик, которые нужно переносить, по сути нужно с нуля всё это делать. Хотя ассеты можно было бы попробовать перенести, теоретические, но это тоже объемный труд. 15) Понятие "нагляднее" индивидуально, то, что опущено "this" - это вообщем-то нормально для некоторых языков, т.к. они работают в ООП парадигме и нет необходимости каждый раз указывать на свой объект, вроде такое есть и в C#? Лично мне одинаково удобно.

  • @SmileSick

    @SmileSick

    Жыл бұрын

    @@PlayCode1 Сопоставлять таймкоды с числами не очень удобно, потому лучше также использовать таймкоды. Для этого просто перед комментарием вместо числа ставить время. Ютуб сам превратит это в таймкод 2:30 ака 1) стоит ознакомиться. Их 4 части, плюс для 4-ой есть школьная и колледж версии. Эти игры вышли после оригинального Colobot и больше направлены на обучение. Миссий там нет, только упражнения, но структурированы они намного лучше упражнений в Colobot. Все версии кроме школьной и колледжа можно скачать официально на сайте blupi . org (убрать пробелы). Корявое прохождение всех версий у меня есть на канале, чтобы можно было составить первое впечатление. Сами версии тоже не без косяков, потому делаю для них свои фиксы. Также я переношу уровни из них на новый движок в виде модов. 2 части уже портированы. 5:20 ака 3) не на строку в коде, а строку в подсказке снизу. Также можно сделать это из кода, выбрав команду и нажав F3. По поводу достаточности сигнатуры, то это не всегда. В помощи указаны типы для принимаемых параметров и также указана информация по дефолтным значениям. Например в коде команды для манипулятора grab() и drop() написаны без параметров, а в подсказке в качестве параметра указан некий order. 7:30 ака 4) если будут затруднения, то можно глянуть некоторые вещи у меня. Правда я проходил в версии 0.1.12 и потому некоторые вещи нужно будет менять. Об этом я говорил в обзоре на версию 0.2, когда она вышла. Также есть прохождение для версии 0.2 для первых 2-х планет, где можно сравнить программы для обеих версий. А со временем у меня тоже беда. Знакомо))) 8:40 ака 5) да, можно поставить боту свою батарейку. А сбросить батарею можно позади себя без поворотов. Для этого как раз и нужны параметры в командах grab и drop. 9:25 ака 6) также он будет проверяться при нажатии на кнопку "OK". Просто раз есть специальная клавиша для проверки, стоит об этом упомянуть 18:45 ака 7) для Enum насколько я понимаю, все числа должны располагаться по порядку без пропусков. Только тут многие числа пропущены. Также если рассмотреть названия цветов для рисования, то они также являются встроенными константами, как и параметры для манипулятора. И некоторые из них имеют одинаковые номера с цветами. Так что больше похоже на константы, но я могу и ошибаться. 19:30 ака 8) я проверял, this.radar() к сожалению не работает. И ладно radar(), grab() однозначно можно назвать методом, так как он не доступен для стреляющих ботов, но и с ним this не работает. Вообще в версии 0.2 методы строящихся зданий и ракеты превратили в процедуры, что мне совсем не понравилось. 27:00 ака 10) по умолчанию кидает, если програмно не отключить модуль ошибок. Для этого даже отдельная команда есть. 29:40 ака 12) еще есть F5 для быстрого сохранения и F2 для вызова энциклопедии. F1 для задания на уровень 30:20 ака 13) насколько я в курсе исходники стали доступны после просьб сообщества из Польши. Они полностью перелопатили все это и выложили в git. Исходники вообще валялись где-то архивом и git'а тогда еще не существовало. 37:15 ака 15) я имею ввиду для обучения. Здесь сразу влетают в ООП после алгоритмов, что несколько странно. На мой взгляд наиболее грамотный в плане подачи подход есть в школьной версии. Ее я брал за основу для своего курса. Многое конечно перелопатил и выкинул, но и многое добавил и расширил. Естественно каждой сам определяет кривую сложности и последовательность изучаемых тем, но здесь упражнения стоят в очень странном порядке. P.S. Если будут вопросы, то в описании канала есть ссылка на VK и discord. Также всегда можно глянуть видео на канале, хоть тогда я еще мало что понимал в игре. Но проходя ее многое понял, и потому тоже считаю эту игру одной из лучших для обучения.

  • @PlayCode1

    @PlayCode1

    Жыл бұрын

    ​@@SmileSickСпасибо за советы! Далее прокомментирую как умею: "для Enum насколько я понимаю, все числа должны располагаться по порядку без пропусков" - такого требования я не встречал, если Enum INT, то его кейсы могут быть A = 1; B = 10; и т.п. "я проверял, this.radar() к сожалению не работает" - видимо разработчики решили не усложнять ) хотя конечно, должно работать в двух вариантах. "Здесь сразу влетают в ООП после алгоритмов, что несколько странно", не хочу холиварить, но алгоритмы сильно переоценивают - в подавляющем большинстве случаев самые низкоуровневые из них не нужны программисту, который например пишет веб сайты, т.к. эту логику уже реализуют языки и знание пузырьковой сортировки ничем не поможет, кроме того ООП нагляднее и соответственно интереснее. Сейчас подумал, а что из теории алгоритмов можно было бы внедрить в эту игру, что сделало бы её лучше? Надо будет посмотреть Cee Bot, возможно мне станет понятнее идея. Я вижу ты глубоко в теме ) у меня к сожалению времени на это не хватит, но есть большое желание пройти кампанию максимально используя программирование, посмотрим, что из этого получится

  • @SmileSick

    @SmileSick

    Жыл бұрын

    @@PlayCode1 под алгоритмами я понимаю не конкретные алгоритмы типа пузырьковой сортировки, а просто набор команд, выполняющих поставленную задачу. Им например посвящена целая глава. Во второй главе появляются циклы, в третьей - вложенные циклы, и только в четвертой переменные (причем не object, а int и float). Point и object появляются только в 6 и 7 главе соответственно сразу после счетного цикла for. В своем курсе я их объединил в тему сложных переменных (классов), но идут они в той же последовательности. Из Ceebot советую у меня глянуть плейлист Ceebot4School с их подходом, где я прохожу ее с использованием школьной тетради. Я правда отснял пока только 4 главы. Простое прохождение школьной версии целиком без использования рабочей тетради я оставил в плейлисте Ceebot4 начиная с 23 видео. Там можно просто просмотреть последовательность тем и сами упражнения без усложнений из тетради, но зато целиком. Для понимания подхода будет достаточно. По поводу в теме по данной игре, считаю, что достаточно. Хотя программирование знаю лишь в основах и было бы неплохо его подтянуть сильнее)) В общем расти есть куда. Но по игре вопросы задавать можно, помогу чем смогу.

  • @PlayCode1

    @PlayCode1

    Жыл бұрын

    @@SmileSick Ок, аналогично, если будут вопросы пиши в дискорд, которого у меня пока ещё нет ) но я над этим работаю

  • @PlayCode1
    @PlayCode1 Жыл бұрын

    Может быть кто-нибудь знает, как сделать так, что-бы при выборе разрешения в игре 1920х1080 16:9 игра "не растягивалась" а сохраняла aspect ratio? Из-за этого приходится использовать нестандартное разрешение для записи видео или оставить растянутый вариант?

  • @SmileSick

    @SmileSick

    Жыл бұрын

    я записываю в растянутом варианте и не вижу особой проблемы. Кто-то вообще игру не видел в оригинале и сравнить ему будет не с чем. Главное это идея.

Келесі