3

我想用python的海龟来有效地模拟一个乐高机器人。乐高机器人能够对机器人所在的颜色进行采样。考虑到这一点,我想创建一个背景迷宫,让机器人在迷宫中找到自己的路。我希望将其用于 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()

我确实注意到,当我运行代码时,海龟的“轨迹”位于矩形后面,这表明存在分层问题。

4

2 回答 2

0

您可以询问 Canvas 在 Turtle 下方有哪些项目并报告您感兴趣的任何项目的填充颜色。例如,您可以将要为迷宫绘制的所有矩形添加到矩形列表中,并使用该列表确定乌龟是否在矩形中。然后报告颜色。

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 和许多其他语言中,大写表示类本身,而不是它的实例)。我在上面的代码中将其单独保留,因此您可以通过对代码的最小更改来尝试修复。

于 2015-12-18T17:07:08.737 回答
0

从文档所说的关于turtle的内容来看,它没有任何功能来获取当前位置的颜色。我的方法是使用二进制地图作为步行指示器,但这可能太静态而无法模拟乐高机器人环境。

但是,如果您在 Windows 上,则可以使用 win32gui 库,该库将为您提供屏幕上像素的像素颜色(是否可以通过 X 和 Y 坐标获取屏幕上特定像素的颜色?) . turtle.hideturtle()将其与 and结合turtle.pos()并为父窗口添加一些偏移量,您可能会获得所需的功能。如果这对您有用,我建议您创建自己的模块来提供此功能,以便学生可以专注于解决迷宫问题而不是 windows api。

于 2015-12-18T15:51:02.003 回答