def __init__(self, screen, gameLevel=1): print("********** Init StageOneScene **********") self.allSprites = pygame.sprite.Group() #allSprites 객체 생성 self.now = "stageOne" self.screen = screen self.screenX, self.screenY = pygame.display.get_surface().get_size() self.enemyList = [] self.stageStartTime = pygame.time.get_ticks() # 스테이지 시작 시간 self.gameClear = Object(self.screenX / 2, self.screenY / 2, "assets/images/gameClear.png") self.stageClearYn = False self.gameLevel = gameLevel self.sceneManager = sceneManager.SceneManager() self.lastTime = 1600.0 # 일반 적이 출현하는 정보를 적어놓는 리스트 # Tuple 값 해석 # 튜플 요소 0번째: 적이 출현하는 시간대 (초 단위) # 튜플 요소 1번째: 적의 Type (0: 일반 적, 1: 보스) # 튜플 요소 2번째: 적이 출현하는 x 좌표 # 튜플 요소 3번째: 적이 출현하는 y 좌표 self.enemyGenInfoList = [ (1.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (1.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (5.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (8.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (9.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (9.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (12.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (14.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (15.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (15.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (17.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (18.5, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (20.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (22.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (22.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (23.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (28.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (31.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (32.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (32.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (35.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (37.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (38.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (38.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (40.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (41.5, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (43.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (45.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (45.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (46.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (49.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (50.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (50.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (52.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (55.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (56.0, 0, random.randrange(50.0, self.screenX - 50.0), -15.0), (56.0, 1, self.screenX / 2.0, -15.0), ] self.initializeBackground() self.initializeBGM() self.initializePlayer() self.initializeItem()
class StageThreeBossEnemyHpBar: def __init__(self, spriteGroup, enemy): self.enemy = enemy self.enemyPrevHp = enemy.hp self.spriteGroup = spriteGroup self.hpGuageBarBg = Object(0, 0, "assets/images/hp_bar_guage2.png") self.hpGuageBar = Object(0, 0, "assets/images/hp_bar_guage.png") self.hpGuageBar2 = Object(0, 0, "assets/images/hp_bar_guage3.png") self.hpGuageBar3 = Object(0, 0, "assets/images/hp_bar_guage4.png") self.originalHpGuageBarImage = self.hpGuageBar.image self.originalHpGuageBar2Image = self.hpGuageBar2.image self.originalHpGuageBar3Image = self.hpGuageBar3.image self.hpGuageBarEdge = Object(0, 0, "assets/images/hp_bar_edge.png") screenSize = pygame.display.get_surface().get_size() self.hpGuageBarBg.x = screenSize[0] / 2 + 17 self.hpGuageBarBg.y = 55 self.hpGuageBar.x = screenSize[0] / 2 + 17 self.hpGuageBar2.x = screenSize[0] / 2 + 17 self.hpGuageBar3.x = screenSize[0] / 2 + 17 self.originalHpGuageBarX = self.hpGuageBar.x self.hpGuageBar.y = 55 self.hpGuageBar2.y = 55 self.hpGuageBar3.y = 55 self.hpGuageBarEdge.x = screenSize[0] / 2 self.hpGuageBarEdge.y = 55 self.spriteGroup.add(self.hpGuageBarBg) self.spriteGroup.add(self.hpGuageBar) self.spriteGroup.add(self.hpGuageBar2) self.spriteGroup.add(self.hpGuageBar3) self.spriteGroup.add(self.hpGuageBarEdge) self.hpGuageBarBg.update() self.hpGuageBar.update() self.hpGuageBar2.update() self.hpGuageBar3.update() self.hpGuageBarEdge.update() def __del__(self): self.spriteGroup.remove(self.hpGuageBarBg) self.spriteGroup.remove(self.hpGuageBar) self.spriteGroup.remove(self.hpGuageBar2) self.spriteGroup.remove(self.hpGuageBar3) self.spriteGroup.remove(self.hpGuageBarEdge) def update(self): # 적 Hp에 변화가 생겼다면 if self.enemyPrevHp is not self.enemy.hp: if self.enemy.hp >= 105: hpGuageBarWidth = int( self.lerp(self.originalHpGuageBar3Image.get_rect().width, 0, 1.0 - (self.enemy.hp - 105) / 75)) self.hpGuageBar3.image = pygame.transform.scale( self.originalHpGuageBar3Image, (hpGuageBarWidth, self.originalHpGuageBar3Image.get_rect().height)) self.hpGuageBar3.x = self.originalHpGuageBarX - ( self.originalHpGuageBar3Image.get_rect().width - self.hpGuageBar3.image.get_rect().width) / 2 elif self.enemy.hp >= 30: hpGuageBarWidth = int( self.lerp(self.originalHpGuageBar2Image.get_rect().width, 0, 1.0 - (self.enemy.hp - 30) / 75)) self.hpGuageBar2.image = pygame.transform.scale( self.originalHpGuageBar2Image, (hpGuageBarWidth, self.originalHpGuageBar2Image.get_rect().height)) self.hpGuageBar2.x = self.originalHpGuageBarX - ( self.originalHpGuageBar2Image.get_rect().width - self.hpGuageBar2.image.get_rect().width) / 2 else: hpGuageBarWidth = int( self.lerp(self.originalHpGuageBarImage.get_rect().width, 0, 1.0 - self.enemy.hp / 30)) self.hpGuageBar.image = pygame.transform.scale( self.originalHpGuageBarImage, (hpGuageBarWidth, self.originalHpGuageBarImage.get_rect().height)) self.hpGuageBar.x = self.originalHpGuageBarX - ( self.originalHpGuageBarImage.get_rect().width - self.hpGuageBar.image.get_rect().width) / 2 self.enemyPrevHp = self.enemy.hp def lerp(self, fromValue, toValue, t): return fromValue + (toValue - fromValue) * t
def update(self): if self.image is not None: self.rect = self.image.get_rect() self.rect.center = (self.x * 0.5, self.y * 0.5) self.mousePos = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() if self.sceneManager.gameLevel == 1: self.selectOption.x = self.menu[0].x + 150 self.selectOption.y = self.menu[0].y elif self.sceneManager.gameLevel == 2: self.selectOption.x = self.menu[1].x + 150 self.selectOption.y = self.menu[1].y elif self.sceneManager.gameLevel == 3: self.selectOption.x = self.menu[2].x + 150 self.selectOption.y = self.menu[2].y self.selectOption.update() for i in range(4): if i == 0: if 155 < self.mousePos[0] < 325 and 260 < self.mousePos[ 1] < 310: self.menu[i] = (Object( 0, 0, "assets/images/buttonOptionsEasyHover.png")) if click[0] == 1: self.sceneManager.gameLevel = 1 else: self.menu[i] = (Object(0, 0, self.buttonImage1)) elif i == 1: if 57 < self.mousePos[0] < 423 and 370 < self.mousePos[1] < 420: self.menu[i] = (Object( 0, 0, "assets/images/buttonOptionsNormalHover.png")) if click[0] == 1: self.sceneManager.gameLevel = 2 else: self.menu[i] = (Object(0, 0, self.buttonImage2)) elif i == 2: if 173 < self.mousePos[0] < 307 and 480 < self.mousePos[ 1] < 530: self.menu[i] = (Object( 0, 0, "assets/images/buttonOptionsHardHover.png")) if click[0] == 1: self.sceneManager.gameLevel = 3 else: self.menu[i] = (Object(0, 0, self.buttonImage3)) else: if 173 < self.mousePos[0] < 307 and 580 < self.mousePos[ 1] < 630: self.menu[i] = (Object( 0, 0, "assets/images/buttonQuitHover.png")) if click[0] == 1: self.sceneManager.setScene( titleScene.TitleScene(self.screen)) else: self.menu[i] = (Object(0, 0, self.buttonImage4)) self.menu[i].x = 0.5 * self.screenX self.menu[i].y = 0.35 * self.screenY + i * 110 self.menu[i].update()