- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是在 Python 3 中使用 Turtle 图形的新手,我不知道该怎么做。我的问题之一是我不知道从哪里开始创建一个函数,该函数将根据包含 3 个变量的名为“路径”的数据集在网格单元格内绘制标记。网格 map 本身是 7x7,总共有 5 个标记(范围从 0 到 4)。每个标记都绘制了自己的社交媒体 Logo ,并且彼此完全不同。
grid_cell_size = 100 # px
num_squares = 7 # this for creating the 7x7 grid map
# for clarification: path = ['Start', location, marker_value]
path = [['Start', 'Centre', 4], ['North', 2, 3],
['East', 2, 2], ['South', 4, 1], ['West', 2, 0]]
我的主要目标是能够使用上述数据集在它们自己的位置坐标中同时绘制所有 5 个标记。我不确定我应该如何将这些标记分配给它们自己的 marker_value。 if/elif/else 语句是否适用于此?
尝试一次实现 5 个标记对我来说太过分了,所以我尝试使用这个名为“path_var_3”的非常简单的数据集,它只会绘制 1 个标记。
path_var_3 = [['Start', 'Bottom left', 3]]
def follow_path(path_selection):
# Draws YouTube logo marker
if 3 in path_var_3[0]:
penup()
# !!!
goto(0, -32)
setheading(90)
# Variables
youtube_red = '#ff0000'
youtube_white = 'White'
radius = 10
diameter = radius * 2
# Prep to draw the superellipse
pencolor(youtube_red)
fillcolor(youtube_red)
# Drawing the superellipse
begin_fill()
pendown()
for superellipse in range(2):
circle(radius, 90)
forward(80)
circle(radius, 90)
forward(60 - diameter)
# Finish up
end_fill()
penup()
# Move turtle position towards the centre of the superellipse
# !!!
goto(-59)
backward(16)
setheading(90)
fillcolor(youtube_white)
# Drawing the white 'play icon' triangle
begin_fill()
pendown()
for play_triangle in range(2):
right(120)
forward(28)
right(120)
forward(28)
# Finish up
endfill()
penup()
else: return print('ERROR')
follow_path(path_var_3)
到目前为止,我能够在程序中绘制标记,但我立即遇到了第一个问题:我意识到我已经硬编码了超椭圆和三角形开始绘制的坐标,如“!!!”所示注释。所以当我运行程序时,标记被绘制在网格单元之外。无论单元格位于 7x7 网格 map 中的哪个位置,如何让标记绘制在单元格内?
如果有人有任何想法或能够提供帮助,我将不胜感激。
长话短说:
最佳答案
由于 goto(-59)
和 endfill()
不是有效的函数调用,您提供的代码无法运行。总的来说,您的代码缺少一层来组织您要解决的问题。 (例如,您需要在代码方面定义“左下”或“东”的含义。)简而言之,您的 YouTube Logo 绘图使用的是绝对坐标而不是相对坐标,因此无法在任何地方绘制。
下面是您所描述内容的框架实现。它出于调试目的绘制了一个网格,以显示 Logo 最终位于正确的位置。它用彩色圆圈代替 YouTube Logo 以外的所有内容:
from turtle import Turtle, Screen
path = [('Start', 'Centre', 4), ('North', 2, 3), ('East', 2, 2), ('South', 4, 1), ('West', 2, 0)]
GRID_CELL_SIZE = 100 # pixels
NUMBER_SQUARES = 7 # this for creating the 7x7 grid map
ABSOLUTE_OFFSETS = {
'Centre': (NUMBER_SQUARES // 2, NUMBER_SQUARES // 2),
'Bottom left': (0, NUMBER_SQUARES - 1),
# etc.
}
COMPASS_OFFSETS = {
'North': (0, 1),
'East': (1, 0),
'South': (0, -1),
'West': (-1, 0),
'Start': (1, 1), # Special case, assumes absolute offset
}
# YouTube Variables
YOUTUBE_RED = '#ff0000'
YOUTUBE_WHITE = 'White'
YOUTUBE_RADIUS = 10
YOUTUBE_WIDTH = 80
YOUTUBE_HEIGHT = 60
YOUTUBE_TRIANGLE_EDGE = 28
def draw_grid(): # for debugging
grid = Turtle(visible=False)
grid.speed('fastest')
grid.dot() # visualize origin
grid.penup()
grid.goto(-GRID_CELL_SIZE * NUMBER_SQUARES / 2, GRID_CELL_SIZE * (NUMBER_SQUARES / 2 - 1))
for _ in range(NUMBER_SQUARES - 1):
grid.pendown()
grid.forward(NUMBER_SQUARES * GRID_CELL_SIZE)
grid.penup()
grid.goto(-GRID_CELL_SIZE * NUMBER_SQUARES / 2, grid.ycor() - GRID_CELL_SIZE)
grid.goto(-GRID_CELL_SIZE * (NUMBER_SQUARES / 2 - 1), GRID_CELL_SIZE * NUMBER_SQUARES / 2)
grid.setheading(270)
for _ in range(NUMBER_SQUARES - 1):
grid.pendown()
grid.forward(NUMBER_SQUARES * GRID_CELL_SIZE)
grid.penup()
grid.goto(grid.xcor() + GRID_CELL_SIZE, GRID_CELL_SIZE * NUMBER_SQUARES / 2)
def follow_path(path_selection):
turtle = Turtle(visible=False)
x, y = ABSOLUTE_OFFSETS['Centre'] # relative to grid, not screen!
for direction, offset, marker in path_selection:
if direction in COMPASS_OFFSETS:
dx, dy = COMPASS_OFFSETS[direction]
if offset in ABSOLUTE_OFFSETS:
x, y = ABSOLUTE_OFFSETS[offset]
else:
x += dx * offset
y += dy * offset
turtle.penup()
# new virtual drawing origin, convert to screen coordinates
turtle.goto((x - NUMBER_SQUARES // 2) * GRID_CELL_SIZE, (y - NUMBER_SQUARES // 2) * GRID_CELL_SIZE)
MARKERS[marker](turtle)
turtle.penup()
def YouTube(turtle):
diameter = YOUTUBE_RADIUS * 2
x, y = turtle.position()
# Draws YouTube logo marker
turtle.goto(x + YOUTUBE_WIDTH/2 + YOUTUBE_RADIUS, y + YOUTUBE_HEIGHT/2 - YOUTUBE_RADIUS)
turtle.setheading(90)
# Draw the rounded rectangle (should really be a superellipse)
turtle.color(YOUTUBE_RED)
turtle.begin_fill()
for _ in range(2):
turtle.circle(YOUTUBE_RADIUS, 90)
turtle.forward(YOUTUBE_WIDTH)
turtle.circle(YOUTUBE_RADIUS, 90)
turtle.forward(YOUTUBE_HEIGHT - diameter)
# Finish up
turtle.end_fill()
# Return turtle position towards the centre of the rounded rectangle
turtle.goto(x - YOUTUBE_TRIANGLE_EDGE/4, y + YOUTUBE_TRIANGLE_EDGE/2)
turtle.setheading(90)
# Drawing the white 'play icon' triangle
turtle.fillcolor(YOUTUBE_WHITE)
turtle.begin_fill()
for _ in range(2):
turtle.right(120)
turtle.forward(YOUTUBE_TRIANGLE_EDGE)
# Finish up
turtle.end_fill()
def RedDot(turtle):
turtle.dot(GRID_CELL_SIZE / 2, 'Red')
def BlueDot(turtle):
turtle.dot(GRID_CELL_SIZE / 2, 'Blue')
def GreenDot(turtle):
turtle.dot(GRID_CELL_SIZE / 2, 'Green')
def OrangeDot(turtle):
turtle.dot(GRID_CELL_SIZE / 2, 'Orange')
MARKERS = [RedDot, BlueDot, GreenDot, YouTube, OrangeDot]
screen = Screen()
draw_grid() # for debugging
follow_path(path)
screen.mainloop()
关于Python Turtle 如何在 7x7 网格的单元格内绘制标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52172078/
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
如果 turtle 在一组坐标之上,我想让 turtle 回到地板上: 像这样: floor = -323 if turtle above floor: turtle.goto(floor)
我正在用Python语言编写一个小的文本库游戏。在使用Turtle函数数字输入和文本输入时,会出现一个文本字段,要求用户输入。当文本输入字段出现时,您可以开始输入,而不需要在输入字段中单击,但对于数字
我试图让 turtle 从程序开始就隐藏起来,但即使在放置 t.hideturtle() 之后也是如此。在我将 turtle 声明为变量的正下方, turtle 似乎仍然出现在绘图的中间。 impor
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我将 turtle 设置为最快,当我单独运行第一个循环时,效果很好,但随着我添加更多,它变得与仅单独执行第一个循环时相当。我不知道这是否只是因为绘图的复杂性,但完成形状需要相当长的时间。我可以做些什么
如何在不显示绘图过程的情况下显示最终绘图?我使用的是Python 3.4,这个项目是创建一个射箭游戏。例如,如果我使用以下代码: import turtle screen = turtle.Scree
Python 2.7 版本中的 turtle 和 Turtle 有何不同? import turtle star = turtle.Turtle() for i in range(50): s
如何告诉 turtle 面向 turtle 图形中的方向?我希望 turtle 能够转动并面向一个方向,无论其原始位置如何,我怎样才能实现这一目标? 最佳答案 我认为 turtle.setheadin
如何让 4 只不同的 turtle 同时移动?另外,如何为 Turtle.shape 方法制作人形?我知道有一个名为 register_shape 的 Screen 方法,但我找不到关于它的任何文档。
我设置了热键并且能够移动 turtle ,但是当我运行代码时,如果我超过 x 和 y 值,则不会发生任何事情..也没有错误。怎么了? if (Alex.xcor()>50 or Alex.xcor()
方向: 我创建了以下函数以允许用户将 turtle 更改为他/她选择的图像,然后随时将其标记到 Canvas 上: def TurtleShape(): try: # Tkin
我用黑色 turtle 创建了一个形状(白色矩形)而不是一条线!然后我移动屏幕底部的白色形状以创建一个必须从左向右移动的桨。我必须保持形状但删除黑色箭头。怎么办? from turtle import
我想创建 SpaceInvaders 游戏,但敌人不会被击落,而是会向玩家射击。我使用 .goto() 方法实现它,如下所示: bullet2.goto(player.xcor(),player.yc
出于教学目的,我需要一个图形默认值列表。这是我现在所拥有的: background white canvas 950W by 800H dot 5 (pixels) fil
这个问题在这里已经有了答案: Importing installed package from script with the same name raises "AttributeError: m
我目前正在上初级编程课,正在完成作业。现在,我必须用模块 turtle build 3 个房子(我完成了): def drawBody(mover): #Rectangle part
我有一些代码如下: # My code here turtle.bye() 在那之后,有什么办法可以重新打开 turtle 窗口。我知道您可以执行 turtle.clearscreen() 但这不会关
这段代码设置了一只 turtle 放置的邮票背景。另一只 turtle (其形状来自导入的图像文件)在背景上移动。但是,只要第二只 turtle 位于第一只 turtle 放置的图章上方,它就不可见。
我的程序中有两只 turtle 。它们碰撞在一起时发生了动画,但我希望一只 turtle 位于另一只 turtle 之上,如下所示: 所以,我的问题是 - 我怎样才能实现这一点 - 是否有一行简单的代
我是一名优秀的程序员,十分优秀!