如何解决pygame单击以更改多个矩形的颜色
当我单击一个矩形时,颜色会改变。但是我无法同时更改周围的矩形。如何访问我单击的矩形周围的矩形的x和y?
import pygame
import sys
width = 600
height = 600
size = 120
white = (255,255,255)
pygame.init()
screen = pygame.display.set_mode((width,height))
# create list with all rects
all_rects = []
for y in range(0,width,height):
row = []
for x in range(0,height):
rect = pygame.Rect(x,y,size-1,size-1)
row.append([rect,(0,0)])
all_rects.append(row)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
# check which rect was clicked and change its color on list
for row in all_rects:
for item in row:
rect,color = item
if rect.collidepoint(event.pos):
if color == (0,0):
item[1] = (255,0)
else:
item[1] = (0,0)
# draw all in every loop
screen.fill(white)
for row in all_rects:
for item in row:
rect,color = item
pygame.draw.rect(screen,color,rect)
pygame.display.flip()
解决方法
您应该这样修改第15、17行;
for y in range(0,width,size):
row = []
for x in range(0,size):
在您当前的代码中,all_rects仅包含1个rect。
完整代码:
import pygame
import sys
width = 600
height = 600
size = 120
white = (255,255,255)
pygame.init()
screen = pygame.display.set_mode((width,height))
# create list with all rects
all_rects = []
for y in range(0,size):
rect = pygame.Rect(x,y,size-1,size-1)
row.append([rect,(0,0)])
all_rects.append(row)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
# check which rect was clicked and change its color on list
for row in all_rects:
for item in row:
rect,color = item
if rect.collidepoint(event.pos):
if color == (0,0):
item[1] = (255,0)
else:
item[1] = (0,0)
# draw all in every loop
screen.fill(white)
for row in all_rects:
for item in row:
rect,color = item
pygame.draw.rect(screen,color,rect)
pygame.display.flip()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。