Может ли черепаха питона пробовать цвет фона?

Я хотел бы использовать черепах питона для эффективной симуляции лего-робота. Роботы 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 и многих других языках верхний регистр означает сам класс, а не его экземпляр). Я оставил это в своем коде выше, чтобы вы могли попробовать это исправление с минимальными изменениями в вашем коде.

Другие вопросы по тегам