Может ли черепаха питона пробовать цвет фона?
Я хотел бы использовать черепах питона для эффективной симуляции лего-робота. Роботы Lego имеют возможность выбрать цвет, на котором расположен робот. Имея это в виду, я хотел бы создать фоновый лабиринт и сделать так, чтобы робот нашел свой путь через лабиринт. Я надеюсь использовать это с учащимися 10-го класса.
Пока что я могу создать простой холст, используя tkinter и с цветным прямоугольником на этом холсте. Я могу разместить черепаху на холсте и заставить их сосуществовать. Черепаха может быть размещена на цветном прямоугольнике.
Теперь мне просто нужно каким-то образом получить образец цвета. Это может быть сделано путем определения положения черепахи, а затем выборки этой координаты. Но я застрял в этой точке.
Вот мой код до сих пор:
from tkinter import Tk, Canvas, Frame, BOTH
import turtle
top = Tk()
C = Canvas(top, height=500, width=600)
Doug = turtle.RawTurtle(C)
rectangle = C.create_rectangle(30, 10, 120, 80, outline="#fb0", fill="#fb0")
Doug.fd(50)
Doug.rt(90)
Doug.fd(50)
C.pack(fill=BOTH, expand=1)
top.mainloop()
Я замечаю, что когда я запускаю код, "след" черепахи находится за прямоугольником, что наводит на мысль о расслоении.
2 ответа
Из того, что в документации говорится о черепахе, у нее нет никакой функции, чтобы получить цвет текущей позиции. Мой подход заключается в том, чтобы использовать бинарную карту в качестве индикатора ходьбы, но это, вероятно, слишком статично, чтобы моделировать среду робота lego.
Однако, если вы работаете в Windows, вы можете использовать библиотеку win32gui, которая даст вам пиксельный цвет из пикселя на вашем экране ( возможно ли получить цвет определенного пикселя на экране с его координатами X и Y?), Объедините это с turtle.hideturtle()
а также turtle.pos()
и добавьте некоторые смещения для родительского окна, и вы, вероятно, получите желаемую функциональность. Если это работает для вас, я предлагаю вам создать свой собственный модуль, обеспечивающий эту функциональность, чтобы студенты могли сосредоточиться на решении лабиринта, а не на windows apis.
Вы можете спросить Canvas о том, какие элементы находятся под черепахой, и сообщить цвет заливки любого интересующего вас объекта. Например, вы можете добавить все прямоугольники, которые вы собираетесь нарисовать для лабиринта, в список прямоугольников и использовать этот список. определить, находится ли черепаха в прямоугольнике. Затем сообщите цвет.
from tkinter import Tk, Canvas, Frame, BOTH
import turtle
top = Tk()
C = Canvas(top, height=500, width=600)
Doug = turtle.RawTurtle(C)
rectangles = []
rectangles.append(C.create_rectangle(30, 10, 120, 80, outline="#fb0", fill="#fb0"))
Doug.fd(50)
Doug.rt(90)
Doug.fd(50)
# For some reason Doug's y-coord is opposite what Canvas uses, so * -1 to fix it...
overlapping = C.find_overlapping(Doug.xcor(), Doug.ycor() * -1, Doug.xcor(), Doug.ycor() * -1)
for item_id in overlapping:
if item_id in rectangles:
print(C.itemcget(item_id, "fill"))
C.pack(fill=BOTH, expand=1)
top.mainloop()
Просто как последняя мысль, но не имеет отношения к вопросу. Я настоятельно рекомендую использовать строчные имена для создания экземпляров объектов (замените "C" на "canvas" и "Doug" на "doug"). В python и многих других языках верхний регистр означает сам класс, а не его экземпляр). Я оставил это в своем коде выше, чтобы вы могли попробовать это исправление с минимальными изменениями в вашем коде.