class Game: def __init__(self): self.gameName = "Dungeons & Pythons" self._image_library = {} self.screen = pygame.display.set_mode((900, 750)) self.gameOver = False self.clock = pygame.time.Clock() self.roundNumber = 0 self.player = Player(100, "Hero", 25, 50, 125, "assets/player/player.png") self.boss = Enemy(100, "The BOSS: Dragon", 20, 550, 100, "assets/monsters/boss.png", 300, 200) self.enemies = [Enemy(50, "Cloud ashes", 10, 550, 100, "assets/monsters/ashesSnake.png", 50, 10), Enemy(50, "Yaretzi", 15, 550, 100, "assets/monsters/aztecaSnake.png", 50, 15), Enemy(40, "Konoha", 7, 550, 100, "assets/monsters/fireFairy.png", 40, 10), Enemy(35, "Fire spliter", 10, 550, 100, "assets/monsters/fireLizard.png", 35, 10), Enemy(40, "Duchy", 7, 550, 100, "assets/monsters/groundFairy.png", 40, 10), Enemy(45, "Medusa's daughter", 13, 550, 100, "assets/monsters/groundSnake.png", 45, 13), Enemy(40, "Imperial", 12, 550, 100, "assets/monsters/imperialBird.png", 40, 12), Enemy(35, "Scissors", 9, 550, 100, "assets/monsters/scorpio.png", 35, 10), Enemy(20, "Awesome bats", 8, 550, 100, "assets/monsters/triBats.png", 20, 10), Enemy(45, "Hydra", 14, 550, 100, "assets/monsters/triHead.png", 45, 14), Enemy(25, "The python brothers", 5, 550, 100, "assets/monsters/triSnakes.png", 25, 10), Enemy(40, "Amega", 7, 550, 100, "assets/monsters/waterFairy.png", 40, 7)] self.currentEnemy = self.getRandomRegularEnemy() self.actionSelected = False self.arrowMenuPosition = Position.TOPLEFT def run(self): pygame.init() pygame.display.set_caption(self.gameName) while not self.gameOver: for event in pygame.event.get(): if event.type == pygame.QUIT: self.gameOver = True self.keyEvents(event) self.screen.fill((0, 0, 0)) self.buildGUI(self.screen) pygame.display.flip() self.clock.tick(60) pygame.quit() def keyEvents(self, event): if event.type == 3: #key down if event.key == 274: if self.arrowMenuPosition == Position.TOPLEFT: self.arrowMenuPosition = Position.BOTTOMLEFT elif self.arrowMenuPosition == Position.TOPRIGHT: self.arrowMenuPosition = Position.BOTTOMRIGHT #key up elif event.key == 273: if self.arrowMenuPosition == Position.BOTTOMLEFT: self.arrowMenuPosition = Position.TOPLEFT elif self.arrowMenuPosition == Position.BOTTOMRIGHT: self.arrowMenuPosition = Position.TOPRIGHT #key left elif event.key == 276: if self.arrowMenuPosition == Position.TOPRIGHT: self.arrowMenuPosition = Position.TOPLEFT elif self.arrowMenuPosition == Position.BOTTOMRIGHT: self.arrowMenuPosition = Position.BOTTOMLEFT #key right elif event.key == 275: if self.arrowMenuPosition == Position.TOPLEFT: self.arrowMenuPosition = Position.TOPRIGHT elif self.arrowMenuPosition == Position.BOTTOMLEFT: self.arrowMenuPosition = Position.BOTTOMRIGHT #key enter elif event.key == 13: self.playAction() def buildGUI(self, view): #background displayImage(view, 'assets/recources/bg.png', 0, 0) #bottom panel displayImage(view, 'assets/recources/panel.png', 0, 475) #palyer self.player.draw(view) #enemy self.currentEnemy.draw(view) #buttons self.drawButtons(view) #player information self.drawPlayerInfo(view) #menu arrow self.drawArrowMenu(view) #armor self.drawArmor(view) #enemy info self.drawEnemyLife(view) def playAction(self): if self.arrowMenuPosition == Position.TOPLEFT: self.attackAction() elif self.arrowMenuPosition == Position.TOPRIGHT: self.healAction() elif self.arrowMenuPosition == Position.BOTTOMLEFT: self.armorAction() elif self.arrowMenuPosition == Position.BOTTOMRIGHT: self.exitGame() def exitGame(self): self.gameOver = True def attackAction(self): self.player.attack(self.currentEnemy) if self.currentEnemy.isDead(): self.nextRound() else: self.currentEnemy.attack(self.player) if self.player.isDead(): self.exitGame() def healAction(self): self.player.heal() def armorAction(self): self.player.addArmor() def drawButtons(self, view): #attack button self.drawButton(view,'ATTACK', 65, 533, 'assets/ui/button.png') #heal button self.drawHealButton(view) #armor button self.drawArmorButton(view) #exit button self.drawButton(view,'EXIT', 450, 618, 'assets/ui/button.png') def drawButton(self, view, text, x, y, buttonSprite, textColor = (255, 255, 255)): displayImage(view, buttonSprite, x, y) displayTextCentered(view, text, x, y, textColor) def drawHealButton(self, view): textColor = (255, 255, 255) if self.player.canHeal() else (149, 129, 115) buttonSprite = 'assets/ui/button.png' if self.player.canHeal() else 'assets/ui/button_disable.png' self.drawButton(view, 'HEAL(20C)', 450, 533, buttonSprite, textColor) def drawArmorButton(self, view): textColor = (255, 255, 255) if self.player.canAddArmor() else (149, 129, 115) buttonSprite = 'assets/ui/button.png' if self.player.canAddArmor() else 'assets/ui/button_disable.png' armorCost = self.player.getArmorCost() buttonText = 'ARMOR('+str(armorCost)+'C)' if self.player.armor < self.player.MAX_ARMOR else 'MAX ARMOR' self.drawButton(view, buttonText, 65, 618, buttonSprite, textColor) def drawPlayerInfo(self, view): #heal Poins lifePercent = self.getPercentPoints(self.player.health, self.player.healthMax, 460) pygame.draw.rect(view, (255,0,0), (50, 405, lifePercent, 49)) #heal GUI displayImage(view, 'assets/ui/hp_bar.png', 30, 405) #experience points expPercent = self.getPercentPoints(self.player.level.experience, self.player.level.experienceNextLevel, 336) pygame.draw.rect(view, (255,192,0), (65, 30, expPercent, 10)) #experience GUI displayImage(view, 'assets/ui/experience.png', 10, 10) #level displayTextCentered(view, str(self.player.level.level), 22, 22, width=25, height=25, fontSize=30) #money moneyStrSizes = get_text(str(self.player.money), (255, 255, 255), 45).get_rect() displayText(view, str(self.player.money), (900 - moneyStrSizes.width - 20), 20) displayImage(view, 'assets/ui/coin.png', (900 - moneyStrSizes.width - 78), 15) #round roundStrSizes = get_text(str(self.roundNumber), (255, 255, 255), 45).get_rect() displayText(view, str(self.roundNumber), (900 - roundStrSizes.width - 20), 80) displayImage(view, 'assets/ui/kills.png', (900 - roundStrSizes.width - 78), 75) def drawEnemyLife(self, view): lifePercent = self.getPercentPoints(self.currentEnemy.health, self.currentEnemy.healthMax, 138) pygame.draw.rect(view, (255,0,0), (603, 400, lifePercent, 15)) displayImage(view, 'assets/ui/enemy_hp_bar.png', 600, 400) def drawArrowMenu(self, view): if self.arrowMenuPosition == Position.TOPLEFT: displayImage(view, 'assets/ui/menu_arrow.png', 42, 540) elif self.arrowMenuPosition == Position.TOPRIGHT: displayImage(view, 'assets/ui/menu_arrow.png', 430, 540) elif self.arrowMenuPosition == Position.BOTTOMLEFT: displayImage(view, 'assets/ui/menu_arrow.png', 42, 628) elif self.arrowMenuPosition == Position.BOTTOMRIGHT: displayImage(view, 'assets/ui/menu_arrow.png', 430, 628) def drawArmor(self, view): if self.player.armor > 0: displayImage(view, 'assets/ui/armor.png', 480, 350) if self.player.armor > 1: displayImage(view, 'assets/ui/armor.png', 428, 350) if self.player.armor > 2: displayImage(view, 'assets/ui/armor.png', 376, 350) if self.player.armor > 3: displayImage(view, 'assets/ui/armor.png', 324, 350) if self.player.armor > 4: displayImage(view, 'assets/ui/armor.png', 272, 350) def getPercentPoints(self, points, maxPoints, maxPercent): if points <= 0: return 0 else: points = (points*maxPercent)/maxPoints return int(points) def nextRound(self): self.roundNumber += 1 self.player.money += self.currentEnemy.moneyWhenDying self.player.level.addExperience(self.currentEnemy.experienceWhenDying) self.setCurrentEnemy() def setCurrentEnemy(self): if self.roundNumber % 10 == 0: self.currentEnemy = self.getBossEnemy() else: self.currentEnemy = self.getRandomRegularEnemy() self.currentEnemy.upgradeStatsAcordingLevel(self.roundNumber) def getRandomRegularEnemy(self): randomIndex = random.randint(0, len(self.enemies)-1) enemy = self.enemies[randomIndex] return enemy def getBossEnemy(self): enemy = self.boss return enemy