import os import pygame from src.config.game_config import data_path, GameConfig from src.scenes.base_scene import BaseScene class GameScene(BaseScene): name = "GameScene" def __init__(self, screen, clock): super().__init__(screen, clock) # 初始化音乐 pygame.mixer.init() # 播放并循环音乐 pygame.mixer_music.load(os.path.join(data_path(), "vespidaze-upbeat-rpg-battle-460971.mp3")) pygame.mixer_music.play(-1) self.back_status = False # 状态值 self.dirty_x = 400 self.dirty_y = 300 self.Left_status = False self.right_status = False self.up_status = False self.down_status = False # 颜色 self.WHITE = (255, 255, 255) self.RED = (255, 0, 0) self.BLUE = (0, 0, 255) def update(self): if self.back_status: self.switch_to_scene("MainMenuScene") if self.Left_status and self.dirty_x >= 0: self.dirty_x -= 1 if self.right_status and self.dirty_x <= GameConfig.window_x - 20: self.dirty_x += 1 if self.up_status and self.dirty_y >= 0: self.dirty_y -= 1 if self.down_status and self.dirty_y <= GameConfig.window_y - 30: self.dirty_y += 1 # 填充窗口颜色 self.screen.fill((255, 255, 255)) # 绘制矩形(移动体和固定体) dirty = pygame.draw.rect(self.screen, self.BLUE, [self.dirty_x, self.dirty_y, 20, 30]) enemy = pygame.draw.rect(self.screen, self.RED, [40, 60, 10, 10]) # 碰撞监测 if dirty.colliderect(enemy): print("die") self.dirty_x = 400 self.dirty_y = 300 dirty = pygame.draw.rect(self.screen, self.BLUE, [self.dirty_x, self.dirty_y, 20, 30]) def handle_event(self, event): # 按下按键 if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: self.back_status = True elif event.key == pygame.K_LEFT or event.key == pygame.K_a: self.Left_status = True elif event.key == pygame.K_RIGHT or event.key == pygame.K_d: self.right_status = True elif event.key == pygame.K_UP or event.key == pygame.K_w: self.up_status = True elif event.key == pygame.K_DOWN or event.key == pygame.K_s: self.down_status = True # 松开按键 elif event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_a: self.Left_status = False elif event.key == pygame.K_RIGHT or event.key == pygame.K_d: self.right_status = False elif event.key == pygame.K_UP or event.key == pygame.K_w: self.up_status = False elif event.key == pygame.K_DOWN or event.key == pygame.K_s: self.down_status = False