首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何列出海龟运动的坐标?

如何列出海龟运动的坐标?
EN

Stack Overflow用户
提问于 2020-08-22 14:02:37
回答 1查看 353关注 0票数 0

我是蟒蛇的初学者,我正在和海龟玩一个小迷宫游戏。游戏使用相对像素(可能不是一个官方术语)--在这里,它不是给出一个以像素为单位的移动值,而是使用屏幕分辨率来确定它需要移动的数量(在代码行33-44中)。

我的屏幕分辨率是1366x768-像素测量是从这个开始的。我想跟踪所有的坐标,海龟移动通过,并将它们全部添加到一个名单的封闭的其他海龟的和弦。

我如何测量海龟mak1通过的所有弦?(最好不要为每一个动作循环)谢谢!

PS。我的代码可能没有效率-我不太擅长这个

代码语言:javascript
复制
for i in range (1):
    import turtle
    import random
    import math
    import pyautogui
    import keyboard
    import ctypes
    import time


#turtle def
for i in range(1):
    turtle.getscreen().bgcolor('black')
    mak1 = turtle.Turtle()
    mak2 = turtle.Turtle()
    wn = turtle.Screen()
    pacman = turtle.Turtle()
    mak1.color('white')
    mak2.color('white')
    pacman.color('yellow')
    mak1.hideturtle()
    mak1.speed(0)
    mak2.hideturtle()
    mak2.speed(0)
    mak1.width(10)
    mak2.width(10)
    pacman.shape('circle')
    pacman.shapesize(stretch_wid = 1.5, stretch_len = 1.5)


#GetAndSetScreenRes - line 33
for i in range(1):
    user32 = ctypes.windll.user32
    width = user32.GetSystemMetrics(0)
    height = user32.GetSystemMetrics(1)
    wn.setup(width, height)

#values
for i in range(1):
    pix50 = (width/26)
    pix100 = (width/13)
    pix200 = (width/(13/2))
    blocked_coords = [] # line 44


#make the maze - mak1
for i in range (1):
    mak1.penup()
    mak1.fd(pix100)
    mak1.pendown()
    mak1.lt(90)
    mak1.bk(pix100)
    #innersquare
    for i in range(4):
        if (i == 1) or (i == 3):
            mak1.fd(pix50)
            mak1.penup()
            mak1.fd(pix100)
            mak1.pendown()
            mak1.fd(pix50)
        else:
            mak1.fd(pix200)
        mak1.lt(90)
    mak1.fd(pix100)
    mak1.rt(90)
    #right mid
    for i in range(1):
        mak1.penup()
        mak1.rt(90)
        mak1.fd(pix100)
        mak1.lt(90)
        mak1.fd(pix100)
        mak1.pendown()
        mak1.fd(pix100)
        mak1.rt(90)
        for i in range(2):
            mak1.fd(pix200)
            mak1.lt(90)
        mak1.fd(pix100)
        mak1.penup()
        mak1.lt(90)
        mak1.fd(pix100)
        mak1.rt(90)
        mak1.pendown()
        mak1.fd(pix100)
    #toppie
    for i in range(1):
        mak1.penup()
        mak1.goto(0, 0)
        mak1.seth(90)
        mak1.fd(pix200)
        mak1.pendown()
        mak1.fd(pix50)
        mak1.lt(90)
        mak1.fd(pix50)
        mak1.bk(pix100)
        mak1.penup()
        mak1.fd(pix200)
        mak1.pendown()
        mak1.fd(pix50)
        mak1.lt(90)
        mak1.fd(pix50)
        mak1.rt(90)
        mak1.fd(50)
        mak1.penup()
        mak1.fd(pix200)
        mak1.pendown()
        mak1.fd(pix100)
        mak1.penup()
        mak1.bk(pix200)
        mak1.lt(90)
        mak1.pendown()
        mak1.fd(pix100)
        mak1.penup()
        mak1.goto(0, 0)
        mak1.seth(0)
    #cubey
    for i in range (1):
        mak1.fd (pix100)
        mak1.pendown()
        mak1.fd(pix200)
        mak1.lt(90)
        mak1.fd(pix100)
        mak1.penup()
        mak1.lt(90)
        mak1.fd(pix100)
        mak1.rt(90)
        mak1.pendown()
        mak1.fd(pix100)
        mak1.penup()
        mak1.bk(pix100)
        mak1.rt(90)
        mak1.fd(pix200)
        mak1.pendown()
        mak1.fd(pix200)
        mak1.lt(90)
        mak1.fd(pix100)
        mak1.penup()
        mak1.lt(90)
        mak1.fd(pix100)
        mak1.pendown()
        mak1.fd(200)
        mak1.penup()
        mak1.fd(pix100)
        mak1.rt(90)
        mak1.fd(pix100)
        mak1.rt(90)
        mak1.pendown()
        mak1.fd(pix200 + pix200)
        mak1.penup()
        mak1.bk(pix200 * 4 + pix100)
        mak1.pendown()
        mak1.bk(pix200 + pix100)
        mak1.penup()
        mak1.goto(0, 0)
        mak1.seth(90)

    
#blocked coords
#??


#end program
turtle.done()```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-22 18:15:29

海龟免费给你的最好的就是你的海龟在使用begin_poly()end_poly()get_poly()时开始/停止的所有点的坐标,比如:

代码语言:javascript
复制
mak1.begin_poly()

#make the maze - mak1
for i in range (1):
    mak1.penup()
    mak1.fd(pix100)

# ...
        mak1.penup()
        mak1.goto(0, 0)
        mak1.seth(90)

mak1.end_poly()

#blocked coords

blocked_coords = mak1.get_poly()

这会让你像这样工作:

代码语言:javascript
复制
((0.00,0.00), (129.23,0.00), (129.23,-129.23), (129.23,129.23), (64.62,129.23),
 (-64.62,129.23), (-129.23,129.23), (-129.23,-129.23), (-64.62,-129.23), (64.62,-129.23),
 (129.23,-129.23), (129.23,-0.00), (129.23,-129.23), (258.46,-129.23), (387.69,-129.23),
 (387.69,-387.69), (646.15,-387.69), (646.15,-258.46), (516.92,-258.46), (516.92,-129.23),
 (0.00,0.00), (0.00,258.46), (0.00,323.08), (-64.62,323.08), (64.62,323.08),
 (-193.85,323.08), (-258.46,323.08), (-258.46,258.46), (-308.46,258.46), (-566.92,258.46),
 (-696.15,258.46), (-437.69,258.46), (-437.69,129.23), (0.00,0.00), (129.23,-0.00),
 (387.69,-0.00), (387.69,129.23), (258.46,129.23), (258.46,258.46), (258.46,129.23),
 (516.92,129.23), (775.38,129.23), (775.38,258.46), (646.15,258.46), (446.15,258.46),
 (316.92,258.46), (316.92,387.69), (833.85,387.69), (-329.23,387.69), (-716.92,387.69),
 (0.00,0.00))

但是,除非你对俯卧撑和吊坠严于律己,否则这很可能无法达到你的目的。

另一种方法是首先在ASCII中定义你的迷宫(空空间的空格,墙壁段的周期,等等)。然后把你的空间划分成一个网格。因为你的墙已经厚了10便士,虽然我会变厚一些,比如你的pacman的厚度,30 of,但可能会起作用。然后,在你的ASCII迷宫定义中的每一段时间,在这一点上丢下一只新的方形海龟。

绘制起来可能比较困难,但在运行时,您可以简单地使用海龟distance()方法来确定您是否与墙壁段发生了碰撞。找出这样的例子,它们就在那里。

最后,您应该能够删除Windows依赖于使用:

代码语言:javascript
复制
user32 = ctypes.windll.user32
width = user32.GetSystemMetrics(0)
height = user32.GetSystemMetrics(1)
wn.setup(width, height)

取而代之的是在海龟身上做一些事情:

代码语言:javascript
复制
wn = turtle.Screen()
wn.setup(1.0, 1.0)  # as much screen as I can get
width = wn.window_width()
height = wn.window_height()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63537036

复制
相关文章

相似问题

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