Faraday 0 Опубликовано: 1 мая Здравствуйте! Я нашёл это замечательное сообщество и сразу понял, что мне сюда. Меня зовут Фарадей, я начинающий программист. Поэтому прошу не судить строго, если обнаружите ошибки в коде. Буду признателен за поддержку и рекомендации от более опытных пользователей. Сегодня хочу представить новый проект — робота, который проходит 98% всех лабиринтов в Minecraft. Его принцип действия прост: он использует правило правой руки. Больше ничего не скажу, давайте перейдём к установке. Установка Минимальные требования для робота: Любой процессор (Tier 1) Любая память (RAM Tier 1) Любая видеокарта Любой корпус Поставьте робота на землю (ПКМ по блоку). Откройте интерфейс робота (ПКМ по нему). Вставьте дискету или жёсткий диск (опционально, если хотите сохранить код). Откройте интерфейс робота и введите команду: edit maze.lua Откроется текстовый редактор. Вставьте этот код: local robot = require("robot") local function checkRight() robot.turnRight() local obstacle = robot.detect() robot.turnLeft() return obstacle end local function checkLeft() robot.turnLeft() local obstacle = robot.detect() robot.turnRight() return obstacle end while true do if not checkRight() then robot.turnRight() robot.forward() elseif not robot.detect() then robot.forward() else robot.turnLeft() end os.sleep(0.2) end Сохраните файл: Нажмите Ctrl + S → Enter. Закройте редактор: нажмите Ctrl + W. В интерфейсе робота введите: maze.lua Как остановить дрона ? введите: kill Это принудительно остановит программу. Позиционирование: - Поставьте робота лицом к входу в лабиринт. - Убедитесь, что перед ним нет блоков (должен быть воздух). Устранение неполадок Робот не двигается: - Проверьте, нет ли блоков перед ним (используйте robot.forward() в консоли). - Убедитесь, что код сохранён как maze.lua. Программа вылетает: - Убедитесь, что в лабиринте нет лестниц или полупрозрачных блоков. - Все стены должны быть высотой 1 блок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Faraday Автор темы 0 Опубликовано: 1 мая Если вам понравился мой первый проект я буду очень рад если вы столкнулись с ошибкой или с затруднениями пишите я вам помогу Также можете дать мне пару не очень сложных идей Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 158 Опубликовано: 1 мая 6 часов назад, Faraday сказал: Также можете дать мне пару не очень сложных идей Предлагаю одну несложную идею: избавиться от лишних поворотов. Сейчас робот делает поворот направо, детектирует блок перед собой, поворачивается налево, проверяет, был ли обнаружен блок справа, и если блока не было, снова поворачивается направо. Эти движения выглядят лишними. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Faraday Автор темы 0 Опубликовано: 2 мая (изменено) 10 часов назад, eu_tomat сказал: Предлагаю одну несложную идею: избавиться от лишних поворотов. Сейчас робот делает поворот направо, детектирует блок перед собой, поворачивается налево, проверяет, был ли обнаружен блок справа, и если блока не было, снова поворачивается направо. Эти движения выглядят лишними. Да я думаю избавиться от них. Но я пока занят кое каким другим интересным проектом Изменено 2 мая пользователем Faraday Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Faraday Автор темы 0 Опубликовано: 31 июля В 01.05.2025 в 23:35, eu_tomat сказал: Предлагаю одну несложную идею: избавиться от лишних поворотов. Сейчас робот делает поворот направо, детектирует блок перед собой, поворачивается налево, проверяет, был ли обнаружен блок справа, и если блока не было, снова поворачивается направо. Эти движения выглядят лишними. Здравствуйте! Хочу сообщить, что я вернулся к работе над моим проектом и успел внести некоторые улучшения в алгоритм движения робота. У меня готов новый вариант кода, который: Сокращает количество поворотов — робот больше не делает лишние движения направо-налево для проверки пространства Оптимизирует процесс — алгоритм стал более эффективным и компактным по сравнению с предыдущей версией Однако важно отметить, что новая версия имеет определённое ограничение: поскольку алгоритм больше не использует правило правой руки, могут возникнуть сложности с прохождением некоторых типов лабиринтов. Существует вероятность зацикливания в определённых конфигурациях лабиринта. Я подготовил обновлённый код и готов поделиться им с вами для тестирования и обсуждения возможных решений по устранению проблемы с зацикливанием. С уважением, [Фарадей] Новый код: local robot = require("robot") while true do -- Основной цикл с пошаговым движением if not robot.detect() then -- Двигаться вперед, если нет препятствия robot.forward() else -- Если впереди стена - использовать стратегию правой руки robot.turnRight() while robot.detect() do -- Поворачивать налево, пока не найдется проход robot.turnLeft() end -- Когда проход найден - двигаться в этом направлении robot.forward() end os.sleep(0.2) end Установить можно так же, как в инструкции выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах