Ich versuche, pygame und python zu lernen, indem ich einige einfache Klickspiele mache und das folgende Programm, das ich gemacht habe, zeichnet ein Gitter und wenn ich auf irgendein Feld im Gitter klicke, ändert es seine Farbe. Aber das ist auf eine Box pro Klick beschränkt.Wie kann ich eine Liste von min() -Methode in Python bekommen?
Was ich versuche zu tun, um Farbfeld geklickt und alle anderen Box mit ähnlichen x-Koordinaten oder y-Koordinaten, x und y-Koordinaten Bedeutung <rect(x, y, 70, 90)>
xy in einem pygame.Rect
mit allen meinen Code hier die relevanten Funktionen in Frage.
import pygame as pg
import sys
window_width = 720
window_height = 360
window_res = window_width, window_height
cover_width = 70
cover_height = 90
gap_x = 70
gap_y = 90
red = (225, 25, 30)
bkg_colour = (30, 30, 30)
off_white = (180, 180, 180)
magenta = (225, 25, 25)
def get_rekt():
init_x = int((window_width % gap_x)/2)
init_y = 20
rect_list = []
for x in range(init_x, window_width - gap_x, gap_x):
for y in range(init_y, window_height - gap_y, gap_y):
rect = pg.Rect(x, y, cover_width, cover_height)
rect_list.append(rect)
return rect_list
def draw_grid(rect_list):
for rect in rect_list:
pg.draw.rect(display, red, rect, 3)
def get_grid():
return draw_grid(get_rekt())
def get_closest_rect(rect_list, click_pos):
closest_rect = min(rect_list, key=lambda x: abs(x.centerx - click_pos[0]) + abs(x.centery - click_pos[1]))
return closest_rect
def main():
pg.init()
global display, fps_clock
display = pg.display.set_mode(window_res)
display.fill(bkg_colour)
draw_grid(get_rekt())
pg.display.flip()
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
if pg.mouse.get_pressed()[0]:
click_pos = pg.mouse.get_pos()
rect_list = get_rekt()
closest_rect = get_closest_rect(rect_list, click_pos)
pg.draw.rect(display, off_white, closest_rect, 3)
pg.display.flip()
print(closest_rect)
if __name__ == '__main__':
main()
Dies ist die Funktion, die am nächsten zu mir zurückkehrt, wo ich geklickt habe. Ich verwende min() Methode mit Lambda-Taste.
def get_closest_rect(rect_list, click_pos):
closest_rect = min(rect_list, key=lambda x: abs(x.centerx - click_pos[0]) + abs(x.centery - click_pos[1]))
return closest_rect
Dies ist, wie es aussieht, wenn ich
in einer Box klicken Und was ich suche ist
Was ich dachte, ist wenn diese Funktion
istkönnte eine Liste von rect mit ähnlichen x oder y Koordinaten zurückgeben, könnte ich diese Liste in einer for-Schleife mit pg.draw ausführen und tun, was Sie im zweiten Bild sehen können.
, die perfekt funktioniert! Vielen Dank. –