示例#1
0
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()
示例#2
0
 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)
示例#3
0
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()
示例#4
0
	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)
示例#5
0
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)
示例#6
0
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)]
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
 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)
示例#10
0
 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)
示例#11
0
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)
示例#12
0
 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)
示例#13
0
 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)
示例#14
0
 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
示例#15
0
 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
示例#16
0
    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
示例#17
0
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)
示例#18
0
    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()
示例#20
0
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)