def __init__(self): # initialize game window, etc pg.init() pg.mixer.init() # dimension of window self.winWidth = 500 self.winLength = 281 # window set-up self.screen = pg.display.set_mode(size=(self.winWidth, self.winLength)) pg.display.set_caption("Shinobi Warrior") self.keys = pg.key.get_pressed() self.clock = pg.time.Clock() self.background_no = 1 self.last_update = 0 self.playing = False self.running = True self.score = 0 self.font2 = pg.font.Font('../fonts/Bank_Gothic_Medium_BT.ttf', 15) self.font = pg.font.Font('../fonts/Bank_Gothic_Medium_BT.ttf', 20) self.red = Enemy(420, 188) self.health_bar = pg.sprite.Group() self.enemies = pg.sprite.Group() self.kunais = pg.sprite.Group() self.red = Enemy(420, 188) self.health_bar.add(Health(30, 10)) self.health_bar.add(Health(60, 10)) self.health_bar.add(Health(90, 10)) self.enemies.add(self.red) self.kunais.add(Kunai())
def __init__(self): health = 20 Health.__init__(self, health, "health") self.countDamage = 0 posX = 0 posY = 0 self.setPosition(posX, posY) self.animate()
def draw(self): if self.is_death: self.image.draw(self.x,self.y, 150, 60) else: self.body_image.clip_draw(105 * int(self.body_frame), self.body_bottom, 60, 60, self.body_x, self.body_y) self.image.clip_draw(int(self.frame) * 80 + self.left, 0, 80, 80, self.x, self.y) for Health in self.heartArray: Health.draw()
def __init__(self): self.x, self.y = BackGround_Width//2, BackGround_Height//2 self.frame = 0 self.image = load_image('resource/isaac_head.png') self.velocity_x = 0 self.velocity_y = 0 self.velocity = RUN_SPEED_PPS self.left = 0 self.body_x, self.body_y = self.x-5, self.y-50 self.body_frame = 0 self.body_image = load_image('resource/isaac_body.png') self.body_is_move = False self.body_bottom = 90 self.start_health = 3 self.now_health = 3 self.health_index = self.start_health-1 self.heartArray = [Health(60*(i+1)) for i in range(self.start_health)] self.is_death = False self.hurt_sound1 = load_wav('sound/hurt1.wav') self.hurt_sound1.set_volume(32) self.hurt_sound2 = load_wav('sound/hurt2.wav') self.hurt_sound2.set_volume(32) self.hurt_sound3 = load_wav('sound/hurt3.wav') self.hurt_sound3.set_volume(32) self.health_item_sound = load_wav('sound/heartIntake.wav') self.health_item_sound.set_volume(32) self.upgradeBullet_item_sound = load_wav('sound/bulletUpgrade.wav') self.upgradeBullet_item_sound.set_volume(32)
def __init__(self): self.name = "ERROR" self.clearance = Clearances.Infrared self.sector = "ERROR" self.clone = 1 self.player = "ERROR" self.skills = Skills() self.health = Health()
def __init__(self, displaywidth, displayheight): self.white = (255, 255, 255) self.black = (0, 0, 0) self.red = (255, 0, 0) self.green = (0, 255, 0) self.blue = (0, 0, 255) self.width = displaywidth self.height = displayheight self.path_height = int(self.height / 15) self.screen = pygame.display.set_mode((self.width, self.height)) bgimage = pygame.image.load("media/images/grassy_area.jpg").convert() self.backgroundImage = pygame.transform.scale( bgimage, (self.width, self.height)) lostImage = pygame.image.load("media/images/wasted.png") self.lost_image = pygame.transform.scale(lostImage, (self.width, self.height)) self.player = Player(self.screen, self.path_height) self.level = Level(self.screen, self.player, self.path_height) self.health = Health(self.screen) self.score = Score(self.screen) self.w_sound = pygame.mixer.Sound("media/sounds/YouWon.wav") self.l_sound = pygame.mixer.Sound("media/sounds/chickens.wav") pygame.display.set_caption("Frogger")
def generate_entity(id: int, team: 'Team' = None) -> Entity: """ Generate entity :param team: :param id: :return: new entity """ default_ai = ai.Ai() name = names.get_full_name() fast_attack = Action(f'fast hit', 'enemy', 1, 2, get_melee_cooldown(1)) normal_attack = Action(f'normal attack', 'enemy', 1, 5, get_melee_cooldown(2)) heavy_attack = Action(f'heavy strike', 'enemy', 1, 7, get_melee_cooldown(3)) pistol_shot = Action('pistol shot', 'enemy', 1, 20, get_perk_cooldown(10)) # pistol simple_heal = Action('hp potion', 'ally', 0, -10, get_perk_cooldown(5)) # drink potion entity = Entity( id, (0, 0), f'{name}', Health(25), default_ai, dict(), { fast_attack, normal_attack, heavy_attack, pistol_shot, simple_heal, }, team=team, ) return entity
class FroggerGame(): def __init__(self, displaywidth, displayheight): self.white = (255, 255, 255) self.black = (0, 0, 0) self.red = (255, 0, 0) self.green = (0, 255, 0) self.blue = (0, 0, 255) self.width = displaywidth self.height = displayheight self.path_height = int(self.height / 15) self.screen = pygame.display.set_mode((self.width, self.height)) bgimage = pygame.image.load("media/images/grassy_area.jpg").convert() self.backgroundImage = pygame.transform.scale( bgimage, (self.width, self.height)) lostImage = pygame.image.load("media/images/wasted.png") self.lost_image = pygame.transform.scale(lostImage, (self.width, self.height)) self.player = Player(self.screen, self.path_height) self.level = Level(self.screen, self.player, self.path_height) self.health = Health(self.screen) self.score = Score(self.screen) self.w_sound = pygame.mixer.Sound("media/sounds/YouWon.wav") self.l_sound = pygame.mixer.Sound("media/sounds/chickens.wav") pygame.display.set_caption("Frogger") def event(self): for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() self.player.movement(event) def clean_events(self): for event in pygame.event.get(): pass def completed_level(self, Player): if Player.y <= 0: return True return False def show(self): self.screen.blit(self.backgroundImage, (0, 0)) self.level.show() self.player.show() self.health.show() self.score.show() pygame.display.update() def creat_text(self, text, color=(255, 0, 0), locationX=0, locationY=0): text = Text(self.screen, text, 80, color, locationX, locationY) text.show() pygame.display.update() return (text) def reset_game(self): self.screen.blit(self.lost_image, (0, 0)) self.instruction = self.creat_text("(press space to play again)", (255, 0, 0), 0, self.height - 80) wait = True while wait: for event in pygame.event.get(): if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: self.health.reset_health() self.score.reset_score() self.player.reset() self.level = Level(self.screen, self.player, self.path_height) self.player.image = self.player.u_image wait = False def run(self): while True: self.event() self.show() self.level.traffic(self.player) if self.level.failed(self.player): pygame.mixer.Sound.play(self.l_sound) if not self.health.loose_health(): self.reset_game() else: time.sleep(1) self.player.reset() self.level = Level(self.screen, self.player, self.path_height) self.clean_events() self.player.image = self.player.u_image pygame.mixer.Sound.stop(self.l_sound) if self.player.player_won(): self.score.add_score() self.creat_text("Level completed!", (0, 255, 0)) pygame.mixer.Sound.play(self.w_sound) time.sleep(1) self.player.reset() self.level = Level(self.screen, self.player, self.path_height) self.player.image = self.player.u_image
def drawGame(self, screen): screen.fill(self.bgColor) w, h, m = self.width, self.height, self.margin scoreFont = pygame.font.Font("DINPro.otf", 40) scoreText = scoreFont.render('%d' % (self.score), True, WHITE) scoreRect = scoreText.get_rect() scoreRect.centerx, scoreRect.centery = w // 2, h // 2 titleFont = pygame.font.Font("DINPro.otf", 20) textTitle = titleFont.render("planet parasite", True, WHITE) textTitlerect = textTitle.get_rect() textTitlerect.centerx, textTitlerect.centery = w // 2, (m // 2) #add inhabited planets if self.frameCount % 60 == 0: inhabitedNew = Inhabited(0, 0) self.inhabitedGroup.add(inhabitedNew) # print ('new uninhabited') #add a planet every so often if self.frameCount % 60 == 0: planet = Planet(2, WHITE) self.planetGroup.add(planet) # print ('new planet') #add eat me powerups at random time if self.frameCount % random.randrange(500, 600) == 0: eatMeColors = [YELLOW, BLUE, GREEN] eatMe = Planet(0, random.choice(eatMeColors)) if eatMe.color == YELLOW: #if invincibility planet self.eatMeInvGroup.add(eatMe) elif eatMe.color == BLUE: #if stop self.eatMeStopGroup.add(eatMe) elif eatMe.color == GREEN: #if ten len self.eatMeTenGroup.add(eatMe) #add a life at random times, less frequent if self.frameCount % random.randrange(1000, 1500) == 0: eatMe = Health() self.eatMeLifeGroup.add(eatMe) #collision detections: for parasite in self.parasite: if self.attack: collisionAttackList = pygame.sprite.spritecollide( parasite, self.inhabitedGroup, False, pygame.sprite.collide_circle) for attacked in collisionAttackList: self.inhabitedGroup.remove(attacked) elif not self.attack: # if attack mode off and invincibility not enabled #if collision with a planet collisionPlanetsList = pygame.sprite.spritecollide( parasite, self.planetGroup, False, pygame.sprite.collide_circle) for capturedPlanet in collisionPlanetsList: self.planetGroup.remove(capturedPlanet) self.score += 10 #if collision with heart collisionEatMeLifeList = pygame.sprite.spritecollide( parasite, self.eatMeLifeGroup, False, pygame.sprite.collide_circle) for eatMeLife in collisionEatMeLifeList: self.eatMeLifeGroup.remove(eatMeLife) self.lives += 1 self.lives = min(self.lives, 5) #if collision with eat me stop collisionEatMeStopList = pygame.sprite.spritecollide( parasite, self.eatMeStopGroup, False, pygame.sprite.collide_circle) for eatMeStop in collisionEatMeStopList: self.eatMeStopGroup.remove(eatMeStop) self.eatMeStop = "collected" #if collision with eat me invincible collisionEatMeInvList = pygame.sprite.spritecollide( parasite, self.eatMeInvGroup, False, pygame.sprite.collide_circle) for eatMeInv in collisionEatMeInvList: self.eatMeInvGroup.remove(eatMeInv) self.eatMeInv = "collected" #if collision with ten len invincible collisionEatMeInvList = pygame.sprite.spritecollide( parasite, self.eatMeTenGroup, False, pygame.sprite.collide_circle) for eatMeTen in collisionEatMeInvList: self.eatMeTenGroup.remove(eatMeTen) self.eatMeTen = "collected" #if invincibility is not on, inhabited can harm parasite if not self.eatMeInv == "enabled": collisionInhabitedList = pygame.sprite.spritecollide( parasite, self.formedInhabitedGroup, False, pygame.sprite.collide_circle) for hitInhabited in collisionInhabitedList: hitInhabited.stopUpdating( PINK ) #turn the hit inhabited planet pink for right now self.formedInhabitedGroup.remove( hitInhabited) #remove inhabited self.lives -= 1 # change length of tentacles based on lives if not self.eatMeTen == "enabled": if self.lives == 4: self.tentaclesMin = 25 self.tentaclesMax = 35 self.divisions = 100 if self.lives == 3: self.tentaclesMin = 15 self.tentaclesMax = 25 self.divisions = 90 if self.lives == 2: self.tentaclesMin = 5 self.tentaclesMax = 15 self.divisions = 80 if self.lives == 1: self.tentaclesMin = 3 self.tentaclesMax = 6 self.divisions = 70 if self.lives == 0: self.gamePlay = False self.tentaclesMin = 35 self.tentaclesMax = 45 self.highScore = self.score #reduce radius by a few pixels to get make appearance better self.parasite.update(self.tentaclesMax - 7) #DRAW STATEMENTS self.inhabitedGroup.draw( screen) #keep this at bottom of all draw statements for star in self.starList: pygame.draw.circle(screen, DARKGREY, (star[0], star[1]), 2) self.planetGroup.draw(screen) self.formedInhabitedGroup.draw(screen) self.parasite.draw(screen) self.eatMeInvGroup.draw(screen) self.eatMeStopGroup.draw(screen) self.eatMeTenGroup.draw(screen) self.eatMeLifeGroup.draw(screen) #draw tentacles for div in range(self.divisions): divAngle = div * ((math.pi * 2) / self.divisions) self.length = random.randrange(self.tentaclesMin, self.tentaclesMax) outerDivX = w // 2 + ( (self.parasiteSize + self.length) * math.cos(divAngle)) outerDivY = h // 2 + ( (self.parasiteSize + self.length) * math.sin(divAngle)) innerDivX = w // 2 + ((self.parasiteSize + 6) * math.cos(divAngle)) innerDivY = h // 2 + ((self.parasiteSize + 6) * math.sin(divAngle)) pygame.draw.line(screen, self.tentacleColor, (innerDivX, innerDivY), (outerDivX, outerDivY), 1) #draw lives hX = self.width // 20 for i in range(self.lives): hY = (self.height // 25) * (8 + i) screen.blit(self.heartFilled, (hX - 12, hY)) for i in range(5): hY = (self.height // 25) * (8 + i) screen.blit(self.heartEmpty, (hX - 12, hY)) # eatMeStop discontinue growth of developing planets (BLUE 1) eSX = self.width // 20 eSY = (self.height // 28) * 19 if self.eatMeStop == "collected": pygame.draw.rect(screen, BLUE, (eSX - 20, eSY, 40, 40)) if self.frameCount % 5 == 0: #inhabited planets get larger and larger as time goes on for inhabited in self.inhabitedGroup: #if inhabited planet gets larger than a certain size if (inhabited.inhabitedSize >= .15 * min(inhabited.imageX, inhabited.imageY)): inhabited.stopUpdating(WHITE) inhabited.dotted() self.formedInhabitedGroup.add(inhabited) self.inhabitedGroup.remove(inhabited) else: inhabited.update() if self.eatMeStop == "enabled": self.eatMeStopCount += 1 pygame.draw.rect(screen, RED, (eSX - 20, eSY, 40, 40)) if self.eatMeStopCount >= 100: #timer ends for eatme powerup self.eatMeStop = "empty" self.eatMeStopCount = 0 if self.eatMeStop == "empty": pygame.draw.rect(screen, CHARCOAL, (eSX - 20, eSY, 40, 40)) if self.frameCount % 5 == 0: #inhabited planets get larger and larger as time goes on for inhabited in self.inhabitedGroup: #if inhabited planet gets larger than a certain size if (inhabited.inhabitedSize >= .15 * min(inhabited.imageX, inhabited.imageY)): inhabited.stopUpdating(WHITE) inhabited.dotted() self.formedInhabitedGroup.add(inhabited) self.inhabitedGroup.remove(inhabited) else: inhabited.update() if self.eatMeCurr == 1: pygame.draw.rect(screen, WHITE, (eSX - 20, eSY, 40, 40), self.eatMeCurrLine) elif not self.eatMeCurr == 1: pygame.draw.rect(screen, WHITE, (eSX - 20, eSY, 40, 40), 1) pygame.draw.circle(screen, GREY, (eSX, eSY + 20), 10, 1) pygame.draw.line(screen, GREY, (eSX - 7, eSY - 7 + 20), (eSX + 7, eSY + 7 + 20), 1) # eatMeInv invincibility (YELLOW 2) eIX = self.width // 20 eIY = (self.height // 28) * 17 if self.eatMeInv == "collected": pygame.draw.rect(screen, YELLOW, (eIX - 20, eIY, 40, 40)) if self.eatMeInv == "enabled": self.eatMeStopCount += 1 pygame.draw.rect(screen, RED, (eIX - 20, eIY, 40, 40)) if self.eatMeStopCount >= 100: #timer ends for eatme powerup self.eatMeInv = "empty" self.eatMeStopCount = 0 if (self.eatMeInv == "empty"): pygame.draw.rect(screen, CHARCOAL, (eIX - 20, eIY, 40, 40)) if self.eatMeCurr == 2: pygame.draw.rect(screen, WHITE, (eIX - 20, eIY, 40, 40), self.eatMeCurrLine) #border box elif not self.eatMeCurr == 2: pygame.draw.rect(screen, WHITE, (eIX - 20, eIY, 40, 40), 1) #border box screen.blit(self.shield, (eIX - 9, eIY + 10)) # eatMeTen increase tentacle lengths regardless of lives (GREEN 3) eTX = self.width // 20 eTY = (self.height // 28) * 15 if self.eatMeTen == "collected": pygame.draw.rect(screen, GREEN, (eTX - 20, eTY, 40, 40)) if self.eatMeTen == "enabled": self.eatMeTenCount += 1 self.tentaclesMin = 45 self.tentaclesMax = 60 pygame.draw.rect(screen, RED, (eTX - 20, eTY, 40, 40)) if self.eatMeTenCount >= 300: #timer ends for eatme powerup self.eatMeTen = "empty" self.eatMeTenCount = 0 if (self.eatMeTen == "empty"): pygame.draw.rect(screen, CHARCOAL, (eTX - 20, eTY, 40, 40)) if self.eatMeCurr == 3: pygame.draw.rect(screen, WHITE, (eTX - 20, eTY, 40, 40), self.eatMeCurrLine) #border box elif not self.eatMeCurr == 3: pygame.draw.rect(screen, WHITE, (eTX - 20, eTY, 40, 40), 1) #border box pygame.draw.line(screen, GREY, (eTX, eTY + 15), (eTX, eTY + 25), 1) #plus sign vertical pygame.draw.line(screen, GREY, (eTX - 5, eTY + 20), (eTX + 5, eTY + 20), 1) #plus sign horizontal screen.blit(self.tentImage, (eTX - 17, eTY + 5)) # attack Mode if self.attack: self.tentacleColor = RED self.attackMeter -= 3 #reduce attack meter faster if self.attackMeter <= 0: self.attackMeter = 0 #keep attack meter at minimum of 0 if not self.attack: self.tentacleColor = WHITE if self.frameCount % 30 == 0: #regain attack meter slowly self.attackMeter += 1 self.attackMeter = min(self.attackMeter, 100) #keep attackmeter at max of 100 aX = self.width // 20 aY0 = (self.height // 14) * 13 aY1 = aY0 - (1.5 * self.attackMeter) pygame.draw.rect(screen, WHITE, (aX - 5, aY0 - 150, 12, 150), 1) # border for bar if self.attackMeter > 0: pygame.draw.line(screen, self.tentacleColor, (aX, aY0), (aX, aY1), 12) elif self.attackMeter <= 0: pygame.draw.line(screen, self.tentacleColor, (aX, aY0), (aX, aY0), 12) attackFont = pygame.font.Font("DINPro.otf", 16) attackText = attackFont.render('%d' % (max(self.attackMeter, 0)), True, WHITE) attackRect = attackText.get_rect() attackRect.centerx = aX attackRect.centery = aY0 + 15 #draw text screen.blit(scoreText, scoreRect) screen.blit(textTitle, textTitlerect) screen.blit(attackText, attackRect)
def __init__(self): self.attr = Attributes() self.health = Health() self.transient = Transient()
def __init__(self, health): Health.__init__(self, health, "zombie_health") self.animate()
def __init__(self): self.__health = Health(100)