我需要一些帮助,用 pygame for python 3.2 按一定顺序绘制彩色方块

问题描述 投票:0回答:1

这是我在这里发表的第一篇文章!我希望这个问题之前没有得到解答,不幸的是我真的不知道我应该搜索什么......

这是一项大学练习,要求我绘制一系列正方形,其中包含用户定义的列和行,并且颜色(蓝色)逐渐变浅。更复杂的是,偶数行(包括第 0 行)中的方块必须按从深到浅的顺序排列,奇数行中的方块则相反,每行最暗的方块比前一行最亮的方块要亮。

我正在使用 pygame 1.9 和 python 3.2。

这是我迄今为止尝试过的:

import pygame
rows = int(input('Rows? '))
cols = int(input('Columns? '))
colourstepblue = 255/(cols*rows) #defines how much lighter the squares
                                 #become at each iteration
pygame.init()                   
screen = pygame.display.set_mode((640,480))
screen.fill((255,255,255))
count = 0
for i in range(0,rows):
    for a in range(0,cols):
        if i%2 == 0:
            pygame.draw.rect(screen, (0, 0, (colourstepblue*( (a) * (i+1)))), (a*30, i*30, 29, 29))    
        else:
            pygame.draw.rect(screen, (0, 0, 255 - (i)*colourstepblue*a), (a*30, i*30, 29, 29))
    count += cols
pygame.display.flip()

(抱歉,如果它说 html,我不知道如何让它说 python)

这会以正确的格式生成正确数量的正方形,但是我无法获得正确的着色。我将不胜感激您提供的有关使其正常工作的任何建议(尽管这又是一次练习,所以我不想直接给出代码,只是一个让我朝着正确方向前进的提示)。

感谢您的回答,对于这么长的问题感到抱歉!

python colors pygame
1个回答
1
投票

获得正确颜色的一种方法是首先生成它们,而不是边做边计算。您可以通过列表理解轻松完成此操作。

如果你使用的是python 2,那么划分时需要小心。确保其中一个数字是浮点数,以防止 python 将它们四舍五入为 int。另外,您可以省略

range
中的第一个参数。它将默认为 0。

colourstepblue = 255.0/(cols*rows)
colours = [x*colourstepblue for x in range(cols*rows)]

然后,您可以对颜色列表进行切片。在奇数行中,您可以反向切片列表。 另外,您应该考虑使用更具描述性的变量名称。

for row in range(rows):
    if row % 2 == 0:
        row_colours = colours[row*rows:(row+1)*rows]
    else 
        row_colours = colours[(row+1)*rows:row*rows:-1]
    for col in range(cols):
        # row_colours[col] contains the colour you want
© www.soinside.com 2019 - 2024. All rights reserved.