Ejemplo n.º 1
0
 def fire(self, mouse):
     spell = Projectile(mouse=mouse, position=self.surface.position)
     self.surface.parent.add_projectile(spell)
def main():
    angle, vel, h0, time = getInputs()
    cball = Projectile(angle, vel, h0)
    while cball.getY() >= 0:
        cball.update(time)
    print("\nDistance Traveled: {0:0.1f}meters.".format(cball.getX()))
Ejemplo n.º 3
0
 def launch_projectile(self):
     self.all_projectiles.add(Projectile(self))
Ejemplo n.º 4
0
Archivo: cball4.py Proyecto: elabay/cs2
def main():
    angle, vel, h0, time = getInputs()
    cball = Projectile(angle, vel, h0)
    while cball.getY() >= 0:
        cball.update(time)
    print("\nDistance traveled: %0.1f meters." % (cball.getX()))
Ejemplo n.º 5
0
    def start_of_game(self):
        #this is the start of the game

        #this creates the player object
        self.player = ship(self.canvas, self.width, self.height, master=self)

        #this starts the creation of all asteroids
        self.make_asteroids()

        #get random number which decides which 6 asteroids to start with
        #loop through a list of different sized asteroids
        for i in range(6):
            x = self.get_random_size()
            if x == 1:
                for i in self.small_asteroids:
                    #if it is frozen then unfreeze it and break from the loop for the next asteroid
                    if i.freeze == True:
                        i.freeze = False
                        break

            elif x == 2:
                for i in self.medium_asteroids:
                    if i.freeze == True:
                        #if it is frozen then unfreeze it and break from the loop for the next asteroid
                        i.freeze = False
                        break

            else:
                for i in self.large_asteroids:
                    if i.freeze == True:
                        #if it is frozen then unfreeze it and break from the loop for the next asteroid
                        i.freeze = False
                        break

        #this creates all the projectiles
        self.pro1 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro2 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro3 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro4 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro5 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro6 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro7 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro8 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro9 = Projectile(self.player, self.canvas, self.width,
                               self.height, self.asteroids, self)
        self.pro10 = Projectile(self.player, self.canvas, self.width,
                                self.height, self.asteroids, self)

        #this creates a list of all the projectiles
        self.projectiles = []
        self.projectiles.append(self.pro1)
        self.projectiles.append(self.pro2)
        self.projectiles.append(self.pro3)
        self.projectiles.append(self.pro4)
        self.projectiles.append(self.pro5)
        self.projectiles.append(self.pro6)
        self.projectiles.append(self.pro7)
        self.projectiles.append(self.pro8)
        self.projectiles.append(self.pro9)
        self.projectiles.append(self.pro10)

        #this calls the setup_bindings() method
        self.setup_bindings()

        #this starts the asteroids movement loop
        for i in self.asteroids:
            i.hold()
Ejemplo n.º 6
0
 def projectile_attack(self):
     self.all_projectiles.add(Projectile(self))
Ejemplo n.º 7
0
 def launch_projectile(self):
     #creer une nouvelle instance de la classe projectile
     self.all_projectiles.add(Projectile(self))
     self.game.sound_manager.play('tir')
Ejemplo n.º 8
0
def main():
    
    def create_particles(number, x, y, image):
	for count in range(number):
	    for particle_count in range(MAX_PARTICLES):
		if particles[particle_count].active == False:
		    particles[particle_count].active = True
		    particles[particle_count].rect.left = x
		    particles[particle_count].rect.top = y
		    particles[particle_count].image = image
		    if number > 15:
			particles[particle_count].move_count = random.randint(20, 30)
		    else:
			particles[particle_count].move_count = random.randint(10, 17)
		    if random.randint(0, 10) > 5:
			particles[particle_count].vector_x = 0 - random.randint(0, 4)
			particles[particle_count].vector_y = 0 - random.randint(0, 4)
		    else:
			particles[particle_count].vector_x = random.randint(0, 4)
			particles[particle_count].vector_y = random.randint(0, 4)
		    break

    # Game Constants..
    SCREEN_HEIGHT = 468
    SCREEN_WIDTH = 640

    high_score = 750000

    TITLE_SCREEN_MODE = 1
    GAME_MODE = 2
    FPS = 60

    NUMBER_OF_LIVES = 6
    MAX_ENEMIES = 15
    PLAYER_BULLETS = 40
    MAX_ENEMY_BULLETS = 30
    MAX_UFOS = 1
    MAX_PARTICLES = 200

    # Counters..
    attack_timer = 0
    attack_max = 70
    ufo_attack_timer = 0
    ufo_attack_max = 500
    max_enemy_speed = 2
    max_ufo_speed = 2

    game_wave = 1
    enemy_killed = 0
    wave_break = 100
    wave_target_kills = 50
    game_over = False
    game_over_timer = 500
    game_victory = False
    game_victory_particle_timer = 0

    player_score = 0
    player_lives = 7
    player_flash_timer = 0
    player_flash_on = False

    # Game control stuff..
    game_mode = TITLE_SCREEN_MODE
    title_menu_choice = 0
    title_lit_message = True

    beaten_high_score = False

    enemy_fire_timer = 0
    enemy_fire_max = 50

    title_freeplay_timer = 0
    title_freeplay_on = False

    # Init the game and creating the display surface..
    pygame.init()
    screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])
    #SCREEN_WIDTH, SCREEN_HEIGHT = screen.get_size()
    pygame.display.set_caption("Squadron: Yet Another Arcade Game!")
    clock = pygame.time.Clock()

    # Creating game fonts..
    pygame.font.init()
    game_font = pygame.font.Font(os.path.join("gfx", "04b_25__.ttf"), 18)
    game_font_large = pygame.font.Font(os.path.join("gfx", "04b_25__.ttf"), 36)
    game_font_xl = pygame.font.Font(os.path.join("gfx", "04b_25__.ttf"), 46)

    # Show loading message...
    screen.fill((0,0,0))
    screen.blit(game_font.render("Loading....", 0, ((176, 0, 0))), (270, SCREEN_HEIGHT / 2 - 36))
    pygame.display.flip()

    # Loading game gfx..
    player_bullet_image = pygame.image.load(os.path.join("gfx", "bullet1.png")).convert()
    enemy_bullet_image = pygame.image.load(os.path.join("gfx", "bullet2.png")).convert()
    invader_image = pygame.image.load(os.path.join("gfx", "invader.png")).convert()
    shooter_image = pygame.image.load(os.path.join("gfx", "shooter_invaders.png")).convert()
    transient_image = pygame.image.load(os.path.join("gfx", "Transient.png")).convert()
    ufo_image = pygame.image.load(os.path.join("gfx", "ufo.png")).convert()
    player_health_image = pygame.Surface((8, 16))
    player_health_image.fill((176, 0, 0))

    # Sort the sound driver
    pygame.mixer.quit()
    sound = pygame.mixer.init()

    # Loading all game sounds..
    damage_sound = pygame.mixer.Sound(os.path.join("sound", "damage.wav"))
    exit_sound = pygame.mixer.Sound(os.path.join("sound", "exit.wav"))
    expolde_sound = pygame.mixer.Sound(os.path.join("sound", "explode1.wav"))
    lazer_sound = pygame.mixer.Sound(os.path.join("sound", "lazer.wav"))
    menu_mov_sound = pygame.mixer.Sound(os.path.join("sound", "menu_move.wav"))
    menu_select_sound = pygame.mixer.Sound(os.path.join("sound", "menu_select.wav"))
    wave_sound = pygame.mixer.Sound(os.path.join("sound", "newwave.wav"))
    player_dead_sound = pygame.mixer.Sound(os.path.join("sound", "player_dead.wav"))
    shoot2_sound = pygame.mixer.Sound(os.path.join("sound", "shoot2.wav"))
    start_sound = pygame.mixer.Sound(os.path.join("sound", "start.wav"))
    ufo_sound = pygame.mixer.Sound(os.path.join("sound", "ufo.wav"))
    ufo_sound.set_volume(0.35)
    win_sound = pygame.mixer.Sound(os.path.join("sound", "win.wav"))

    # Create some particle images..
    red_particle_image = pygame.Surface((8, 8))
    red_particle_image.fill((176, 0, 0))

    green_particle_image = pygame.Surface((8, 8))
    green_particle_image.fill((31, 92, 14))

    blue_particle_image = pygame.Surface((8, 8))
    blue_particle_image.fill((46, 102, 187))

    yellow_particle_image = pygame.Surface((8, 8))
    yellow_particle_image.fill((255, 206, 0))

    gray_particle_image = pygame.Surface((8, 8))
    gray_particle_image.fill((88, 88, 88))
   
    # Create the players... TODO: Clean this!
    #player_side = Player(SCREEN_WIDTH, SCREEN_HEIGHT, side= True)
    #player_bottom = Player(SCREEN_WIDTH, SCREEN_HEIGHT, bottom= True)
    player_bottom = PlayerBottom(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH / 2, SCREEN_HEIGHT - 35)
    player_side = PlayerSide(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH -35, SCREEN_HEIGHT / 2)

    player_score = 0
    player_fire_rate = 5
    player_fire_delay_right = 0
    player_fire_delay_left = 0
    player_shield = 9
    player_lives = 10
    player_flash_on = False
    player_flash_timer = 0

    # Prepare the player pointed projectiles!
    player_bullets = []
    for count in range(PLAYER_BULLETS):
        player_bullets.append(Projectile(SCREEN_WIDTH, SCREEN_HEIGHT, player_bullet_image))
        player_bullets[count].active = False

    # Enemy bullets..
    enemy_bullets = []
    for count in range(MAX_ENEMY_BULLETS):
	enemy_bullets.append(Projectile(SCREEN_WIDTH, SCREEN_HEIGHT, enemy_bullet_image))
	enemy_bullets[count].active = False

    # Prepare enemies..
    invaders = []
    shooter_invaders = []
    transient_invaders = []

    for count in range (MAX_ENEMIES):
   	# invaders 
   	invaders.append(Enemy(SCREEN_WIDTH, SCREEN_HEIGHT, invader_image))
   	invaders[count].rect.top = 0
      	invaders[count].rect.left = 0
   	invaders[count].vector_x = 0
   	invaders[count].vector_y = 0
   	invaders[count].active = False
   	invaders[count].anim_max_frame = 3
   	invaders[count].movement_type = 0

   	# shooter invaders 
   	shooter_invaders.append(Enemy(SCREEN_WIDTH, SCREEN_HEIGHT, shooter_image))
   	shooter_invaders[count].rect.top = 0
   	shooter_invaders[count].rect.left = 0
   	shooter_invaders[count].vector_x = 0
   	shooter_invaders[count].vector_y = 0
   	shooter_invaders[count].active = False
   	shooter_invaders[count].anim_max_frame = 3
   	shooter_invaders[count].movement_type = 0

   	# transient invaders 
   	transient_invaders.append(Enemy(SCREEN_WIDTH, SCREEN_HEIGHT, transient_image))
   	transient_invaders[count].rect.top = 0
   	transient_invaders[count].rect.left = 0
   	transient_invaders[count].vector_x = 0
   	transient_invaders[count].vector_y = 0
   	transient_invaders[count].active = False
   	transient_invaders[count].anim_max_frame = 3
   	transient_invaders[count].movement_type = 1
    
    ufos = []
    for count in range(MAX_UFOS):
	ufos.append(Enemy(SCREEN_WIDTH, SCREEN_HEIGHT, ufo_image))
	ufos[count].anim_max_frame = 9

    particles = []
    for count in range(MAX_PARTICLES):
        particles.append(Particle(SCREEN_WIDTH, SCREEN_HEIGHT, red_particle_image))
        particles[count].active = False   

#<<<><><><><><>||MAIN LOOP||<><><><><><><><>>>#
#<<<><><><><><><><><><><><><><><><><><><><>>>>#

    main_loop = True
    enemies_onscreen = False

    while main_loop:

        # Clear the screen (NOTE: This is not particularly efficient, but deadline is looming!)
        screen.fill((0,0,0)) 

	# Check the game mode if TITLE_SCREEN_MODE
	if game_mode == TITLE_SCREEN_MODE:

	    #-----------------------#
	    #----||TITLE SCREEN||---#
	    #-----------------------#
	    
	    # Render the game title..
	    screen.blit(game_font_xl.render("Squadron",  0, ((255, 206, 0))), (230, 100))

	    title_freeplay_timer += 1
	    if title_freeplay_timer > 30:
	    	title_freeplay_timer = 0
		if title_freeplay_on == True:
		    title_freeplay_on = False
		else:
		    title_freeplay_on = True

	    if title_freeplay_on == True:
                screen.blit(game_font.render("Insert Coin", 0, ((175, 175, 175))), (280, 380))

	    if title_menu_choice == 1:
                screen.blit(game_font.render("Start", 0, ((255, 206, 0))), (300, 225))
	    else:
                screen.blit(game_font.render("Start", 0, ((176, 0, 0))), (300, 225))           

	    if title_menu_choice == 0:
                screen.blit(game_font.render("Exit", 0, ((255, 206, 0))), (308, 250))
	    else:
                screen.blit(game_font.render("Exit", 0, ((176, 0, 0))), (308, 250))

            screen.blit(game_font.render("Z and X to fire, cursor keys control both ships", 0, ((176, 0, 0))), (120, 450))

	   # Screen Events...
	    for event in pygame.event.get():
		if event.type == pygame.QUIT:
		    main_loop = False

		elif event.type == pygame.KEYDOWN:
		    if event.key == pygame.K_UP:
			menu_mov_sound.play()
			title_menu_choice -= 1
			if title_menu_choice < 0:
                            title_menu_choice = 0

		    if event.key == pygame.K_DOWN:
			title_menu_choice += 1
			menu_mov_sound.play()
			if title_menu_choice > 1:
                            title_menu_choice = 1

		    if event.key == pygame.K_ESCAPE:
			main_loop = False 

		    if event.key == pygame.K_z or event.key == pygame.K_x or event.key == pygame.K_SPACE or event.key == pygame.K_RETURN:
			if title_menu_choice == 0:
			    # Start the games
			    start_sound.play()
			    game_mode = GAME_MODE # Switch to the game play mode
			    attack_timer = 0
			    attack_max = 70
			    ufo_attack_timer = 0
			    ufo_attack_max = 500
			    max_enemy_speed = 2
			    max_ufo_speed = 2
			    beaten_high_score = False
			    game_wave = 1
			    enemy_killed = 0
			    wave_break = 100
			    wave_target_kills = 50
			    game_over = False
			    game_over_timer = 500
			    game_victory = False
			    game_victory_particle_timer = 0
			    enemy_fire_timer = 0
			    enemy_fire_max = 50 
			    player_fire_delay_left = 0
                            player_fire_delay_right = 0
			    player_score = 0
			    player_shield = 9
			    player_lives = 7
			    player_flash_timer = 0
			    player_flash_on = False

			    # Deactivate all enemies, particles, bullets
			    for count in range(MAX_ENEMIES):
				invaders[count].active = False
				shooter_invaders[count].active = False
				transient_invaders[count].active = False

			    for count in range(MAX_PARTICLES):
				particles[count].active = False

			    for count in range(PLAYER_BULLETS):
				player_bullets[count].active = False

			    for count in range(MAX_ENEMY_BULLETS):
				enemy_bullets[count].active = False

			    for count in range(MAX_UFOS):
				ufos[count].active = False

			if title_menu_choice == 1:
			    exit_sound.play()
			    main_loop = False
        else:

	    #-----------------------#
	    #-----||GAME MODE||-----#
	    #-----------------------#

	    # Game Events...
            for event in pygame.event.get():
		if event.type == pygame.QUIT:
		    main_loop = False

		elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        game_mode = TITLE_SCREEN_MODE # Switch back to the title screen
                    if event.key == pygame.K_z and player_fire_delay_left > player_fire_rate and game_over == False:
                        # Pop off a few projectiles...                    
                        for count in range(PLAYER_BULLETS):
                            if (player_bullets[count].active == False): # Find a 'free' bullet for the bottom ship
                                player_bullets[count].active = True
                                player_bullets[count].rect.top = player_bottom.rect.top
                                player_bullets[count].rect.left = player_bottom.rect.left + 12
                                player_bullets[count].vector_x = 0
                                player_bullets[count].vector_y = -9
                                player_fire_delay_left = 0
                                lazer_sound.play()                                
                                break
                    # Has side player fired
                    if event.key == pygame.K_x and player_fire_delay_left > player_fire_rate and game_over == False:
                        for count in range(PLAYER_BULLETS):
                            if (player_bullets[count].active == False):
                                player_bullets[count].active = True
                                player_bullets[count].rect.top = player_side.rect.top + 12
                                player_bullets[count].rect.left = player_side.rect.left
                                player_bullets[count].vector_x = -9
                                player_bullets[count].vector_y = 0
                                player_fire_delay_right = 0
                                lazer_sound.play()                            
                                break


		attack_timer += 1
		ufo_attack_timer += 1

		if attack_timer > attack_max and wave_break < 1 and enemy_killed < wave_target_kills and game_over == False:	
		    attack_timer = 0
		    
		    if game_wave > 2:
			enemy_type = random.randint(0, 2)
		    else:
			enemy_type = random.randint(0, 1)

		    direction = random.randint(0, 1)
		    if enemy_type == 0:
			for count in range(MAX_ENEMIES):
			    if invaders[count].active == False:
				if direction == 0: # if enemies come from left
				    invaders[count].rect.left = -32
				    invaders[count].rect.top = random.randint(0, (SCREEN_HEIGHT - 64) / 32) * 32
				    invaders[count].vector_x = max_enemy_speed
				    invaders[count].vector_y = 0
				    invaders[count].active = True
				    break
				else: # if enemies come from top
				    invaders[count].rect.left = random.randint(0, (SCREEN_WIDTH - 64) / 32) * 32
				    invaders[count].rect.top = -32
				    invaders[count].vector_x = 0
				    invaders[count].vector_y = max_enemy_speed
				    invaders[count].active = True
				    break
		    elif enemy_type == 1:
			for count in range(MAX_ENEMIES):
			    if shooter_invaders[count].active == False:
				if direction == 0: # if enemies come from left
				    shooter_invaders[count].rect.left = -32 # 32 is the icon size
				    shooter_invaders[count].rect.top = random.randint(0, (SCREEN_HEIGHT - 64) / 32) * 32
				    shooter_invaders[count].vector_x = max_enemy_speed
				    shooter_invaders[count].vector_y = 0
				    shooter_invaders[count].active = True
				    shooter_invaders[count].movement_type = 2
				    break
				else: # if enemies come from top
				    shooter_invaders[count].rect.left = random.randint(0, (SCREEN_WIDTH - 64) / 32) * 32
				    shooter_invaders[count].rect.top = -32
				    shooter_invaders[count].vector_x = 0
				    shooter_invaders[count].vector_y = max_enemy_speed
				    shooter_invaders[count].active = True
				    shooter_invaders[count].movement_type = 1
				    break
		    elif enemy_type == 2:
			for count in range(MAX_ENEMIES):
			    if shooter_invaders[count].active == False:
				if direction == 0: # if enemies come from left
				    transient_invaders[count].rect.left = -32
				    transient_invaders[count].rect.top = random.randint(0, (SCREEN_HEIGHT - 64) / 32) * 32
				    transient_invaders[count].vector_x = max_enemy_speed
				    transient_invaders[count].vector_y = random.randint(0, 1) - random.randint(0, 1)
				    transient_invaders[count].active = True
				    break
				else: # if enemies come from top
				    transient_invaders[count].rect.left = random.randint(0, (SCREEN_WIDTH - 64) / 32) * 32
				    transient_invaders[count].rect.top = -32
				    transient_invaders[count].vector_x = random.randint(0, 1) - random.randint(0, 1)
				    transient_invaders[count].vector_y = max_enemy_speed
				    transient_invaders[count].active = True
				    break

		# ufo attacks..
		for count in range(MAX_UFOS):
		    if ufos[count].active == False and ufo_attack_timer > ufo_attack_max and wave_break < 1 and game_over == False:
			ufo_attack_timer = 0
			ufo_sound.play()
			if random.randint(0, 10) > 4: # Attacking the side player
			    if random.randint(0, 10) > 4:
				ufos[count].rect.left = SCREEN_WIDTH - 32
				ufos[count].rect.top = -32
				ufos[count].vector_x = 0
				ufos[count].vector_y = max_ufo_speed
				ufos[count].active = True
			    else:
				ufos[count].rect.left = SCREEN_WIDTH -32
				ufos[count].rect.top = SCREEN_HEIGHT + 32
				ufos[count].vector_x = - max_ufo_speed
				ufos[count].vector_y = 0
				ufos[count].active = True
			else: # Attacking the bottom player
			    if random.randint(0, 10) > 4:
				ufos[count].rect.top = SCREEN_HEIGHT - 32
				ufos[count].rect.left = - 32
				ufos[count].vector_x = max_ufo_speed
				ufos[count].vector_y = 0
				ufos[count].rect.active = True
			    else:
				ufos[count].rect.top = SCREEN_HEIGHT -32
                                ufos[count].rect.left = SCREEN_WIDTH + 32                        
                                ufos[count].vector_x = 0 - max_ufo_speed
                                ufos[count].vector_y = 0
                                ufos[count].active = True  

		# Render the particles..
		for count in range(MAX_PARTICLES):
		    if particles[count].active == True:
			particles[count].update()
			screen.blit(particles[count].image, particles[count].rect)
		
		# Update the players due to their key events..
		player_bottom.update()
		player_side.update() 
		
		# If player recovers from damage..
		if player_flash_timer > 0:
		    player_flash_on -= 1
		    if player_flash_on == True:
			player_flash_on = False
		    else:
			player_flash_on = True
		else:
		    player_flash_on = False
		
		# Render all the player projectiles..
		for count in range(PLAYER_BULLETS):
		    if (player_bullets[count].active):
			player_bullets[count].update()
			screen.blit(player_bullets[count].image, player_bullets[count].rect)

		# Render all the enemies projectiles..
		for count in range(MAX_ENEMY_BULLETS):
		    if (enemy_bullets[count].active):
			enemy_bullets[count].update
			screen.blit(enemy_bullets[count].image, enemy_bullets[count].rect)

		# Increase the delay for the players fire..
		player_fire_delay_left += 1
		player_fire_delay_right += 1

		# Update the invaders (move and draw)..
		for count in range(MAX_ENEMIES):
		    if invaders[count].active:
			invaders[count].update()
			screen.blit(invaders[count].image, invaders[count].rect, (32 * invaders[count].anim_frame, 0, 32, 32))
			# Check the invader collision with any player_bullets
			for collision_count in range(PLAYER_BULLETS):
			    if player_bullets[collision_count].active:
				if player_bullets[collision_count].rect.colliderect((invaders[count].rect.left, invaders[count].rect.top, 32, 32)):        
				    invaders[count].active = False
				    player_bullets[collision_count].active = False
				    enemy_killed += 1
				    expolde_sound.play()
				    player_score += 2000
				    create_particles(15, invaders[count].rect.left + 8, invaders[count].rect.top + 8, green_particle_image)

		# Update the shooter_invaders (move and draw)..
		for count in range(MAX_ENEMIES):
		    if shooter_invaders[count].active:
			shooter_invaders[count].update()
			screen.blit(shooter_invaders[count].image, shooter_invaders[count].rect, (32* shooter_invaders[count].anim_frame, 0, 32, 32))
			for collision_count in range(PLAYER_BULLETS):
			    if player_bullets[collision_count].active == True:
				if player_bullets[collision_count].rect.colliderect((shooter_invaders[count].rect.left, shooter_invaders[count].rect.top, 32, 32)):        
				    shooter_invaders[count].active = False
				    player_bullets[collision_count].active = False
				    expolde_sound.play()
				    player_score += 4750
				    enemy_killed += 1
				    create_particles(15, shooter_invaders[count].rect.left + 8, shooter_invaders[count].rect.top + 8, red_particle_image)

		# How nmuch the shooter_invaders take to shoot?
		enemy_fire_timer += 1
		if enemy_fire_timer > enemy_fire_max and game_over == False:
		    enemy_fire_timer = 0
		    for count in range(MAX_ENEMIES):
			if shooter_invaders[count].active == True and shooter_invaders[count].rect.top < SCREEN_HEIGHT - 50 and shooter_invaders[count].rect.top > 50:
			    shoot2_sound.play()
			    bullets = 0
			    for bullet_count in range(MAX_ENEMY_BULLETS):
				if enemy_bullets[bullet_count].active == False:
				    if random.randint(0, 10) > 4:
					enemy_bullets[bullet_count].active = True
					enemy_bullets[bullet_count].vector_x = 7
					enemy_bullets[bullet_count].vector_y = 0
					enemy_bullets[bullet_count].rect.top = shooter_invaders[count].rect.top + 8
					enemy_bullets[bullet_count].rect.left = shooter_invaders[count].rect.left + 12
					break
				    else:
					enemy_bullets[bullet_count].active = True
					enemy_bullets[bullet_count].vector_x = 0
					enemy_bullets[bullet_count].vector_y = 7
					enemy_bullets[bullet_count].rect.top = shooter_invaders[count].rect.top + 16
					enemy_bullets[bullet_count].rect.left = shooter_invaders[count].rect.left + 8
					break

		# Update the ufos (move and draw)..
		for count in range(MAX_UFOS):
		    if ufos[count].active:
			ufos[count].update()
			screen.blit(ufos[count].image, ufos[count].rect, (32 * ufos[count].anim_frame, 0, 32, 32))
			for collision_count in range(PLAYER_BULLETS):
                            if player_bullets[collision_count].rect.colliderect((ufos[count].rect.left, ufos[count].rect.top, 32, 32)):        
				ufos[count].active = False
				create_particles
				player_bullets[collision_count].active = False
				expolde_sound.play()
				player_score += 3250
                                create_particles(15, ufos[count].rect.left + 8, ufos[count].rect.top + 8, gray_particle_image)

		# Update the transient invaders (move and draw)..
		for count in range(MAX_ENEMIES):
		    if transient_invaders[count].active:
			transient_invaders[count].update()
			screen.blit(transient_invaders[count].image, transient_invaders[count].rect, (32* transient_invaders[count].anim_frame, 0, 32, 32))
			for collision_count in range(PLAYER_BULLETS):
			    if player_bullets[collision_count].active == True:
				if player_bullets[collision_count].rect.colliderect(transient_invaders[count], player_bullets[count]):
				    transient_invaders[count].active = False
				    player_bullets[collision_count].active = False
				    expolde_sound.play()
				    player_score += 2500
				    enemy_killed += 1
				    create_particles(15, transient_invaders[count].rect.left + 8, transient_invaders[count].top + 8, blue_particle_image)

	    # Check for player and invaders collisions..
            if player_flash_timer < 1 and game_over == False:
                player_hit = False
                for collision_count in range(MAX_ENEMIES):
                    # Have any invaders collided with player?
                    if invaders[collision_count].active == True:
                        if player_side.rect.colliderect((invaders[collision_count].rect.left + 5, invaders[collision_count].rect.top + 5, 24, 24)):        
                            invaders[collision_count].active = False
                            create_particles(15, invaders[collision_count].rect.left + 8, invaders[collision_count].rect.top + 8, green_particle_image)
                            player_hit = True
                        if player_bottom.rect.colliderect((invaders[collision_count].rect.left + 5, invaders[collision_count].rect.top + 5, 24, 24)):        
                            invaders[collision_count].active = False
                            create_particles(15, invaders[collision_count].rect.left + 8, invaders[collision_count].rect.top + 8, green_particle_image)
                            player_hit = True
                            
                    # Have any transient_invaders collided with player?
                    if shooter_invaders[collision_count].active == True:
                        if player_side.rect.colliderect((shooter_invaders[collision_count].rect.left + 5, shooter_invaders[collision_count].rect.top + 5, 24, 24)):        
                            shooter_invaders[collision_count].active = False
                            create_particles(15, shooter_invaders[collision_count].rect.left + 8, shooter_invaders[collision_count].rect.top + 8, red_particle_image)
                            player_hit = True
                        if player_bottom.rect.colliderect((shooter_invaders[collision_count].rect.left + 5, shooter_invaders[collision_count].rect.top + 5, 24, 24)):        
                            shooter_invaders[collision_count].active = False
                            create_particles(15, shooter_invaders[collision_count].rect.left + 8, shooter_invaders[collision_count].rect.top + 8, red_particle_image)
                            player_hit = True
                            
                    # Have any transient_invaders collided with player?
                    if transient_invaders[collision_count].active == True:
                        if player_side.rect.colliderect((transient_invaders[collision_count].rect.left + 5, transient_invaders[collision_count].rect.top + 5, 24, 24)):        
                            transient_invaders[collision_count].active = False                    
                            create_particles(15, transient_invaders[collision_count].rect.left + 8, transient_invaders[collision_count].rect.top + 8, blue_particle_image)
                            player_hit = True
                        if player_bottom.rect.colliderect((transient_invaders[collision_count].rect.left + 5, transient_invaders[collision_count].rect.top + 5, 24, 24)):        
                            transient_invaders[collision_count].active = False
                            create_particles(15, transient_invaders[collision_count].rect.left + 8, transient_invaders[collision_count].rect.top + 8, blue_particle_image)
                            player_hit = True

                # Have any ufos collided with player?
                for collision_count in range (MAX_UFOS):
                    if ufos[collision_count].active == True:
                        if player_side.rect.colliderect((ufos[collision_count].rect.left + 5, ufos[collision_count].rect.top + 5, 24, 24)):        
                            ufos[collision_count].active = 0
                            create_particles(15, ufos[collision_count].rect.left + 8, ufos[collision_count].rect.top + 8, gray_particle_image)
                            player_hit = True
                        if player_bottom.rect.colliderect((ufos[collision_count].rect.left + 5, ufos[collision_count].rect.top + 5, 24, 24)):        
                            ufos[collision_count].active = 0
                            create_particles(15, ufos[collision_count].rect.left + 8, ufos[collision_count].rect.top + 8, gray_particle_image)
                            player_hit = True

                # Have any enemy bullets collided with player?
                for collision_count in range (MAX_ENEMY_BULLETS):
                    if player_bullets[collision_count].active == True:
                        if player_side.rect.colliderect((player_bullets[collision_count].rect.left, player_bullets[collision_count].rect.top, 8, 8)):        
                            player_bullets[collision_count].active = 0
                            player_hit = True
                        if player_bottom.rect.colliderect((player_bullets[collision_count].rect.left, player_bullets[collision_count].rect.top, 8, 8)):        
                            player_bullets[collision_count].active = 0
                            player_hit = True

                # Has player been hit by anything nasty?
                if player_hit == True and game_over == False:          
                    player_shield -= 1
                    create_particles(5, 85 + ((player_shield) * 11), 32, red_particle_image)                    
                    player_flash_timer = 50
                    damage_sound.play()                
                        
                    if player_shield == 0:
                        player_dead_sound.play()
                        create_particles(20, player_bottom.rect.left + 8, player_bottom.rect.top + 8, red_particle_image)
                        create_particles(20, player_bottom.rect.left + 8, player_bottom.rect.top + 8, yellow_particle_image)
                        create_particles(20, player_side.rect.left + 8, player_side.rect.top + 8, red_particle_image)
                        create_particles(20, player_side.rect.left + 8, player_side.rect.top + 8, yellow_particle_image)
                        game_over = True

            # Display hud stuff
            screen.blit(game_font.render("Score: " + str(player_score), 0, ((255, 206, 0))), (10, 10))
            screen.blit(game_font.render("High Score: " + str(high_score), 0, ((255, 206, 0))), (460, 10))

	    #NOTE: BOOKMARK HERE!
            # Beaten high score?
            if player_score > high_score:
                high_score = player_score
                # Make a little fuss of the player :)
                if BEATEN_HIGH_SCORE == False:
                    BEATEN_HIGH_SCORE = True
                    for count in range(5):
                        create_particles(5, 460 + (count * 15), 15, yellow_particle_image)                        
                
            if wave_break > 0:
                wave_break -= 1
                if game_over == False:
                    screen.blit(game_font_large.render("Wave " + str(game_wave) + " of 9", 0, ((255, 206, 0))), (240, SCREEN_HEIGHT / 2 - 36))        

	    for count in range(player_shield):
		screen.blit(game_font.render("Shields:", 0, ((255, 206, 0))), (10, 30))
		screen.blit(player_health_image, (85 + (count * 11), 32))

            if game_over == True:
                # Loss or victory?
                if game_victory == False:
                    screen.blit(game_font_large.render("GAME OVER", 0, ((176, 0, 0))), (260, SCREEN_HEIGHT / 2 - 36))
                else:
                    screen.blit(game_font_large.render("YOU ARE AWESOME!!!", 0, ((255, 206, 0))), (160, SCREEN_HEIGHT / 2 - 36))
                    game_victory_particle_timer += 1
                    if game_victory_particle_timer > 10:
                        create_particles(30, random.randint(160, 450), random.randint(160, 300), red_particle_image)                       
                        
                game_over_timer -= 1
                if game_over_timer == 0:
                    game_mode = TITLE_SCREEN_MODE
                    
            # Time for a new wave? Only start new wave display when all enemies are dead
            enemies_onscreen = False
            for count in range(MAX_ENEMIES):
                if invaders[count].active == True:
                    enemies_onscreen = True
                    break
                if shooter_invaders[count].active == True:
                    enemies_onscreen = True
                    break
                if transient_invaders[count].active == True:
                    enemies_onscreen = True
                    break
                
            for count in range(MAX_UFOS):
                if ufos[count].active == True:
                    enemies_onscreen = True

            if enemy_killed > wave_target_kills and enemies_onscreen == False and game_over == False:
                wave_break = 300
                wave_target_kills += 10
                game_wave += 1
                if game_wave == 10:
                    game_over = True
                    game_victory = True
                    game_over_timer = 700
                    win_sound.play()
                    
                enemy_killed = 0
               
                # Make the next round a bit harder :)
                if attack_max > 30:
                    attack_max -= 10
                if ufo_attack_max > 0:
                    ufo_attack_max -= 50
                if game_wave > 6:
                    player_fire_rate = 10
                wave_sound.play()

        pygame.display.flip()

        clock.tick(FPS)

		#    # Game Hack..
                #    if event.key == pygame.K_t:
		#	player_flash_on = True
		#	player_flash_timer = 50000

    pygame.quit()
Ejemplo n.º 9
0
 def fire(self, angle_degrees):
     if self.cooldown_timer <= 0:
         p = Projectile(angle_degrees, self.source)
         self.projectile_cb(p)
         self.cooldown_timer = self.cooldown
Ejemplo n.º 10
0
 def launch_projectile(self):
     #creation d'une nouvelle instance
     self.all_projectiles.add(Projectile(self))
Ejemplo n.º 11
0
            pygame.quit()
            sys.exit(0)

    pygame.draw.rect(screen, black, ((0, 0), (640, 600)))

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        if n > -250:
            n -= 1

    if keys[pygame.K_RIGHT]:
        if n < 250:
            n += 1

    if keys[pygame.K_SPACE] and clc() - now > 0.3:
        projectiles.append(Projectile(screen, n))
        now = clc()

    for bubble in bubbles:
        bubble.move()
        for bullet in projectiles:
            bubble.collision(bullet)
    bubbles = list(filter(lambda x: x.state(), bubbles))

    while len(bubbles) < 10:
        bubbles.append(Bubble(screen))

    for bullet in projectiles:
        bullet.move()
    projectiles = list(filter(lambda x: x.state(), projectiles))
Ejemplo n.º 12
0
 def fire(self):
     """fires a projectile"""
     print("fired: " + self.mode)
     self.world.projectiles.append(
         Projectile(self.mode, self.pos.copy(), 30.0, self.world))
Ejemplo n.º 13
0
    def updoot(self, number_of_hits, keys):
        """
        Updates everything but movement (pretty much)
        :param number_of_hits:
        :param keys:
        :return: None
        """
        self.number_of_hits = number_of_hits  # new hits will add to number of hits before this frame

        if self.team == "BLUE":
            if self.x < 0:  # BLUE stay inbounds x
                self.x = 0
            if self.x > self.res[0] / 2:
                self.x = self.res[0] / 2
        elif self.team == "RED":
            if self.x < self.res[0] / 2:  # RED stay inbounds x
                self.x = self.res[0] / 2
            if self.x > self.res[0]:
                self.x = self.res[0]
        if self.y < 0:  # BOTH stay inbounds y
            self.y = 0
        elif self.y > self.res[1]:
            self.y = self.res[1]

        # ABILITIES and SHOOTING
        if self.team == "BLUE":
            if keys[pygame.K_q]:
                if self.mana >= 1:
                    bullet = Projectile(self.x, self.y, 5, 10, self.team, "assets/bullet.png")
                    self.allprojectiles.add(bullet)
                    self.bullets.add(bullet)
                    self.sprites.add(bullet)
                    self.mana -= 1
                    self.manaspent += 1
                    self.number_of_shots += 1
            if keys[pygame.K_e]:
                if self.spec == "spec1":
                    didShoot = self.specialAbility1()  # returns true or false cause checking for mana
                    if didShoot:
                        self.number_of_shots += 1  # shoots if true, same for all
                elif self.spec == "spec2":
                    didShoot = self.specialAbility2()
                    if didShoot:
                        self.number_of_shots += 1
                elif self.spec == "spec3":
                    didShoot = self.specialAbility3()
                    if didShoot:
                        self.number_of_shots += 1
        elif self.team == "RED":
            if keys[pygame.K_u]:  # Pressing U
                if self.mana >= 1:
                    bullet = Projectile(self.x, self.y, 5, 10, self.team, "assets/bullet.png")
                    self.allprojectiles.add(bullet)
                    self.bullets.add(bullet)
                    self.sprites.add(bullet)
                    self.mana -= 1
                    self.number_of_shots += 1
            if keys[pygame.K_o]:  # Pressing O
                if self.spec == "spec1":
                    didShoot = self.specialAbility1()
                    if didShoot:
                        self.number_of_shots += 1
                elif self.spec == "spec2":
                    didShoot = self.specialAbility2()
                    if didShoot:
                        self.number_of_shots += 1
                elif self.spec == "spec3":
                    didShoot = self.specialAbility3()
                    if didShoot:
                        self.number_of_shots += 1

        self.update_accuracy()  # Not much to say
        self.rect.center = self.x, self.y  # move rect to x,y location stored
Ejemplo n.º 14
0
def fire_projectile(screen, projectiles, ship, settings):
    if len(projectiles) < settings.magazine:
        new_projectile = Projectile(settings, screen, ship)
        projectiles.add(new_projectile)
Ejemplo n.º 15
0
    if randint(1, 800) == 1:
        monster = Monster(screen_rect, drawing_group)
        drawing_group.add(monster)
        monsters.add(monster)

    keystate = pygame.key.get_pressed()
    mods = pygame.key.get_mods()
    shift = mods & KMOD_SHIFT

    if keystate[K_SPACE]:
        time_now = time()
        time_since_fire = time_now - time_last_fire
        if time_since_fire > (.2 if shift else .5):
            time_last_fire = time()
            projectile = Projectile(
                player_bee.rect.x + player_bee.rect.width / 2,
                player_bee.rect.y)
            drawing_group.add(projectile)
            projectiles.add(projectile)

    xdir = keystate[K_RIGHT] - keystate[K_LEFT]  # -1, 0, or 1
    ydir = keystate[K_DOWN] - keystate[K_UP]

    player_bee.setAngle(angles[ydir + 1][xdir + 1])
    player_bee.rect = player_bee.rect.move(
        (xdir * 8, ydir * 8)).clamp(screen_rect)

    pygame.sprite.groupcollide(projectiles, invaders, True, True)
    pygame.sprite.groupcollide(projectiles, monsters, True, True)

    drawing_group.clear(screen, background)
Ejemplo n.º 16
0
    def game_loop(self):
        """ This is the main game loop """
        clock = pygame.time.Clock()
        bullet_sound = pygame.mixer.Sound('Sound/bullet.wav')
        score_font = pygame.font.SysFont('arial', 30, True)
        shoot_loop = 0
        bullets = []
        dino = Player(self.level.get_player_start_position())

        while True:
            clock.tick(40)

            dino.gun = self.level.dino_gun

            if dino.pos.x + 350 > self.screen_width:
                self.level.shift_world(-5, 0)
                dino.slide(-5, 0)
            if dino.pos.x - 350 <= 0 and self.level.world_shift_x < 0:
                self.level.shift_world(5, 0)
                dino.slide(5, 0)
            if self.level.world_shift_x <= self.level.level_limit:
                print(self.levels.index(self.level) + 1)
                try:
                    self.level = self.levels[self.levels.index(self.level) + 1]
                except IndexError:
                    self.end_screen(dino)
                    return False
                dino.reset()

            if shoot_loop > 0:
                shoot_loop += 1
            if shoot_loop > 4:
                shoot_loop = 0

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_UP:
                        dino.jump()
                    if event.key == pygame.K_BACKQUOTE:
                        for enemy in self.level.enemys:
                            enemy.debug_draw(draw_bounds=not enemy.draw_bounds,
                                             draw_hitbox=not enemy.draw_hitbox)
                        dino.debug_draw(draw_hitbox=not dino.draw_hitbox)

            if not self.jump_button.get_state():
                jump_flag = True
            if self.jump_button.get_state():
                if jump_flag:
                    dino.jump()
                    jump_flag = False

            for bullet in bullets:
                remove = False
                hits = pygame.sprite.spritecollide(bullet,
                                                   self.level.platforms, False)
                if hits:
                    remove = True
                if (bullet.pos.x < self.screen_width) and (bullet.pos.x > 0):
                    bullet.update_location()
                else:
                    remove = True

                hits = pygame.sprite.spritecollide(bullet, self.level.enemys,
                                                   False)
                for hit in hits:
                    self.score += 5
                    hit.hit()
                    remove = True

                if remove:
                    bullets.pop(bullets.index(bullet))

            keys = pygame.key.get_pressed()

            if keys[pygame.K_LEFT] or self.left_button.get_state():
                dino.move_left()
            elif keys[pygame.K_RIGHT] or self.right_button.get_state():
                dino.move_right()
            else:
                dino.stop()

            if keys[pygame.K_ESCAPE]:
                return
            if keys[pygame.K_a]:
                print(dino.pos.x - self.level.world_shift_x)

            if (keys[pygame.K_SPACE]
                    or self.shoot_button.get_state()) and (shoot_loop
                                                           == 0) and dino.gun:
                if dino.facing_left:
                    facing = -1
                else:
                    facing = 1

                if len(bullets) < 5:
                    bullets.append(
                        Projectile(int(dino.rect.centerx),
                                   int(dino.rect.centery), 6, (0, 0, 0),
                                   facing))
                    bullet_sound.play()
                shoot_loop = 1

            dino.update_location(self.screen_height)

            self.win.blit(self.level.background, (0, 0))
            text = score_font.render('Score:' + str(self.score), 1, (0, 0, 0))
            self.win.blit(text, (0, 10))
            text = score_font.render(
                'Speed:' + str(self.ellip.get_speed()) + " RPM", 1, (0, 0, 0))
            self.win.blit(text, (0, 40))
            heart_rate = 132
            text = score_font.render('Heart Rate:' + str(heart_rate), 1,
                                     (0, 0, 0))
            self.win.blit(text, (0, 70))

            hits = pygame.sprite.spritecollide(dino, self.level.platforms,
                                               False)
            for hit in hits:
                dino.touch_down(hit.rect, hit.friction)

            hits = pygame.sprite.spritecollide(dino, self.level.enemys, False)
            for hit in hits:
                dino.hit(hit)
                if dino.rect.bottom <= (hit.rect.centery -
                                        (hit.rect.height // 4)
                                        ) and dino.rect.bottom >= hit.rect.top:
                    self.score += 20
            if dino.dead:
                self.level.shift_world(0 - self.level.world_shift_x,
                                       0 - self.level.world_shift_y)
                dino.reset()
            self.level.draw(self.win)
            dino.draw(self.win)
            for bullet in bullets:
                bullet.draw(self.win)
            pygame.display.update()
Ejemplo n.º 17
0
    50,
    25,
    "enter the velocity of the initial projectile in m/s:",
    20,
    (220, 220, 220),
)
angleInput = InputBox(
    windowInfo.width / 2 + 20,
    50,
    50,
    25,
    "enter the degree of the initial projectile in degrees above the horizon: ",
    20,
    (220, 220, 220),
)
projectile = Projectile(5)
location = Grid()
accumulatedTime = 0
win = pygame.display.set_mode((windowInfo.width, windowInfo.height))
pygame.display.set_caption("kinematics simulation")

# main lopp
run = True
while run:

    # event loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if (event.type == pygame.MOUSEBUTTONDOWN
                and pygame.mouse.get_pos()[1] > windowInfo.inputHeight):
Ejemplo n.º 18
0
def DoSkillSpell(mob, skillname):
    from projectile import Projectile
    from spell import SpawnSpell

    player = mob.player

    mobSkill = mob.mobSkillProfiles[skillname]
    classSkill = mobSkill.classSkill

    # Assert that mob knows the skill.
    skillLevel = mob.skillLevels.get(skillname, 0)
    if not skillLevel:
        return False

    # Modify skill spells strength by skill level.
    mod = float(skillLevel) / float(classSkill.maxValue)

    # Clamp mod to produce at least 10% of maximum effect.
    if mod < .1:
        mod = .1

    proto = classSkill.spellProto

    # Get the appropriate target for this skill spell.
    tgt = mob.target
    if proto.target == RPG_TARGET_SELF:
        tgt = mob
    elif proto.target == RPG_TARGET_PARTY:
        tgt = mob
    elif proto.target == RPG_TARGET_ALLIANCE:
        tgt = mob
    elif proto.target == RPG_TARGET_PET:
        tgt = mob.pet
    elif player and proto.spellType & RPG_SPELL_HEALING and proto.target == RPG_TARGET_OTHER:
        tgt = GetPlayerHealingTarget(mob, tgt, proto)

    # If no valid target could be found, return in failure.
    # Here's one last chance to still acquire one.
    if not tgt:
        if player:
            if proto.spellType & RPG_SPELL_HARMFUL:
                from command import CmdTargetNearest
                CmdTargetNearest(mob, None, False, True)
                tgt = mob.target
                if not tgt:
                    player.sendGameText(
                        RPG_MSG_GAME_DENIED,
                        "$src's <a:Skill%s>%s</a> skill failed, no target.\\n"
                        % (GetTWikiName(skillname), skillname), mob)
            else:
                tgt = mob
    # Still no target, now definitely abort skill.
    # If the mob is a player mob, message has already be sent.
    if not tgt:
        return False

    # For harmful skill spells, check if target may
    #  be harmed at all. Abort if not.
    if proto.spellType & RPG_SPELL_HARMFUL:
        if not AllowHarmful(mob, tgt) and not proto.aoeRange:
            if player:
                player.sendGameText(
                    RPG_MSG_GAME_DENIED,
                    "$src's <a:Skill%s>%s</a> skill failed, no valid target.\\n"
                    % (GetTWikiName(skillname), skillname), mob)
            return False
        if not player and not (mob.master and mob.master.player) and not IsKOS(
                mob, tgt):
            return False

    # If the skill spell isn't harmful and the target is hostile,
    #  retarget self.
    if not proto.spellType & RPG_SPELL_HARMFUL and mob.target == tgt:
        if tgt and IsKOS(tgt, mob):
            tgt = mob

    # Check for a skill raise.
    if mob.character:
        c = 10
        if mobSkill.reuseTime > 180:
            c = 5
        if mobSkill.reuseTime > 180 * 2:
            c = 3
        mob.character.checkSkillRaise(skillname, c)

    # Play animation and trigger particles if available.
    if proto.animOverride:
        mob.zone.simAvatar.mind.callRemote("playAnimation", mob.simObject.id,
                                           proto.animOverride)
    if len(proto.particleNodes):
        mob.zone.simAvatar.mind.callRemote("triggerParticleNodes",
                                           mob.simObject.id,
                                           proto.particleNodes)

    # Launch a projectile if necessary, otherwise spawn skill spell.
    if proto.projectile:
        p = Projectile(mob, mob.target)
        p.spellProto = proto
        p.launch()
    else:
        SpawnSpell(proto, mob, tgt, tgt.simObject.position, mod, skillname)

    # Return True, so skill was used.
    return True
Ejemplo n.º 19
0
 def attack_p(self):
     self.all_projectiles.add(Projectile(self, self.velocity, 'assets/projectile.png'))
def main():
    '''main program'''
    pygame.init()

    #setting up font

    #set height and width of the screen'''
    size = [SCREEN_WIDTH, SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption('Side-Scrollin Platformer')
    BackGround = Background('background_test.jpeg', [0, 0])
    #create the player'''
    player = Player()
    #crate levels'''
    level_list = []
    level_list.append(Level_01(player))
    level_list.append(Level_02(player))
    #set current level'''
    current_level_no = 0
    current_level = level_list[current_level_no]

    active_sprite_list = pygame.sprite.Group()
    player.level = current_level

    player.rect.x = 340
    player.rect.y = SCREEN_HEIGHT - player.rect.height
    active_sprite_list.add(player)

    #loop until the user clicks close button'''
    done = False
    #used to manage how fast the screen updates'''
    clock = pygame.time.Clock()

    projectile_list = pygame.sprite.Group()
    bullet_list = pygame.sprite.Group()

    #MAIN GAME LOOP'''
    while not done:
        screen.fill(WHITE)
        screen.blit(BackGround.image, BackGround.rect)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    player.go_left()
                if event.key == pygame.K_d:
                    player.go_right()
                if event.key == pygame.K_w:
                    player.jump()
                    #player.subtract_health(3)
                    #message_display(player.health)
                    #text(player.health)
                    #print (player.health)

                if event.key == pygame.K_SPACE:
                    bullet = Projectile(player.rect.x, player.rect.y, 12, 0)
                    active_sprite_list.add(bullet)
                    bullet_list.add(bullet)

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_a and player.change_x < 0:
                    player.stop()
                if event.key == pygame.K_d and player.change_x > 0:
                    player.stop()

        #dropping projectiles

        odds_of_drop = random.randint(1, 100)
        if odds_of_drop < 10:
            projectile = Projectile(random.randrange(SCREEN_WIDTH),
                                    random.randrange(1, 5), 0,
                                    random.randrange(5, 8))
            active_sprite_list.add(projectile)
            projectile_list.add(projectile)

        hits = pygame.sprite.spritecollide(player, projectile_list, True)
        if hits:
            player.subtract_health(1)
            #projectile_list.remove(projectile)
            print("hit")
            print(player.health)
            #projectile.kill()

    #update player'''op
        active_sprite_list.update()
        #update items in the level'''
        current_level.update()
        #if player gets near the right side, shift the world left (-x)'''
        if player.rect.right >= 500:
            diff = player.rect.right - 500
            player.rect.right = 500
            current_level.shift_world(-diff)
    #if player gets near the left side, shift the world right(+x)'''
        if player.rect.left <= 120:
            diff = 120 - player.rect.left
            player.rect.left = 120
            current_level.shift_world(diff)
    #if the player gets to the end of the level, go to next level'''
        current_position = player.rect.x + current_level.world_shift
        if current_position < current_level.level_limit:
            player.rect.x = 120
            if current_level_no < len(level_list) - 1:
                current_level_no += 1
                current_level = level_list[current_level_no]
                player.level = current_level

    #all code to draw should go below this comment'''
        current_level.draw(screen)
        active_sprite_list.draw(screen)
        #all code to draw should go above this comment'''

        #limt to 6o fps'''
        clock.tick(60)

        #go ahead and update the screen with what weve drawn'''
        pygame.display.flip()


#be IDLE friendly. if you foget this line program will hang on exit'''
    pygame.quit()
Ejemplo n.º 21
0
shot_sound = pygame.mixer.Sound('data2/shot_sound.ogg')

clock = pygame.time.Clock()
tick_timer = 0
game_over = False
game_loop = True

while game_loop:
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_loop = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            shot_sound.play()
            new_shot = Projectile(shots_group)
            new_shot.rect.center = player.rect.center

    # Logic
    if not game_over:
        tick_timer += 1
        if tick_timer > 30:
            tick_timer = 0
            if random.random() < 0.4:
                new_asteroid = Asteroid(asteroid_group)
                x, y = SCREEN_RES[0], random.randint(0, SCREEN_RES[1] - 100)
                new_asteroid.rect.move_ip(x, y)

        bg_group.update()
        asteroid_group.update()
        player_group.update()
Ejemplo n.º 22
0
 def lauch_projectile(self):
     #creation d'une nouvelle instance de la class projectile
     if self.isFiring:
         self.all_projectiles.add(Projectile(self, self.direction))
Ejemplo n.º 23
0
 def launch_projectile(self):
     self.all_projectiles.add(Projectile(self))
     self.start_animation()
     self.game.soundManager.play('tir')
Ejemplo n.º 24
0
from ramp import Ramp
from target import Target
from angleMath import AngleMath
from projectile import Projectile
from learn import Learn
import math
from scipy.misc import derivative
import graphics
from myConstants import myConstants

myRamp = Ramp(700, AngleMath.toRad(15))
myProjectile = Projectile(60, AngleMath.toRad(20), 100, myRamp)

graphics.initialGraphics(myProjectile)
print("initial x0:" + str(myProjectile.x0))
print("initial y0:" + str(myProjectile.y0))
myRamp.printStats()

myProjectile.calcxtFall(0.000001)

t = 0.0
# for i in range(1, len(myProjectile.tFallList)):

for i in range(0, len(myProjectile.tList)):

    if (myProjectile.tList[i] >= t):
        myProjectile.x = myProjectile.xList[i]
        myProjectile.y = myProjectile.yList[i]

        graphics.move(graphics.player, myProjectile, t)
        t += myConstants.myRate
Ejemplo n.º 25
0
    def renderSelf(self, time, renderer, xMin, yMin, bossTextures):
        if (self.xPos + self.width - xMin <
                0) or (self.yPos + self.height - yMin < 0):
            return
        elif (self.xPos > xMin + 800) or (self.yPos > yMin + 600):
            return
        frameTime = ((int(time / 125)) % 4)
        spriteFrame = sdl.Rect((frameTime * 300, 0, 300, 400))
        if self.dead:
            return
        if self.dying:
            frameTime = ((int(time / 500)) % 4)
            if self.currentTime is not frameTime:
                self.currentFrame += 1
                self.currentTime = frameTime
                spriteFrame = sdl.Rect((self.currentFrame * 300, 0, 300, 400))
                sdl.renderCopy(renderer, bossTextures[9], spriteFrame,
                               self.getRect(xMin, yMin))

                # once the animation for attacking runs through, set him back to not attacking
                # and reset the current frame to -1 (so it starts at frame 0 next run)
                if self.currentFrame is 10:
                    self.currentFrame = -1
                    self.attacking = 0
                    self.currentTime = -1
                    self.dead = True
                    self.dying = False
            else:
                self.currentTime = frameTime
                spriteFrame = sdl.Rect((self.currentFrame * 300, 0, 300, 400))
                sdl.renderCopy(renderer, bossTextures[9], spriteFrame,
                               self.getRect(xMin, yMin))

        elif not self.hurt:  # if not hurt
            if self.attacking is 0:  # if not attacking
                if self.direction == 'e':
                    sdl.renderCopy(renderer, bossTextures[1], spriteFrame,
                                   self.getRect(xMin, yMin))  #right
                elif self.direction == 'w':
                    sdl.renderCopy(renderer, bossTextures[2], spriteFrame,
                                   self.getRect(xMin, yMin))  #left
                elif self.direction == 's':
                    sdl.renderCopy(renderer, bossTextures[8], spriteFrame,
                                   self.getRect(xMin, yMin))  #idle
            else:  # if attacking
                if self.attacking == 1:  # GREEN ATTACK
                    frameTime = ((int(time / 125)) % 4)
                    if self.currentTime is not frameTime:
                        self.currentFrame += 1
                        self.currentTime = frameTime
                        spriteFrame = sdl.Rect(
                            (self.currentFrame * 300, 0, 300, 400))
                        sdl.renderCopy(renderer, bossTextures[3], spriteFrame,
                                       self.getRect(xMin, yMin))
                        if self.currentFrame is 4:
                            self.projectiles.append(
                                Projectile(
                                    int(self.xPos) + 100,
                                    int(self.yPos) + 400, 60, 60, 'green',
                                    bossTextures[4], renderer, 0, 0, 0))

                        # once the animation for attacking runs through, set him back to not attacking
                        # and reset the current frame to -1 (so it starts at frame 0 next run)
                        if self.currentFrame >= 6:
                            self.currentFrame = -1
                            self.attacking = 0
                            self.currentTime = -1
                    else:
                        self.currentTime = frameTime
                        spriteFrame = sdl.Rect(
                            (self.currentFrame * 300, 0, 300, 400))
                        sdl.renderCopy(renderer, bossTextures[3], spriteFrame,
                                       self.getRect(xMin, yMin))

                elif self.attacking == 2:  # ORANGE ATTACK
                    frameTime = ((int(time / 125)) % 4)
                    if self.currentTime is not frameTime:
                        self.currentFrame += 1
                        self.currentTime = frameTime
                        spriteFrame = sdl.Rect(
                            (self.currentFrame * 700, 0, 700, 800))
                        sdl.renderCopy(renderer, bossTextures[5], spriteFrame,
                                       self.getRect(xMin, yMin))

                        # once the animation for attacking runs through, set him back to not attacking
                        # and reset the current frame to -1 (so it starts at frame 0 next run)
                        if self.currentFrame >= 8:
                            self.currentFrame = -1
                            self.attacking = 0
                            self.currentTime = -1
                            self.endOfOrange = True
                    else:
                        self.currentTime = frameTime
                        spriteFrame = sdl.Rect(
                            (self.currentFrame * 700, 0, 700, 800))
                        sdl.renderCopy(renderer, bossTextures[5], spriteFrame,
                                       self.getRect(xMin, yMin))

                elif self.attacking == 3:  # PURPLE ATTACK
                    frameTime = ((int(time / 125)) % 4)
                    if self.currentTime is not frameTime:
                        self.currentFrame += 1
                        self.currentTime = frameTime
                        spriteFrame = sdl.Rect(
                            (self.currentFrame * 300, 0, 300, 400))
                        sdl.renderCopy(renderer, bossTextures[6], spriteFrame,
                                       self.getRect(xMin, yMin))

                        if self.currentFrame is 4:
                            self.projectiles.append(
                                Projectile(
                                    int(self.xPos) - 100,
                                    int(self.yPos) + 400, 400, 200, 'purple',
                                    bossTextures[7], renderer, 0, 0, 0))

                        # once the animation for attacking runs through, set him back to not attacking
                        # and reset the current frame to -1 (so it starts at frame 0 next run)
                        if self.currentFrame >= 6:
                            self.currentFrame = -1
                            self.attacking = 0
                            self.currentTime = -1
                    else:
                        self.currentTime = frameTime
                        spriteFrame = sdl.Rect(
                            (self.currentFrame * 300, 0, 300, 400))
                        sdl.renderCopy(renderer, bossTextures[6], spriteFrame,
                                       self.getRect(xMin, yMin))

                if self.attacking == 4:
                    sdl.renderCopy(renderer, bossTextures[8], spriteFrame,
                                   self.getRect(xMin, yMin))
        elif self.hurt:  # if hurt
            sdl.renderCopy(renderer, bossTextures[0], spriteFrame,
                           self.getRect(xMin, yMin))
        self.renderHealth(renderer, xMin, yMin, bossTextures[10])
Ejemplo n.º 26
0
 def launch_proj(self):
     # cree une nouvelle instance du projectile
     self.all_projectiles.add(Projectile(self))
Ejemplo n.º 27
0
    def update(self, players, projectiles):
        if self.respawn > 0:
            self.respawn -= 1
            if self.respawn == 0:
                self.spawn()
            return

        if self.health <= 0:
            self.game.score(self.name, -1)
            self.respawn = RESPAWN_TICKS
            return

        # Handle shooting
        if self.primary_reload > 0:
            self.primary_reload -= 1

        if self.secondary_reload > 0:
            self.secondary_reload -= 1

        if self.shootstate == 1 and self.primary_reload <= 0:
            berr = random.random() * self.bloom * 2 - self.bloom
            projectiles.append(
                Projectile(
                    self.raycaster, 1, {
                        "x": self.pose["x"],
                        "y": self.pose["y"],
                        "theta": self.pose["aim"] + berr
                    }, self.name))
            self.primary_reload = PRIMARY_RELOAD
            self.bloom += BLOOM_PRIMARY

        if self.shootstate == 2 and self.secondary_reload <= 0:
            berr = random.random() * self.bloom * 2 - self.bloom
            projectiles.append(
                Projectile(
                    self.raycaster, 2, {
                        "x": self.pose["x"],
                        "y": self.pose["y"],
                        "theta": self.pose["aim"] + berr
                    }, self.name))
            self.secondary_reload = SECONDARY_RELOAD
            self.bloom += BLOOM_SECONDARY

        self.bloom = min(BLOOM_MAX, self.bloom)
        self.bloom -= BLOOM_DECAY * (1.0 - abs(self.movespeed))
        self.bloom = max(0, self.bloom)

        self.shootstate = 0

        # Move robot
        dx = math.cos(self.pose["theta"]) * self.movespeed * MOVESPEED_PER_TICK
        dy = math.sin(self.pose["theta"]) * self.movespeed * MOVESPEED_PER_TICK

        # Check how far the robot can move.
        if self.movespeed >= 0:
            tx, ty, obj = self.raycaster.cast(
                {
                    "x": self.pose["x"],
                    "y": self.pose["y"],
                    "theta": self.pose["theta"]
                },
                self.name,
                collision_mode=True)
        else:
            tx, ty, obj = self.raycaster.cast(
                {
                    "x": self.pose["x"],
                    "y": self.pose["y"],
                    "theta": self.pose["theta"] - math.pi
                },
                self.name,
                collision_mode=True)

        # Only if there is an obstacle do something about it...
        if tx is not None and ty is not None and obj is not None:
            dtx = tx - self.pose["x"]
            dty = ty - self.pose["y"]
            dlen = dtx * dtx + dty * dty

            # Crop movement if nescesarry
            if dlen <= dx * dx + dy * dy * 1.01:
                dx = 0
                dy = 0

        # Apply motion
        self.pose["x"] += dx
        self.pose["y"] += dy
        self.pose["theta"] += self.turnspeed * TURNSPEED_PER_TICK
        self.pose[
            "aim"] += self.aimspeed * AIMSPEED_PER_TICK + self.turnspeed * TURNSPEED_PER_TICK

        while self.pose["theta"] <= -math.pi:
            self.pose["theta"] += 2 * math.pi
        while self.pose["theta"] > math.pi:
            self.pose["theta"] -= 2 * math.pi

        while self.pose["aim"] <= -math.pi:
            self.pose["aim"] += 2 * math.pi
        while self.pose["aim"] > math.pi:
            self.pose["aim"] -= 2 * math.pi
Ejemplo n.º 28
0
def shoot_projectile(projectiles_group, screen_width, screen_height):
    y = random.randint(0, screen_height)
    max_speed = 8
    speed = random.randint(1, max_speed)
    projectile = Projectile(screen_width, y, speed)
    projectiles_group.add(projectile)
Ejemplo n.º 29
0
 def launch_projectile(self):
     #creer une nouvelle instance de la classe Projectile
     self.all_projectiles.add(Projectile(self))
Ejemplo n.º 30
0
 def launch_projectile(self):
     #creer une nouvelle instance de la classe projectile
     self.all_projectiles.add(Projectile(self))
     # demarer l'animation du lancer
     self.start_animation()