def draw(): gfw.world.draw() # UI global score font = gfw.font.load(gobj.res('ENCR10B.TTF'), 30) font.draw(900, 540, 'Score: %.lf' % score) for i in range(heart): heartObj = Heart(1095 - (i * 50), 605) heartObj.draw()
def prep_hearts(self): self.hearts = Group() for heart_number in range(self.stats.ships_left): heart = Heart(self.ai_game) heart.rect.x = 10 + heart_number * heart.rect.width heart.rect.y = 10 self.hearts.add(heart)
def run_game(): #初始化游戏并创建一个屏幕对象 pygame.init() screen = pygame.display.set_mode((1200, 800)) so_setting = Setting() pygame.display.set_caption("Shot one") #新建对象 bow = Bow(so_setting, screen) arrow = Arrow(so_setting, screen, bow) heart = Heart(so_setting, screen) score = Scoreboard(so_setting, screen) #游戏的主循环 while True: gf.check_events(arrow, bow) #更新三个对象 gf.update_bow(bow) gf.update_arrow(arrow, heart, so_setting, score) gf.update_heart(heart) #更新屏幕 gf.update_screen(screen, so_setting, bow, arrow, heart, score) #显示最新的屏幕 pygame.display.flip()
def prep_hearts(self):# self.hearts=Group() for ship_number in range(self.stats.ships_left): heart=Heart(self.ai_settings,self.screen) heart.rect.x=10+ship_number*heart.rect.width heart.rect.y=10 self.hearts.add(heart)
def set_lives(setting, screen, stats, lives): life = Heart(setting, screen) width = life.rect.width height = life.rect.height for num in range(stats.lives): make_life(setting, screen, lives, width + 2 * width * num, height)
def create_world(): global boy, background, zombies, lizards, octopuses, hearts boy = Boy() background = Background(600, 600) hearts = [Heart() for i in range(5)] zombies = [Zombie() for i in range(4)] lizards = [Lizard() for i in range(4)] octopuses = [Octopus() for i in range(4)]
def prep_ships(self): """Show how many ships are left.""" self.ships = Group() for ship_number in range(self.stats.ships_left): heart = Heart(self.ai_settings, self.screen) heart.rect.x = 10 + ship_number * heart.rect.width heart.rect.y = 10 self.ships.add(heart)
def prep_hearts(self): """Show how many hearts are left.""" self.hearts = Group() for heart_number in range(self.stats.ships_left): heart = Heart(self.si_game) heart.rect.x = self.settings.screen_width * 0.01 + heart_number * self.settings.screen_width * 0.06 heart.rect.y = self.settings.screen_width * 0.01 self.hearts.add(heart)
def prep_hearts(self): """Show how many wizard's hearts are left.""" self.hearts = Group() for wizard_number in range(self.stats.wizards_left): heart = Heart() heart.rect.x = 10 + wizard_number * heart.rect.width heart.rect.y = 10 self.hearts.add(heart)
def prep_lives(self): """Graphically display the number of lives left""" self.hearts = Group() for heart_number in range(self.stats.ships_left): heart = Heart(self.ai_settings, self.screen) heart.rect.x = self.screen_rect.right - 60 - (heart_number * heart.rect.width) heart.rect.bottom = self.screen_rect.bottom - 10 self.hearts.add(heart)
def make_life(setting, screen, lives, x, y): #Set up life = Heart(setting, screen) #Set position life.rect.x = x life.rect.y = y lives.add(life)
def prep_lives(self): """ Сообщает количество оставшихся кораблей(жизней) """ self.lives = Group() for life_number in range(self.stats.lives_left): life = Heart(self.dragons_game) life.rect.x = 10 + life_number * life.rect.width life.rect.y = 10 self.lives.add(life)
def _init_items(self): item_map = self.level.item_map num_items = 2 for i in range(0, num_items): position = self._drop_item() if position is None: print("lvl-%d Unable to find open spot for (item)." % self.level.depth) else: item = Heart(item_map, position)
def check_brick_collision(self, bricks, hearts): rect = self.get_rect() for brick in bricks: if rect.colliderect(brick.get_rect()): brick.life -= 1 if brick.life == 0: if random.random() >= 0.95: hearts.append( Heart(brick.get_rect().centerx - HEART_SIZE / 2, brick.y + brick.height)) bricks.remove(brick) return True
def brick_collision(self, bricks, hearts): if self.circle: circle_centerx = self.circle.centerx for brick in bricks: rect = brick.get_rect() if rect.colliderect(self.circle): if rect.left - SIZE / 2 + self.vel < circle_centerx < rect.right + SIZE / 2 - self.vel: self.angle = 360 - self.angle else: self.angle = 180 - self.angle self.angle = (self.angle + 360) % 360 brick.life -= 1 if brick.life == 0: if random.random() >= 0.95: hearts.append( Heart( brick.get_rect().centerx - HEART_SIZE / 2, brick.y + brick.height)) bricks.remove(brick) return True
def __init__(self, al_game): super().__init__() self.screen = al_game.screen self.settings = al_game.settings self.screen_rect = al_game.screen.get_rect() #load the sahip image and its rect self.image = pygame.image.load('ship.bmp') self.rect = self.image.get_rect() #start each new ship at the left of screen self.rect.midleft = self.screen_rect.midleft self.y = float(self.rect.y) self.x = float(self.rect.x) #moving flag self.moving_down = False self.moving_up = False self.moving_left = False self.moving_right = False self.heart = Heart(self) #avoid player to stay on top all the time
plane2 = Plane("green") # Объект типа GUI gui = GUI() # Объекты типа Fuel fuels = [] for i in range(0, 2): fuels.append(Fuel()) # Объекты типа Bullet bullets = [] for i in range(0, 10): bullets.append(Bullet()) # Объекты типа Heart hearts = [] for i in range(0, 2): hearts.append(Heart()) while control.flag_game: control.Control() control.DrawBackground(win) plane1.Animation(win) plane1.Shoot(win, plane2) plane1.Fuel() plane1.Health(win, control) # plane1.Health(win, (243, 224, 119)) # plane1.Fuel(win, (243, 224, 119)) if plane1.bexplosion: plane1.Explosion(win, control) plane2.Animation(win)
def __play_game(self): # Groups g_lives = pygame.sprite.Group() g_player = pygame.sprite.Group() g_all_invaders = InvadersGroup(rows=4) g_bullet_player = pygame.sprite.Group() g_bullet_invaders = pygame.sprite.Group() g_all_sprites = pygame.sprite.Group() g_blockers = pygame.sprite.Group() # Player player = Player(self.WIDE) player.rect.x, player.rect.y = 100, 500 g_player.add(player) g_all_sprites.add(player) # Lives g_lives.add(Heart((50, self.HEIGHT - (self.HEIGHT * 0.07)))) g_lives.add(Heart((100, self.HEIGHT - (self.HEIGHT * 0.07)))) g_lives.add(Heart((150, self.HEIGHT - (self.HEIGHT * 0.07)))) g_all_sprites.add(g_lives.sprites()) # Blockers all_blockers = pygame.sprite.Group(self.make_blockers(0), self.make_blockers(1), self.make_blockers(2), self.make_blockers(3)) g_all_sprites.add(all_blockers) # Aux vars clock = pygame.time.Clock() wait_time = None start = None self.__configure_level() # Game while not self.END: if len(g_all_invaders.sprites()) == 0: return self.__you_win() # Invaders bullets current_time = pygame.time.get_ticks() if wait_time is None: wait_time = random.uniform(0.5, self.bullet_cadence) start = pygame.time.get_ticks() elapsed_time = (current_time - start) / 1000 if elapsed_time > wait_time: if len(g_all_invaders.sprites()) > 0: rand = random.randint(0, len(g_all_invaders.sprites()) - 1) x_pos = g_all_invaders.sprites()[rand].rect.x y_pos = g_all_invaders.sprites()[rand].rect.y last_invader_bullet = InvaderBullet( (x_pos, y_pos), (self.WIDE, self.HEIGHT)) g_bullet_invaders.add(last_invader_bullet) g_all_sprites.add(last_invader_bullet) wait_time = None # Keys for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: player.move_right(2) if event.key == pygame.K_LEFT: player.move_left(2) if event.key == pygame.K_SPACE: # Player bullet pos = (player.rect.x, player.rect.y) if len(g_bullet_player.sprites()) == 0: last_player_bullet = PlayerBullet( (pos[0] + 17, pos[1]), (self.WIDE, self.HEIGHT)) self.sounds["shoot"].play() g_bullet_player.add(last_player_bullet) g_all_sprites.add(last_player_bullet) if event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT: player.step = 0 if event.type == pygame.QUIT: return # Collisions has_collide = len( pygame.sprite.groupcollide(g_bullet_player, g_all_invaders, True, True)) > 0 if has_collide: self.sounds["invaderkilled"].play() has_collide = len( pygame.sprite.spritecollide(player, g_bullet_invaders, True)) > 0 if has_collide: self.sounds["playerexplosion"].play() g_lives.sprites()[-1].kill() if len(g_lives.sprites()) == 0: self.END = True has_collide = len( pygame.sprite.spritecollide(player, g_all_invaders, True)) > 0 if has_collide: return self.__you_died() pygame.sprite.groupcollide(g_bullet_player, all_blockers, True, True) pygame.sprite.groupcollide(g_bullet_invaders, all_blockers, True, True) pygame.sprite.groupcollide(g_all_invaders, all_blockers, False, True) g_all_sprites.update() g_all_invaders.update(current_time) self.SCREEN.fill(Colors.BLACK) g_all_sprites.draw(self.SCREEN) g_all_invaders.draw(self.SCREEN) pygame.draw.line(self.SCREEN, Colors.WHITE, (0, self.HEIGHT - (self.HEIGHT * 0.1)), (self.WIDE, self.HEIGHT - (self.HEIGHT * 0.1))) pygame.display.flip() clock.tick(60) return self.__you_died()
def main(): # Initialize Pygame pygame.init() # Define screen size = [constants.SCREEN_WIDTH, constants.SCREEN_LENGTH] screen = pygame.display.set_mode(size) pygame.display.set_caption("Zombie Shooter") score = 0 #---List of sprites--- all_sprites_list = pygame.sprite.Group() # Bullet bullet_list = pygame.sprite.Group() # Wall wall = Wall() all_sprites_list.add(wall) # Player player = Player() all_sprites_list.add(player) #---Import/Initialize Sounds--- click_gun = pygame.mixer.Sound("Singleshot.wav") zomb_death = pygame.mixer.Sound("zombdeath.wav") wall_hit = pygame.mixer.Sound("Wallhit.ogg") #----Graphics Position--- background_pos = [0, 0] #---Load / Create Graphics--- background_image = pygame.image.load("grass_template2.jpg").convert() #---Hide the mouse cursor--- pygame.mouse.set_visible(1) #---Create Lists--- zombie_list = pygame.sprite.Group() zombie = Zombie() heart_list = pygame.sprite.Group() heart = Heart() coin_list = pygame.sprite.Group() coin = Coin() #--- Create the sprites ---# for zombie in range(15): zombie = Zombie() zombie.rect.x = random.randint(50, 950) zombie.rect.y = random.randint(-250, 100) zombie_list.add(zombie) all_sprites_list.add(zombie) #---Set up boolean--- done = False #---Clock--- clock = pygame.time.Clock() #---PLayer Start--- player.rect.x = 450 player.rect.y = 600 #---Wall pos--- wall.rect.x = 0 wall.rect.y = 550 wall.health = 5 #---Create while loop for animation--- while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True #Bullet elif event.type == pygame.MOUSEBUTTONDOWN: click_gun.play() # Fire a bullet if the user clicks the mouse button bullet = Bullet() # Set the bullet so it is where the player is bullet.rect.x = player.rect.x + 33 bullet.rect.y = player.rect.y bullet_list.add(bullet) all_sprites_list.add(bullet) # Human WASD elif event.type == pygame.KEYDOWN: if event.key == pygame.K_a: player.go_left() elif event.key == pygame.K_d: player.go_right() elif event.type == pygame.KEYUP: if event.key == pygame.K_a: player.stop() elif event.key == pygame.K_d: player.stop() # Calculate mechanics for each bullet for bullet in bullet_list: # See if it hit a block zombie_hit_list = pygame.sprite.spritecollide(bullet, zombie_list, True) # For each block hit, remove the bullet and add to the score for zombie in zombie_hit_list: zomb_death.play() bullet_list.remove(bullet) all_sprites_list.remove(bullet) score += 1 #heart if score == 10: heart.rect.x = 0 heart.rect.y = random.randint(300, 500) all_sprites_list.add(heart) heart_list.add(heart) #coin elif score == 30: coin.rect.x = 0 coin.rect.y = random.randint(350, 500) all_sprites_list.add(coin) coin_list.add(coin) #waves if score == 10: for zombie in range(15): zombie = Zombie() zombie.rect.x = random.randint(50, 950) zombie.rect.y = random.randint(-350, 100) zombie_list.add(zombie) all_sprites_list.add(zombie) elif score == 20: for zombie in range(20): zombie = Zombie() zombie.rect.x = random.randint(50, 950) zombie.rect.y = random.randint(-350, 100) zombie_list.add(zombie) all_sprites_list.add(zombie) elif score == 30: for zombie in range(25): zombie = Zombie() zombie.rect.x = random.randint(50, 950) zombie.rect.y = random.randint(-350, 100) zombie_list.add(zombie) all_sprites_list.add(zombie) elif score == 40: for zombie in range(5): zombie = Zombie() zombie.rect.x = random.randint(50, 950) zombie.rect.y = random.randint(-350, 100) zombie_list.add(zombie) all_sprites_list.add(zombie) # Remove the bullet if it flies up off the screen if bullet.rect.y < -10: bullet_list.remove(bullet) all_sprites_list.remove(bullet) for zombie in zombie_list: wall_hit_list = pygame.sprite.spritecollide(wall, zombie_list, True) for zombie in wall_hit_list: wall_hit.play() zombie_list.remove(zombie) all_sprites_list.remove(zombie) wall.health -= 1 if wall.health == 0: game_loss() for heart in heart_list: heart_hit_list = pygame.sprite.spritecollide(bullet, heart_list, True) for heart in heart_hit_list: heart_list.remove(heart) bullet_list.remove(bullet) all_sprites_list.remove(bullet, heart) wall.health = 5 for coin in coin_list: coin_hit_list = pygame.sprite.spritecollide(bullet, coin_list, True) for coin in coin_hit_list: coin_list.remove(coin) bullet_list.remove(bullet) all_sprites_list.remove(bullet, coin) score += 10 if score >= 60: game_win() # Update the player. all_sprites_list.update() # ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT screen.blit(background_image, background_pos) all_sprites_list.draw(screen) points(score) healthbar(wall.health) # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT # Limit to 60 frames per second clock.tick(60) # Go ahead and update the screen with what we've drawn. pygame.display.flip() # Be IDLE friendly. If you forget this line, the program will 'hang' # on exit. pygame.quit()
import pygame import os import time from heart import Heart os.environ["SDL_VIDEO_WINDOW_POS"] = "15,30" pygame.display.init() size = 900, 600 screen = pygame.display.set_mode(size) hearts = [Heart(screen, (size[0] / 2, size[1] / 2), 10, size)] * 20 running = True pygame.key.set_repeat(40) while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: if event.unicode >= '0' and event.unicode <= '9': Heart.selected_color = int(event.unicode) screen.fill((255, 255, 255)) for heart in hearts: heart.random() heart.draw() pygame.display.update() time.sleep(0.1)