最近リストを持つプログラムを作成しましたが、リストをマトリックスに変更する必要があります。私は長方形を描くことによってグリッドをプログラムしました。今、私はそれをクリックすると矩形の色を変更したいと思います。私のプログラムでは、すべてのプログラムはうまくいきましたが、今は行列を使用する必要があります。なぜなら、残りのプログラムのために行列が必要だからです。私はすでにすべて0の行列を持っていますが、今は矩形をクリックすると0を1に変更します。イベントが発生したときに、行列の要素を0から1に変更します。
x = 5
y = 5
height = 30
width = 50
size = 20
color = (255,255,255)
new_color = (0,255,0)
screen.fill((0,0,0))
def draw_grid():
for y in range(height):
for x in range(width):
rect = pygame.Rect(x * (size + 1),y * (size + 1),size,size)
pygame.draw.rect(screen,color,rect)
x += 20
y += 20
rects = [[0 for i in range(width)] for j in range(height)]
draw_grid()
while 1:
clock.tick(30)
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
if menu == 'start':
if pygame.mouse.get_pressed()[0]:
mouse_pos = pygame.mouse.get_pos()
for i,(rect,color) in enumerate(rects):
if rect.collidepoint(mouse_pos):
rects[i] = (rect,new_color)
for rect,color in rects:
pygame.draw.rect(screen,color,rect)
pygame.display.flip()
これは私がリストで使用したコードですが、すでにリストをマトリックスに置き換えています。このコードを実行すると、エラーが発生します。
ValueError: too many values to unpack
この問題を解決するにはどうすればよいですか?
rectはリストのリストですが、 'for rect、rect in color:'の2タプルのリストとして扱います。それは動作しません。 – Zinki
代わりに何をすればよいですか? – AV13
'rects'リストの0と1はrectの色を表しますか? 'pygame.Rect'をリストに格納したくない場合は、衝突検出と描画コードを変更する必要があります。 – skrx