【问题标题】:Can you make a Python Turtle detect if it's touching a specific colour?你可以让 Python Turtle 检测它是否接触到特定颜色吗?
【发布时间】:2021-03-26 15:24:56
【问题描述】:

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

【问题讨论】:

  • 欢迎使用 StackOverflow,请发布您已经在使用的代码,以便我们帮助您解决问题。

标签: python turtle-graphics python-turtle


【解决方案1】:

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

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

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

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

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

希望你的努力成果丰硕!

【讨论】:

    【解决方案2】:

    我们可以通过下降到 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 本身,会发生什么。

    【讨论】:

      猜你喜欢
      • 2016-03-25
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 2014-05-01
      • 2021-06-25
      • 2015-04-10
      • 2011-07-17
      相关资源
      最近更新 更多