【问题标题】:Could someone explain what the use for this piece of code is?有人可以解释这段代码的用途是什么吗?
【发布时间】:2022-01-20 10:00:13
【问题描述】:

我在 Python 中使用 turtle 开始了这个像素艺术项目,我在网上使用了一些代码来帮助我,它有效,但我不确定它为什么有效以及它做了什么。有人可以帮我吗?谢谢!

这是我想了解更多的代码:

x0 = -widthCover / 2 * sizePixel
y0 = heightCover / 2 * sizePixel

for i, row in enumerate(gameCoverPixel):
    setposition(x0, y0 - i * sizePixel)

这是我的完整代码供参考:

from turtle import *

sizePixel = 30
sizeCursor = 20
bgcolor('navy')

coverColors = {
    'B': 'saddle brown',
    'T': 'tan1',
    'W': 'snow',
    'P': 'darkorchid1',
    'R': 'orangered',
    'Y': 'gold',
    'F': 'firebrick4',
    'G': 'gray34',
    'Q': 'black',
    'X': 'salmon4',
}

gameCoverPixel = [
    'WWWWWBBBBBWWTTTTBWWWWBBBBBBBWWWWBTTTTWWBBBBBWWWWW',
    'WWWBBBBBBBBTTBBBBBBWBBBBBBBBBWBBBBBBTTBBBBBBBBWWW',
    'WWBBBBBBBBBBBBBBBBWBTTTBBBTTTBWBBBBBBBBBBBBBBBBWW',
    'WBBBBBBBBBBBBBBBBWBTWWWTBTWWWTBWBBBBBBBBBBBBBBBBW',
    'WBBBBBBBBBBBBBBBBTBTWWWWTWWWWTBTBBBBBBBBBBBBBBBBW',
    'WBBBBBBBBTBBBBBBTTBTWWWQTQWWWTBTTBBBBBBTBBBBBBBBW',
    'WBTTTTBBTBBBBBBBTTBBTWWTTTWWTBBTTBBBBBBBTBBTTTTBW',
    'TTTTTTTTWBBBBBBBTTWWWTTBBBTTWWWTTBBBBBBBWTTTTTTTT',
    'TTTTTTTTTWBBBBBTTWWWWWTTTTTWWWWWTTBBBBBWTTTTTTTTT',
    'TTTTTTTTTWWBBBBTTBWWWBWWWBWWWBWWTTBBBBWWTTTTTTTTT',
    'TTTTTTWTTWWBBBBTTBBWBBBWBBBWBBBWTTBBBBWWTTWTTTTTT',
    'WTTWTTWWWWWWBBBBTTWWWBWWWBWWWBWTTBBBBWWWWWWTTWTTW',
    'WWTTWTTWWWWWBBBTBTTTWWWTTTWWWTTTBTBBBWWWWWTTWTTWW',
    'WWWWWWWWWWWBBBBTTBBTTTTTTTTTTTBBTTBBBBWWWWWWWWWWW',
    'WWWWWWWWWTTBBBBTTTTBBBBBBBBBBBTTTTBBBBTTWWWWWWWWW',
    'WWWWWWWWTBBBBBBTTTBTTTTTTTTTTTBTTTBBBBBBTWWWWWWWW',
    'WWWWWWWWWBBBBBBBTTTTTTTTTTTTTTTTTBBBBBBBWWWWWWWWW',
    'WWWWWWWWWBBBBBBBBTTTTTTTTTTTTTTTBBBBBBBBGGGGWWWWW',
    'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWGXXXXXGWWWW',
    'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWGXXXXXXXGWWW',
    'WWWRRRWWWRRRWWRWWWRWRWWRWRRRWRWWWRWWWGXXXXXXXGWWW',
    'WWWRWWRWRFYFRWRRWWRWRWRWWRWWWWRWRWWWWGXXXXXXXGWWW',
    'WWWRWWRWRYYYRWRWRWRWRRWWWRRWWWWRWWWWWGXXXXXXXGWWW',
    'WWWRWWRWRFYFRWRWWRRWRWRWWRWWWWWRWWWWWGXXXXXXXGWWW',
    'WWWRRRWWWRRRWWRWWWRWRWWRWRRRWWWRWWWWWWGXXXXXGWWWW',
    'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWGGGGGWWWWW',
    'PPPPPPPPRPPRPPRRRPPRPPPRPPRRRPPPPPPPPPPPPPPPPPPPP',
    'WPWWWPWWRPRWWRFYFRWRRPWRWRWWWPWWWPWWWPWWWPWWWPWWW',
    'PWPWPWPWRRPWPRYYYRPRPRPRPRPRRWPWPWPWPWPWPWPWPWPWP',
    'WWWPWWWPRWRPWRFYFRWRWWRRWRWPRWWPWWWPWWWPWWWPWWWPW',
    'PPPPPPPPRPPRPPRRRPPRPPPRPPRRRPPPPPPPPPPPPPPPPPPPP',
]

widthCover, heightCover = len(gameCoverPixel[0]), len(gameCoverPixel)

screen = Screen()
setup((widthCover + 3) * sizePixel, (heightCover + 3) * sizePixel)

tracer(False)

turtle = Turtle()
hideturtle()
shape('square')
shapesize(sizePixel / sizeCursor)
penup()

x0 = -widthCover / 2 * sizePixel
y0 = heightCover / 2 * sizePixel

for i, row in enumerate(gameCoverPixel):
    setposition(x0, y0 - i * sizePixel)

    for pixel in row:
        color(coverColors[pixel])
        stamp()
        forward(sizePixel)

tracer(True)
exitonclick()

【问题讨论】:

    标签: python turtle-graphics enumerate python-turtle


    【解决方案1】:

    此代码计算图像的起点,在本例中,它使图像在窗口上居中(即/ 2):

    x0 = -widthCover / 2 * sizePixel
    y0 = heightCover / 2 * sizePixel
    

    给定海龟的坐标系,原点位于窗口的中间,我们期望起始 X 坐标为负,而起始 Y 坐标(对于自上而下的图像)为正。

    此代码循环遍历图像的所有字符串,设置每一行的起点。为了获取图像数组中每个字符串的索引,我们使用enumerate()为每个字符串生成一个数字,从0开始:

    for i, row in enumerate(gameCoverPixel):
        setposition(x0, y0 - i * sizePixel)
    

    每一行都从相同的 X 坐标开始,x0 在前面的代码 sn-p 中计算。 Y 坐标是前面计算的y0 加上由字符串的索引和正在绘制的像素的高度确定的窗口向下的一些进展。这是一个减法,因为当我们向下移动窗口远离标题栏时,Y 坐标会减小。

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 2015-09-14
      • 1970-01-01
      相关资源
      最近更新 更多