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

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 级别来强制 turtle 执行此操作。虽然我们认为乌龟 绘制 的东西是死墨水(而不是有形状的乌龟或邮票),但从 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 实现。

我不确定这将如何放大(或更可能缩小到像素大小的对象),但应该让您了解如果您愿意接受 turtle 的 tkinter 基础,或者简单地使用 tkinter,有什么可能本身。