我一直在重复代码,想知道是否有办法简化这些 if 语句
I'm continuously repeating code and wondering if there's a way to simplify these if statements
我创建的代码在 pygame 中用于突出显示我悬停在上面的按钮,当点击时将触发它们相应的功能
if singleplayer_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), singleplayer_button)
WIN.blit(singleplayer_button_text, (295, 400))
if click:
singleplayer()
else:
pygame.draw.rect(WIN, RED, singleplayer_button)
WIN.blit(singleplayer_button_text, (295, 400))
if multiplayer_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), multiplayer_button)
WIN.blit(multiplayer_button_text, (727, 400))
if click:
multiplayer1()
else:
pygame.draw.rect(WIN, RED, multiplayer_button)
WIN.blit(multiplayer_button_text, (727, 400))
if leaderboard_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), leaderboard_button)
WIN.blit(leaderboard_button_text, (291, 550))
if click:
leaderboard()
else:
pygame.draw.rect(WIN, RED, leaderboard_button)
WIN.blit(leaderboard_button_text, (291, 550))
if credit_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), credit_button)
WIN.blit(credits_button_text, (774, 550))
if click:
credit()
else:
pygame.draw.rect(WIN, RED, credit_button)
WIN.blit(credits_button_text, (774, 550))
if register_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), register_button)
WIN.blit(register_button_text, (300, 700))
if click:
register()
else:
pygame.draw.rect(WIN, RED, register_button)
WIN.blit(register_button_text, (300, 700))
if exit_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), exit_button)
WIN.blit(exit_button_text, (737, 700))
if click:
exit_window()
else:
pygame.draw.rect(WIN, RED, exit_button)
WIN.blit(exit_button_text, (737, 700))
####_button 是一个矩形
####_button_text 是在矩形顶部 blitted 的文本
读一读 Classes。
创建 Button
class:
class Button():
def __init__(self, rect, text, action):
self.rect = rect
self.text = text
self.action = action
def draw(self, win):
pygame.draw.rect(win, (180, 0, 0), self.rect)
WIN.blit(self.text, self.text.get_rect(center = self.rect.center))
def click(self, mx, my, click):
if self.rect.collidepoint(mx, my) and click:
self.action()
创建 Botton
个对象的列表:
buttons = [
Button(singleplayer_button, singleplayer_button_text, singleplayer),
Button(multiplayer_button, multiplayer_button_text, multiplayer1),
Button(leaderboard_button, leaderboard_button_text, leaderboard),
Button(credit_button, credits_button_text, credit),
Button(register_button, register_button_text, register),
Button(exit_button, exit_button_text, exit_window)
]
循环绘制按钮:
for button in buttons:
button.draw(WIN)
在循环中进行点击检测:
for button in buttons:
button.click(mx, my, click)
我创建的代码在 pygame 中用于突出显示我悬停在上面的按钮,当点击时将触发它们相应的功能
if singleplayer_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), singleplayer_button)
WIN.blit(singleplayer_button_text, (295, 400))
if click:
singleplayer()
else:
pygame.draw.rect(WIN, RED, singleplayer_button)
WIN.blit(singleplayer_button_text, (295, 400))
if multiplayer_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), multiplayer_button)
WIN.blit(multiplayer_button_text, (727, 400))
if click:
multiplayer1()
else:
pygame.draw.rect(WIN, RED, multiplayer_button)
WIN.blit(multiplayer_button_text, (727, 400))
if leaderboard_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), leaderboard_button)
WIN.blit(leaderboard_button_text, (291, 550))
if click:
leaderboard()
else:
pygame.draw.rect(WIN, RED, leaderboard_button)
WIN.blit(leaderboard_button_text, (291, 550))
if credit_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), credit_button)
WIN.blit(credits_button_text, (774, 550))
if click:
credit()
else:
pygame.draw.rect(WIN, RED, credit_button)
WIN.blit(credits_button_text, (774, 550))
if register_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), register_button)
WIN.blit(register_button_text, (300, 700))
if click:
register()
else:
pygame.draw.rect(WIN, RED, register_button)
WIN.blit(register_button_text, (300, 700))
if exit_button.collidepoint(mx, my):
pygame.draw.rect(WIN, (180, 0, 0), exit_button)
WIN.blit(exit_button_text, (737, 700))
if click:
exit_window()
else:
pygame.draw.rect(WIN, RED, exit_button)
WIN.blit(exit_button_text, (737, 700))
####_button 是一个矩形
####_button_text 是在矩形顶部 blitted 的文本
读一读 Classes。
创建 Button
class:
class Button():
def __init__(self, rect, text, action):
self.rect = rect
self.text = text
self.action = action
def draw(self, win):
pygame.draw.rect(win, (180, 0, 0), self.rect)
WIN.blit(self.text, self.text.get_rect(center = self.rect.center))
def click(self, mx, my, click):
if self.rect.collidepoint(mx, my) and click:
self.action()
创建 Botton
个对象的列表:
buttons = [
Button(singleplayer_button, singleplayer_button_text, singleplayer),
Button(multiplayer_button, multiplayer_button_text, multiplayer1),
Button(leaderboard_button, leaderboard_button_text, leaderboard),
Button(credit_button, credits_button_text, credit),
Button(register_button, register_button_text, register),
Button(exit_button, exit_button_text, exit_window)
]
循环绘制按钮:
for button in buttons:
button.draw(WIN)
在循环中进行点击检测:
for button in buttons:
button.click(mx, my, click)