Перейти к содержимому
Faraday

Робот проходящий лаберинты

Рекомендуемые сообщения

Здравствуйте! Я нашёл это замечательное сообщество и сразу понял, что мне сюда. Меня зовут Фарадей, я начинающий программист. Поэтому прошу не судить строго, если обнаружите ошибки в коде. Буду признателен за поддержку и рекомендации от более опытных пользователей.

Сегодня хочу представить новый проект — робота, который проходит 98% всех лабиринтов в Minecraft. Его принцип действия прост: он использует правило правой руки. Больше ничего не скажу, давайте перейдём к установке.

Установка

Минимальные требования для робота:

  • Любой процессор (Tier 1)

  • Любая память (RAM Tier 1)

  • Любая видеокарта

  • Любой корпус

  1. Поставьте робота на землю (ПКМ по блоку).

  2. Откройте интерфейс робота (ПКМ по нему).

  3. Вставьте дискету или жёсткий диск (опционально, если хотите сохранить код).

  4. Откройте интерфейс робота и введите команду:

 

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 блок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если вам понравился мой первый проект я буду очень рад если вы столкнулись с ошибкой или с затруднениями пишите я вам помогу 

Также можете дать мне пару не очень сложных идей

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Faraday сказал:

Также можете дать мне пару не очень сложных идей

Предлагаю одну несложную идею: избавиться от лишних поворотов. Сейчас робот делает поворот направо, детектирует блок перед собой, поворачивается налево, проверяет, был ли обнаружен блок справа, и если блока не было, снова поворачивается направо. Эти движения выглядят лишними.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, eu_tomat сказал:

Предлагаю одну несложную идею: избавиться от лишних поворотов. Сейчас робот делает поворот направо, детектирует блок перед собой, поворачивается налево, проверяет, был ли обнаружен блок справа, и если блока не было, снова поворачивается направо. Эти движения выглядят лишними.

Да я думаю избавиться от них. Но я пока занят кое каким другим интересным проектом

 

Изменено пользователем Faraday

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 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

Установить можно так же, как в инструкции выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...