Чтобы выйти из игры, вы можете определить функцию или метод, в котором вы устанавливаете переменную running
равной False
, а затем передаете ее одному из экземпляров кнопки как функция callback
.
Вот более объектно-ориентированный пример с классом App
, который имеет атрибут self.running
и метод quit_game
. Если пользователь нажимает кнопку, вызывается метод quit_game
, для self.running
устанавливается значение False
, и основной цикл while останавливается.
import pygame
pygame.init()
# Global constants.
WHITE = pygame.Color('white')
GREEN = pygame.Color('green')
BLACK = pygame.Color('black')
FONT = pygame.font.Font(None, 40)
class Button:
def __init__(self, text, pos, callback):
self.text = text
self.callback = callback
self.image = FONT.render(self.text, True, GREEN)
self.rect = self.image.get_rect(topleft=pos)
def draw(self, screen):
screen.blit(self.image, self.rect)
def handle_event(self, event):
if event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
if self.rect.collidepoint(event.pos):
self.callback()
elif event.type == pygame.MOUSEMOTION:
if self.rect.collidepoint(event.pos):
self.image = FONT.render(self.text, True, BLACK)
else:
self.image = FONT.render(self.text, True, GREEN)
class App:
def __init__(self):
self.screen = pygame.display.set_mode((640, 480))
self.clock = pygame.time.Clock()
self.select = [
Button("Computer Virus", (100, 200), lambda: print("Computer Virus")),
Button("Computer Crime", (100, 300), lambda: print("Computer Crime")),
Button("QUIT", (100, 400), self.quit_game),
]
self.running = True
def quit_game(self):
self.running = False
def main_loop(self):
while self.running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
for button in self.select:
button.handle_event(event)
self.screen.fill(WHITE)
for button in self.select:
button.draw(self.screen)
pygame.display.update()
self.clock.tick(60)
app = App()
app.main_loop()
pygame.quit()
Если вы не хотите использовать класс App
, вы также можете написать функцию, которая изменяет глобальную переменную running
. Однако обратите внимание, что глобальные переменные обычно не одобряются, потому что они затрудняют чтение кода и делают его более подверженным ошибкам (в данном случае это не так уж драматично).
def quit_game():
global running
running = False
# Pass it as the `callback` argument.
Button("QUIT", (100, 400), quit_game)