나는 지속적으로 반복되는 코드 사이의 단순화하는 방법 이러한 경우에 문

0

질문

코드 생성에 사용되는 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 위에 사각형

pygame python
2021-11-23 17:15:29
1

최고의 응답

3

읽 시 스 클래스.

Button 클래스:

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)
2021-11-23 19:01:17

에 대한 감사 솔루션할 수 있다면 투표이 나는 것입니다.
Minhaj Rahman

@MinhajRahman 감사합니다. 당신은 환영받습니다.
Rabbid76

그냥 나를 따라하고 싶어니다. 나고 오류를 실행할 때는 코드 라인 147 에서,그리 승리합니다.blit(자체입니다.텍스트,자체입니다.텍스트입니다.get_rect(center=self.rect.센터))AttributeError:'pygame.Rect'객체의 특성이 없음'get_rect'
Minhaj Rahman

@MinhajRahman Sorry,내 나쁘다. 가 있었 오타에서 대답이다. Button(register_button, register_button_text, register),Button(register_button, register_button, register), (2 수 register_button_text).
Rabbid76

에 대해 동일 Button(exit_button, exit_button_text, exit_window).
Rabbid76

아아 내가 하려고 했는데 이것을 파악하기 위하여 한동안 지금지,다시 한번 감사
Minhaj Rahman

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................