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

タートルの下にある項目をキャンバスに問い合わせて、関心のある項目の塗りつぶしの色を報告できます。たとえば、迷路用に描画するすべての長方形を長方形リストに追加し、そのリストを使用できます。タートルが長方形内にあるかどうかを判断します。次に、色を報告します。

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 に答える