【问题标题】:I need some help drawing coloured squares in a certain order with pygame for python 3.2我需要一些帮助,使用 pygame for python 3.2 按特定顺序绘制彩色方块
【发布时间】:2014-10-17 14:50:36
【问题描述】:

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

这是一个大学练习,我被要求绘制一系列正方形,其中包含用户定义的列和行,颜色(蓝色)逐渐变浅。更复杂的是,偶数行(包括第 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】:

    获得正确颜色的一种方法是首先生成它们,而不是在进行时计算它们。您可以使用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
    

    【讨论】:

    • 谢谢,这是一个非常好的主意,但出于某种原因,当我写这个时: for col in cols: pygame.draw.rect(screen, (0, 0, row_colours[col]), ( col*30, row*30, 29, 29)) 它说我超出范围
    • 啊,我错过了一些东西。我已经修改了分割列表的代码。我认为现在应该可以了。 @索伦
    • 谢谢,现在完美运行 :D 你能告诉我为什么以前的版本不能运行吗?毕竟这个练习的目的是教我一些东西^^ @parchment
    • 我以前的版本没有用,因为我数学很烂:P @Sauron
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多