首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >巨蟒触碰迷宫的墙壁

巨蟒触碰迷宫的墙壁
EN

Stack Overflow用户
提问于 2021-10-11 15:28:27
回答 1查看 353关注 0票数 0

当海龟接触到我迷宫的墙壁时,我需要用Python打印“碰撞”字样。这是我的代码:

代码语言:javascript
运行
复制
maze=turtle.Turtle()
maze.speed(10)
maze.penup()
maze.goto(-12.5, -175)
maze.pendown()
maze.begin_fill()
maze.goto(-12.5, -100)
maze.goto(37.5, -100)
maze.goto(37.5, -75)
maze.goto(-112.5, -75)
maze.goto(-112.5, -37.5)
maze.goto(-125, -37.5)
maze.goto(-125, -87.5)
maze.goto(-87.5, -87.5)
maze.goto(-87.5, -137.5)
maze.goto(-75, -137.5)
maze.goto(-75, -100)
maze.goto(-50, -100)
maze.goto(-50, -162.5)
maze.goto(-150, -162.5)
maze.goto(-150, -137.5)
maze.goto(-112.5, -137.5)
maze.goto(-112.5, -112.5)
maze.goto(-162.5, -112.5)
maze.goto(-162.5, -87.5)
maze.goto(-150, -87.5)
maze.goto(-150, -37.5)
maze.goto(-162.5, -37.5)
maze.goto(-162.5, 12.5)
maze.goto(-137.5, 12.5)
maze.goto(-137.5, -12.5)
maze.goto(-112.5, -12.5)
maze.goto(-112.5, 12.5)
maze.goto(-87.5, 12.5)
maze.goto(-87.5, -50)
maze.goto(-62.5, -50)
maze.goto(-62.5, 25)
maze.goto(-162.5, 25)
maze.goto(-162.5, 137.5)
maze.goto(-112.5, 137.5)
maze.goto(-112.5, 162.5)
maze.goto(-87.5, 162.5)
maze.goto(-87.5, 137.5)
maze.goto(-25, 137.5)
maze.goto(-25, 87.5)
maze.goto(12.5, 87.5)
maze.goto(12.5, 112.5)
maze.goto(37.5, 112.5)
maze.goto(37.5, 87.5)
maze.goto(62.5, 87.5)
maze.goto(62.5, 125)
maze.goto(-12.5, 125)
maze.goto(-12.5, 175)
maze.goto(-175, 175)
maze.goto(-175, -175)
maze.goto(-12.5, -175)
maze.end_fill()
maze.penup()
maze.goto(12.5, -175)
maze.pendown()
maze.begin_fill()
maze.goto(12.5, -125)
maze.goto(87.5, -125)
maze.goto(87.5, -162.5)
maze.goto(150, -162.5)
maze.goto(150, -125)
maze.goto(162.5, -125)
maze.goto(162.5, -100)
maze.goto(125, -100)
maze.goto(125, -137.5)
maze.goto(112.5, -137.5)
maze.goto(112.5, -100)
maze.goto(62.5, -100)
maze.goto(62.5, -75)
maze.goto(150, -75)
maze.goto(150, -12.5)
maze.goto(162.5, -12.5)
maze.goto(162.5, 12.5)
maze.goto(125, 12.5)
maze.goto(125, 37.5)
maze.goto(150, 37.5)
maze.goto(150, 150)
maze.goto(125, 150)
maze.goto(125, 112.5)
maze.goto(100, 112.5)
maze.goto(100, 87.5)
maze.goto(125, 87.5)
maze.goto(125, 62.5)
maze.goto(100, 62.5)
maze.goto(100, 12.5)
maze.goto(37.5, 12.5)
maze.goto(37.5, -50)
maze.goto(-37.5, -50)
maze.goto(-37.5, -25)
maze.goto(25, -25)
maze.goto(25, 25)
maze.goto(0, 25)
maze.goto(0, 0)
maze.goto(-37.5, 0)
maze.goto(-37.5, 50)
maze.goto(-87.5, 50)
maze.goto(-87.5, 75)
maze.goto(-62.5, 75)
maze.goto(-62.5, 100)
maze.goto(-112.5, 100)
maze.goto(-112.5, 50)
maze.goto(-137.5, 50)
maze.goto(-137.5, 112.5)
maze.goto(-50, 112.5)
maze.goto(-50, 62.5)
maze.goto(12.5, 62.5)
maze.goto(12.5, 37.5)
maze.goto(37.5, 37.5)
maze.goto(37.5, 62.5)
maze.goto(87.5, 62.5)
maze.goto(87.5, 150)
maze.goto(12.5, 150)
maze.goto(12.5, 175)
maze.goto(175, 175)
maze.goto(175, -175)
maze.goto(12.5, -175)
maze.end_fill()
maze.penup()
maze.goto(62.5, -50)
maze.pendown()
maze.begin_fill()
maze.goto(125, -50)
maze.goto(125, -12.5)
maze.goto(62.5, -12.5)
maze.goto(62.5, -50)
maze.end_fill()
maze.ht()

myPen=turtle.Turtle()
myPen.penup()
myPen.goto(0,-180)
myPen.pendown()
myPen.color("#DB148E")
myPen.width(4)
myPen.left(90)

#Start of maze

myPen.forward(70)
myPen.right(90)

from turtle import Turtle, Screen

wn = Screen()


speed = 0.5
myPen.speed(10)
myPen.ht()

def travel():
    myPen.forward(speed)
    wn.ontimer(travel, 10)

wn.onkey(lambda: myPen.setheading(90), 'w')
wn.onkey(lambda: myPen.setheading(180), 'a')
wn.onkey(lambda: myPen.setheading(0), 'd')
wn.onkey(lambda: myPen.setheading(270), 's')

wn.listen()

travel()



wn.mainloop()

现在发生的事情是,我可以控制乌龟的W,A,S,D和画迷宫,但我可以只是通过迷宫,它什么也不做。我在想,可以通过检测海龟的位置,或者检测海龟的颜色来做到这一点。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-11 19:03:09

一般情况下,我不会给你带来好消息。但是,因为你把你的迷宫创建成了一个由三个封闭多边形组成的集合:

有一个相对容易的解决办法!首先,从极客为极客写的一篇文章“如何检查给定的点是在多边形内部还是外部?”下载Python代码。将这段代码保存到一个文件中,我将称之为"poly_util.py“,但您可以任意调用它。编辑此文件以删除代码:

代码语言:javascript
运行
复制
# Driver code
if __name__ == '__main__':

以及随之而来的一切。我们不需要这些代码,而且它是错误的缩进代码。接下来,编辑您自己的代码来导入这个文件,然后用begin_fill()end_poly()调用包装您的begin_poly()end_poly()段,这样我们就可以用get_poly()捕获多边形。

代码语言:javascript
运行
复制
from turtle import Screen, Turtle
from poly_util import is_inside_polygon

screen = Screen()

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

maze.goto(-12.5, -175)

maze.pendown()
maze.begin_fill()
maze.begin_poly()

maze.goto(-12.5, -100)
maze.goto(37.5, -100)
maze.goto(37.5, -75)
maze.goto(-112.5, -75)
maze.goto(-112.5, -37.5)
maze.goto(-125, -37.5)
maze.goto(-125, -87.5)
maze.goto(-87.5, -87.5)
maze.goto(-87.5, -137.5)
maze.goto(-75, -137.5)
maze.goto(-75, -100)
maze.goto(-50, -100)
maze.goto(-50, -162.5)
maze.goto(-150, -162.5)
maze.goto(-150, -137.5)
maze.goto(-112.5, -137.5)
maze.goto(-112.5, -112.5)
maze.goto(-162.5, -112.5)
maze.goto(-162.5, -87.5)
maze.goto(-150, -87.5)
maze.goto(-150, -37.5)
maze.goto(-162.5, -37.5)
maze.goto(-162.5, 12.5)
maze.goto(-137.5, 12.5)
maze.goto(-137.5, -12.5)
maze.goto(-112.5, -12.5)
maze.goto(-112.5, 12.5)
maze.goto(-87.5, 12.5)
maze.goto(-87.5, -50)
maze.goto(-62.5, -50)
maze.goto(-62.5, 25)
maze.goto(-162.5, 25)
maze.goto(-162.5, 137.5)
maze.goto(-112.5, 137.5)
maze.goto(-112.5, 162.5)
maze.goto(-87.5, 162.5)
maze.goto(-87.5, 137.5)
maze.goto(-25, 137.5)
maze.goto(-25, 87.5)
maze.goto(12.5, 87.5)
maze.goto(12.5, 112.5)
maze.goto(37.5, 112.5)
maze.goto(37.5, 87.5)
maze.goto(62.5, 87.5)
maze.goto(62.5, 125)
maze.goto(-12.5, 125)
maze.goto(-12.5, 175)
maze.goto(-175, 175)
maze.goto(-175, -175)
maze.goto(-12.5, -175)

maze.end_poly()
maze.end_fill()

poly_left = maze.get_poly()

maze.penup()
maze.goto(12.5, -175)
maze.pendown()

maze.begin_fill()
maze.begin_poly()

maze.goto(12.5, -125)
maze.goto(87.5, -125)
maze.goto(87.5, -162.5)
maze.goto(150, -162.5)
maze.goto(150, -125)
maze.goto(162.5, -125)
maze.goto(162.5, -100)
maze.goto(125, -100)
maze.goto(125, -137.5)
maze.goto(112.5, -137.5)
maze.goto(112.5, -100)
maze.goto(62.5, -100)
maze.goto(62.5, -75)
maze.goto(150, -75)
maze.goto(150, -12.5)
maze.goto(162.5, -12.5)
maze.goto(162.5, 12.5)
maze.goto(125, 12.5)
maze.goto(125, 37.5)
maze.goto(150, 37.5)
maze.goto(150, 150)
maze.goto(125, 150)
maze.goto(125, 112.5)
maze.goto(100, 112.5)
maze.goto(100, 87.5)
maze.goto(125, 87.5)
maze.goto(125, 62.5)
maze.goto(100, 62.5)
maze.goto(100, 12.5)
maze.goto(37.5, 12.5)
maze.goto(37.5, -50)
maze.goto(-37.5, -50)
maze.goto(-37.5, -25)
maze.goto(25, -25)
maze.goto(25, 25)
maze.goto(0, 25)
maze.goto(0, 0)
maze.goto(-37.5, 0)
maze.goto(-37.5, 50)
maze.goto(-87.5, 50)
maze.goto(-87.5, 75)
maze.goto(-62.5, 75)
maze.goto(-62.5, 100)
maze.goto(-112.5, 100)
maze.goto(-112.5, 50)
maze.goto(-137.5, 50)
maze.goto(-137.5, 112.5)
maze.goto(-50, 112.5)
maze.goto(-50, 62.5)
maze.goto(12.5, 62.5)
maze.goto(12.5, 37.5)
maze.goto(37.5, 37.5)
maze.goto(37.5, 62.5)
maze.goto(87.5, 62.5)
maze.goto(87.5, 150)
maze.goto(12.5, 150)
maze.goto(12.5, 175)
maze.goto(175, 175)
maze.goto(175, -175)
maze.goto(12.5, -175)

maze.end_poly()
maze.end_fill()

poly_right = maze.get_poly()

maze.penup()
maze.goto(62.5, -50)
maze.pendown()

maze.begin_fill()
maze.begin_poly()

maze.goto(125, -50)
maze.goto(125, -12.5)
maze.goto(62.5, -12.5)
maze.goto(62.5, -50)

maze.end_poly()
maze.end_fill()

poly_inner = maze.get_poly()

pen = Turtle()
pen.hideturtle()
pen.speed('fastest')
pen.color("#DB148E")
pen.width(4)

pen.penup()
pen.sety(-180)
pen.pendown()

pen.left(90)
pen.forward(70)
pen.right(90)

#  Start of maze

distance = 0.5

def travel():
    pen.forward(distance)

    position = pen.position()

    if is_inside_polygon(poly_left, position) or is_inside_polygon(poly_right, position) or is_inside_polygon(poly_inner, position):
        pen.undo()

    screen.ontimer(travel, 50)

screen.onkey(lambda: pen.setheading(90), 'w')
screen.onkey(lambda: pen.setheading(180), 'a')
screen.onkey(lambda: pen.setheading(0), 'd')
screen.onkey(lambda: pen.setheading(270), 's')

screen.listen()

travel()

screen.mainloop()

现在,检测冲突只是在三个多边形组件上调用is_inside_polygon()的问题,如上面的代码所示。这支笔会停在墙上,直到你转身和/或向后向合法方向移动为止。代码可能需要一些微调,但由于您使用多边形,这是一个相对容易的修复通常是一个困难的问题。

确保这个伟大的多边形库归功于。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69528771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档