繁体   English   中英

你能让 Python Turtle 检测它是否接触到特定颜色吗?

[英]Can you make a Python Turtle detect if it's touching a specific colour?

海龟是否有可能在不使用网格系统的情况下检测它是否正在触摸特定颜色(即为每个单元分配一种颜色。)我正在尝试创建一个生物将导航并与之交互的像素化世界,取决于它所接触的瓷砖类型,这将根据瓷砖的颜色来确定。

您可以尝试在 Python 中复制此 Scratch 项目的最佳方法是使用 python 框架 pygame 的基于网格的系统。

这意味着您需要对背景、用户、界面、命令、冲突进行编码。 一个更大的壮举,由您自己完成。

我的文件表明这将是一个很好的入门视频系列:

设置: https://youtu.be/VO8rTszcW4s

创建游戏: https://youtu.be/3UxnelT9aCo

我希望你的努力是有成果的!

我们可以通过下降到 tkinter 级别来强制海龟执行此操作。 尽管我们认为海龟绘制的东西是死墨水(与成形的海龟或印章相反),但从 tkinter 的角度来看,它们实际上是活墨水——这就是为什么我们可以清除单个海龟的绘图并调用undo() . 这是一个执行此操作的脆弱示例:

from turtle import Screen, Turtle
from random import random

WIDTH, HEIGHT = 800, 800
DIAMETER = 200

def chameleon(x, y):
    turtle.ondrag(None)
    overlapping = canvas.find_overlapping(x, -y, x, -y)  # adjust to tkinter coordinates

    if overlapping:
        color = canvas.itemcget(overlapping[0], "fill")

        if color:
            turtle.fillcolor(color)

    turtle.goto(x, y)
    turtle.ondrag(chameleon)

screen = Screen()
screen.setup(WIDTH, HEIGHT)
canvas = screen.getcanvas()

turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.penup()

for x in range(-WIDTH//2, WIDTH//2, DIAMETER):
    for y in range(-HEIGHT//2, HEIGHT//2, DIAMETER):
        turtle.goto(x + DIAMETER/2, y + DIAMETER/2)
        color = random(), random(), random()
        turtle.dot(DIAMETER - 1, color)

turtle.home()
turtle.shape('turtle')
turtle.shapesize(2)
turtle.showturtle()
turtle.ondrag(chameleon)

screen.mainloop()

当您在屏幕上拖动海龟时,它会从屏幕上绘制的内容中获取颜色。 这不是你看到的透明乌龟,它正在阅读墨水,当你在背景上移动时,你可以自己确认。 此代码可能是特定于海龟实现的。

我不确定这将如何放大(或更可能缩小到像素大小的对象),但应该让你知道如果你愿意接受turtle的 tkinter 基础,或者只是使用 tkinter 本身会发生什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM