Как сделать легко и коротко нарисовать стенки для лабиринта в Python Turtle?

Максим Владимиров1

Новичок
Пользователь
Ноя 28, 2022
11
0
1
  1. Windows
  2. Python 3.9
  3. 22.2.2


Добрый вечер! Мне задали задание сделать лабиринт а Python! Я совсем не понимаю как нарисовать его стенки, поэтому предоставить код я не смогу! Может ли кто-то объяснить принцип работы или же нарисовать его? Его эскиз я вам скину ниже

labirints.jpg
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
простой пример использования, дальше, думаю, разберетесь

Python:
import turtle

turtle.right(90)  # поворот направо на 90 градусов
turtle.forward(100)  # движение вперед на 100 пикселей
turtle.left(90)  # поворот налево на 90 градусов
turtle.backward(100)  # движение назад на 100 пикселей

turtle.exitonclick()  # выход по клику мыши
 
  • Мне нравится
Реакции: Malenkey

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Доброе утро! Суть задания сделать лабиринт в Turtle по картинке которую я отправлял выше!

Python:
import turtle

turtle.right(90)  # поворот направо на 90 градусов
turtle.forward(100)  # движение вперед на 100 пикселей
turtle.left(90)  # поворот налево на 90 градусов
turtle.backward(100)  # движение назад на 100 пикселей

turtle.exitonclick()  # выход по клику мыши

Вот этот вариант рабочий и понятный! Но если рисовать лабиринт есть стенки которые уходят в середину и придётся тогда писать дорогу обратно чтоб продолжить рисовать! Коротко говоря на один такой лабиринт выйдет очень много строчек кода, а преподаватель скажет бардак. Вот и спрашиваю есть ли какой то более короткий вариант создания лабиринта? Может так называемой таблицей.
 

Максим Владимиров1

Новичок
Пользователь
Ноя 28, 2022
11
0
1
простой пример использования, дальше, думаю, разберетесь

Python:
import turtle

turtle.right(90)  # поворот направо на 90 градусов
turtle.forward(100)  # движение вперед на 100 пикселей
turtle.left(90)  # поворот налево на 90 градусов
turtle.backward(100)  # движение назад на 100 пикселей

turtle.exitonclick()  # выход по клику мыши
Добрый вечер! Спасибо за ответ, но есть ли метод чтобы стрелка вернулась обратно и начала рисовать дальше? Просто получается что данный метод очень долгий и думаю не совсем корректен, учитель скорее всего скажет бардак.. Возможно есть другой метод генерации определенного лабиринта?

видел в интернете метод с map, как то люди в код писали
'## ######'
'## ######'
'# ##
'###### ##

может им как-то просто я его не понимаю
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
метод очень долгий
Возьми уже готовую картинку лабиринта и вставь в окно! :p Или напиши ИИ (Искусственный Интеллект), который сам будет генерить тебе рандомный лабиринт! :geek: ИИ выполнит рутинную работу быстрее! Но тебе придется его тщательно разрабатывать и продумывать.
 

Максим Владимиров1

Новичок
Пользователь
Ноя 28, 2022
11
0
1
Возьми уже готовую картинку лабиринта и вставь в окно! :p Или напиши ИИ (Искусственный Интеллект), который сам будет генерить тебе рандомный лабиринт! :geek: ИИ выполнит рутинную работу быстрее! Но тебе придется его тщательно разрабатывать и продумывать.
Вариант с готовый картинкой точно не подойдет моему преподавателю, а про ИИ, я в нем полный ноль как в прочем и в самом Python
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
а про ИИ, я в нем полный ноль
Так ты напиши ИИ на базе модуля "turtle", который тебе порекомендовали выше! 👆
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Вариант с готовый картинкой точно не подойдет моему преподавателю, а про ИИ, я в нем полный ноль как в прочем и в самом Python
Можешь еще так:

Python:
from tkinter import *

root = Tk()
root.title('Labyrinth')
root.geometry("900x900+0+0")

color = 'black'
width = 6

canv_1 = Canvas(root,
           width = 900,
           height = 900,
           bg = 'lightblue',
           cursor = 'cross')
canv_1.grid(row = 0, column = 0, rowspan = 1, columnspan = 1)

canv_1.create_line(5, 5, 100, 5,
              fill = color,
              width = width)
canv_1.create_line(100, 5, 100, 200,
              fill = color,
              width = width)
canv_1.create_line(100, 200, 200, 200,
              fill = color,
              width = width)
canv_1.create_line(200, 200, 200, 150,
              fill = color,
              width = width)
canv_1.create_line(200, 150, 150, 150,
              fill = color,
              width = width)

root.mainloop()
canv_1.create_line(5, 5, 100, 5) - это координаты начальной и конечной точек линии. canv_1.create_line(X1, Y1, X2, Y2). X - это горизонтальная ось, Y - вертикальная. Для удобочитаемости... блин! 4olshoy_blen меня не поддержит! :ROFLMAO: можешь ставить дополнительные скобки:
canv_1.create_line((5, 5), (100, 5))
 
Последнее редактирование:

Максим Владимиров1

Новичок
Пользователь
Ноя 28, 2022
11
0
1
Можешь еще так:

Python:
from tkinter import *

root = Tk()
root.title('Labyrinth')
root.geometry("900x900+0+0")

color = 'black'
width = 6

canv_1 = Canvas(root,
           width = 900,
           height = 900,
           bg = 'lightblue',
           cursor = 'cross')
canv_1.grid(row = 0, column = 0, rowspan = 1, columnspan = 1)

canv_1.create_line(5, 5, 100, 5,
              fill = color,
              width = width)
canv_1.create_line(100, 5, 100, 200,
              fill = color,
              width = width)
canv_1.create_line(100, 200, 200, 200,
              fill = color,
              width = width)
canv_1.create_line(200, 200, 200, 150,
              fill = color,
              width = width)
canv_1.create_line(200, 150, 150, 150,
              fill = color,
              width = width)

root.mainloop()
canv_1.create_line(5, 5, 100, 5) - это координаты начальной и конечной точек линии. canv_1.create_line(X1, Y1, X2, Y2). X - это горизонтальная ось, Y - вертикальная. Для удобочитаемости... блин! 4olshoy_blen меня не поддержит! :ROFLMAO: можешь ставить дополнительные скобки:
canv_1.create_line((5, 5), (100, 5))
Не работает чего-то
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Добрый вечер! Спасибо за ответ, но есть ли метод чтобы стрелка вернулась обратно и начала рисовать дальше? Просто получается что данный метод очень долгий и думаю не совсем корректен, учитель скорее всего скажет бардак.. Возможно есть другой метод генерации определенного лабиринта?

видел в интернете метод с map, как то люди в код писали
'## ######'
'## ######'
'# ##
'###### ##

может им как-то просто я его не понимаю
я не понимаю, вам нужно через turtle? или в выводе сделать лабиринт? скиньте задание...
можно через циклы сделать это, но вам надо по вашей картинке, в общем не понятно ничего

где вы что видели, скиньте ссылку
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Не работает чего-то
Что не работает? Какая ошибка?
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
В приложенном архиве два скрипта. Вот видео демонстрация: Youtube
1) Запускаешь скрипт "canvas_draw.py". Рисуешь свой лабиринт. Когда закончишь, нажимаешь кнопку "Finish". Она копирует сгенерированный код в буфер обмена.
2) Закрываешь скрипт "canvas_draw.py"
3) Вставь скопированный код в скрипт "canvas_template.py" между комментариями "# ВСТАВЬ КОД СЮДА!"
4) Сохрани и запусти скрипт "canvas_draw.py". Он нарисует тебе твой лабиринт.
 

Вложения

  • Desktop.zip
    2 КБ · Просмотры: 0

Максим Владимиров1

Новичок
Пользователь
Ноя 28, 2022
11
0
1
я не понимаю, вам нужно через turtle? или в выводе сделать лабиринт? скиньте задание...
можно через циклы сделать это, но вам надо по вашей картинке, в общем не понятно ничего

где вы что видели, скиньте ссылку
Доброе утро! Суть задания сделать лабиринт в Turtle по картинке которую я отправлял выше!

Python:
import turtle

turtle.right(90)  # поворот направо на 90 градусов
turtle.forward(100)  # движение вперед на 100 пикселей
turtle.left(90)  # поворот налево на 90 градусов
turtle.backward(100)  # движение назад на 100 пикселей

turtle.exitonclick()  # выход по клику мыши

Вот этот вариант рабочий и понятный! Но если рисовать лабиринт есть стенки которые уходят в середину и придётся тогда писать дорогу обратно чтоб продолжить рисовать! Коротко говоря на один такой лабиринт выйдет очень много строчек кода, а преподаватель скажет бардак. Вот и спрашиваю есть ли какой то более короткий вариант создания лабиринта? Может так называемой таблицей.
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
! Но если рисовать лабиринт есть стенки которые уходят в середину и придётся тогда писать дорогу обратно чтоб продолжить рисовать!
А ты преподавателю скажи, что в "tkinter canvas" удобнее рисовать! Там ты рисуешь каждый отрезок по координатам 2-ух точек. И не надо идти туда, потом обратно сюда. 4 цифры ввел - на тебе отрезок! 4 цифры - отрезок, 4 цифры - отрезок. И никаких углов поворота как в "turtle" указывать не надо.
 

Форум IT Специалистов