2014-10-17 80 views
0

這是我的第一篇文章在這裏!我希望這個問題以前沒有回答,不幸的是我並不知道我應該搜索什麼......我需要一些幫助繪製彩色方塊pygame python 3.2

這是一個大學練習,我要求用戶定義一系列正方形列和行的顏色(藍色)逐漸變輕。使事情進一步複雜化,正方形必須從偶數行(包括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我不知道如何把它說,蟒蛇)

由此產生的權利正確格式的格子數量,但我無法設法得到正確的着色。我會很感激任何建議,你可以讓這個工作正常(雖然這是一個練習,所以我寧願不給代碼直接,只是一個提示,讓我在正確的方向)。

感謝您的任何答案和抱歉的長問題!

回答

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 
+0

謝謝,這是一個非常不錯的主意,但由於某些原因,當我寫這篇文章:對山坳中的cols: pygame.draw.rect(屏幕,(0,0,row_colours [山口]),(COL * 30,row * 30,29,29))它說我超出範圍 – Sauron 2014-10-17 15:42:50

+0

啊,我錯過了一些東西。我修改了切分列表的代碼。我認爲現在應該起作用。 @Sauron – parchment 2014-10-17 15:47:48

+0

謝謝,現在完美:D你能告訴我爲什麼以前的版本不起作用嗎?畢竟這個練習的目的是教我一些東西^^ @parchment – Sauron 2014-10-17 15:54:16