如何列出海龟运动的坐标?
How to list the coordinates of a turtle movement?
我是 python 的初学者,我正在用乌龟制作一个小迷宫游戏。游戏使用相对像素(可能不是官方术语)——它不是给出要移动的像素值,而是使用屏幕分辨率来确定需要移动的量(在代码中——第 33-44 行)。
我的屏幕分辨率是 1366 x 768 - 像素测量值就是以此为基础的。我想跟踪乌龟移动的所有坐标,并将它们全部添加到另一只乌龟的阻塞坐标列表中。
如何测量乌龟 mak1 通过的所有坐标? (最好每个动作都没有 for 循环)谢谢!
PS。我的代码可能效率不高 - 我不太擅长这个
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()```
乌龟免费给你的最好的是你的乌龟 starts/stops 在使用 begin_poly()
、end_poly()
和 get_poly()
时的所有点的坐标,类似于:
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()
这会让你得到这样的东西来使用:
((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))
但是,除非您对 penups 和 pendowns 有纪律,否则这可能无法用于您的目的。
另一种方法是首先用 ASCII 定义迷宫(spaces 表示空 spaces,句点表示墙段等),然后将 space 分成一个网格。因为你的墙已经有 10px 厚了,虽然我会加厚,但这可能会起作用,例如你吃豆子的厚度,30px。然后对于 ASCII 迷宫定义中的每个周期,在该点放置一个新的 square-shaped 乌龟。
绘制起来似乎更难,但在运行时,您可以简单地使用乌龟 distance()
方法来确定您是否与墙段发生碰撞。在 SO 中搜索这方面的示例,它们在那里。
最后,您应该能够删除 Windows 对使用的依赖:
user32 = ctypes.windll.user32
width = user32.GetSystemMetrics(0)
height = user32.GetSystemMetrics(1)
wn.setup(width, height)
通过在 turtle 自身内部做一些事情:
wn = turtle.Screen()
wn.setup(1.0, 1.0) # as much screen as I can get
width = wn.window_width()
height = wn.window_height()
我是 python 的初学者,我正在用乌龟制作一个小迷宫游戏。游戏使用相对像素(可能不是官方术语)——它不是给出要移动的像素值,而是使用屏幕分辨率来确定需要移动的量(在代码中——第 33-44 行)。
我的屏幕分辨率是 1366 x 768 - 像素测量值就是以此为基础的。我想跟踪乌龟移动的所有坐标,并将它们全部添加到另一只乌龟的阻塞坐标列表中。
如何测量乌龟 mak1 通过的所有坐标? (最好每个动作都没有 for 循环)谢谢!
PS。我的代码可能效率不高 - 我不太擅长这个
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()```
乌龟免费给你的最好的是你的乌龟 starts/stops 在使用 begin_poly()
、end_poly()
和 get_poly()
时的所有点的坐标,类似于:
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()
这会让你得到这样的东西来使用:
((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))
但是,除非您对 penups 和 pendowns 有纪律,否则这可能无法用于您的目的。
另一种方法是首先用 ASCII 定义迷宫(spaces 表示空 spaces,句点表示墙段等),然后将 space 分成一个网格。因为你的墙已经有 10px 厚了,虽然我会加厚,但这可能会起作用,例如你吃豆子的厚度,30px。然后对于 ASCII 迷宫定义中的每个周期,在该点放置一个新的 square-shaped 乌龟。
绘制起来似乎更难,但在运行时,您可以简单地使用乌龟 distance()
方法来确定您是否与墙段发生碰撞。在 SO 中搜索这方面的示例,它们在那里。
最后,您应该能够删除 Windows 对使用的依赖:
user32 = ctypes.windll.user32
width = user32.GetSystemMetrics(0)
height = user32.GetSystemMetrics(1)
wn.setup(width, height)
通过在 turtle 自身内部做一些事情:
wn = turtle.Screen()
wn.setup(1.0, 1.0) # as much screen as I can get
width = wn.window_width()
height = wn.window_height()