这是我在这里发表的第一篇文章!我希望这个问题之前没有得到解答,不幸的是我真的不知道我应该搜索什么......
这是一项大学练习,要求我绘制一系列正方形,其中包含用户定义的列和行,并且颜色(蓝色)逐渐变浅。更复杂的是,偶数行(包括第 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 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