我需要一些帮助以pygame为特定顺序绘制彩色方块,用于python 3.2

时间:2014-10-17 14:50:37

标签: python colors pygame

这是我的第一篇帖子!我希望以前没有回答过这个问题,不幸的是我真的不知道应该搜索什么......

这是一项大学练习,我被要求绘制一系列带有用户定义列的方块,并且颜色(蓝色)逐渐变浅。为了使事情进一步复杂化,方块必须在偶数行(包括第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)

这会以正确的格式生成正确数量的正方形,但是我无法设置正确的颜色。我很感激你可以给予任何关于让它正常工作的建议(虽然这也是一个练习,所以我宁愿不直接给出代码,只是给我一个正确方向的提示。)

感谢您的回答,并对这个长期的问题感到抱歉!

1 个答案:

答案 0 :(得分:1)

获得正确颜色的一种方法是首先生成它们,而不是随意计算它们。您可以使用list comprehension轻松完成此操作。

如果你在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