def draw(self):
        self.orientWorld()
        for item in self.simulation.world.all:
            Render.render(item)

        HUD.draw(self.zoomedShip)
        self.drawSidebar()
Example #2
0
class Scene(State):
	def __init__(self, file_path):
		super(Scene, self).__init__()

		pygame.mixer.init(44100, -16, 4, 2048)
		self.position = ['goalkeeper', 'defender', 'midfielder', 'attacker']
		self.all_object_list = pygame.sprite.LayeredUpdates()
		self.selection_circle = [] # Prototype
		self.left_player = Player() # Prototype
		self.right_player = Player() # Prototype
		self.teams = collections.defaultdict(dict)
		self.field = Object()
		self.field_border = Object()
		self.goal = []
		self.ball = Ball()
		self.hud = HUD()
		self.goal_image = EffectObject()
		self.formation = {Team_side.LEFT: [1, 4, 3, 3], Team_side.RIGHT: [1, 4, 4, 2]}
		self.sound_list = dict()

		# Game config
		self.game_mode = Game_mode.PvP
		self.P1_controlled_team = Team_side.LEFT
		self.P1_controlled_position = 'midfielder'
		self.P2_controlled_team = Team_side.RIGHT
		self.P2_controlled_position = 'midfielder'

		# Load scene's resources
		self.read_scene(file_path)

	def init(self):
		# Set teams info
		# Left team
		self.game_mode = self.get_shared_var('mode')
		self.formation[self.P1_controlled_team] = self.get_shared_var('P1_formation')
		team1_id = self.get_shared_var('P1_team_ID')
		self.hud.set_left_team_name(Team_name[team1_id])
		self.left_player.setImage(ResourceManager.instance().image_path_list[56 + team1_id])

		# Right team
		self.formation[self.P2_controlled_team] = self.get_shared_var('P2_formation')
		team2_id = self.get_shared_var('P2_team_ID')
		self.hud.set_right_team_name(Team_name[team2_id])
		self.right_player.setImage(ResourceManager.instance().image_path_list[56 + team2_id])
		
		# Calculate players and ball position
		self.calculate_position()

		# Set controlled team
		self.controlled_team = Team_side.LEFT

		# Randomize ball direction
		self.ball.set_angle(random.randrange(0, 360, 20))

		# Game control
		self.game_over = False
		self.match_state = Match_state.KICKOFF
		self.match_time = 120000
		self.time = self.match_time

		# Reset score
		self.hud.reset_score()

		# Set background music
		pygame.mixer.stop()
		self.sound_list['background'].play().set_endevent(pygame.constants.USEREVENT)

	def process_key_press(self, key):
		if key[pygame.K_w]:
			apply_all(self.teams[self.P1_controlled_team][self.P1_controlled_position], 'move_up')
		if key[pygame.K_s]:
			apply_all(self.teams[self.P1_controlled_team][self.P1_controlled_position], 'move_down')
		if key[pygame.K_UP]:
			apply_all(self.teams[self.P2_controlled_team][self.P2_controlled_position], 'move_up')
		if key[pygame.K_DOWN]:
			apply_all(self.teams[self.P2_controlled_team][self.P2_controlled_position], 'move_down')

	def process_events(self, event):
		if event.type == pygame.USEREVENT:
			self.sound_list['background'].play()
		elif event.type == pygame.MOUSEBUTTONDOWN:
			return ''
		elif event.type == pygame.KEYDOWN:
			if event.key == pygame.K_ESCAPE:
				if self.is_running:
					self.pause()
				else:
					self.resume()
			elif event.key == pygame.K_a:
				apply_all(self.teams[self.P1_controlled_team][self.P1_controlled_position], 'stop')
				self.P1_controlled_position = self.position[max(0, self.position.index(self.P1_controlled_position) - 1)]
			elif event.key == pygame.K_d:
				apply_all(self.teams[self.P1_controlled_team][self.P1_controlled_position], 'stop')
				self.P1_controlled_position = self.position[min(3, self.position.index(self.P1_controlled_position) + 1)]
			elif event.key == pygame.K_LEFT:
				apply_all(self.teams[self.P2_controlled_team][self.P2_controlled_position], 'stop')
				self.P2_controlled_position = self.position[min(3, self.position.index(self.P2_controlled_position) + 1)]
			elif event.key == pygame.K_RIGHT:
				apply_all(self.teams[self.P2_controlled_team][self.P2_controlled_position], 'stop')
				self.P2_controlled_position = self.position[max(0, self.position.index(self.P2_controlled_position) - 1)]
		elif event.type == pygame.KEYUP:
			if event.key == pygame.K_w or event.key == pygame.K_s:
				apply_all(self.teams[self.P1_controlled_team][self.P1_controlled_position], 'stop')
			elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
				if self.game_mode is Game_mode.PvP:
					apply_all(self.teams[self.P2_controlled_team][self.P2_controlled_position], 'stop')

	def update(self):
		if (not self.is_running):
			return

		if self.match_state == Match_state.KICKOFF:
			self.sound_list['whistle'].play()
			pygame.time.delay(1500)
			self.match_state = Match_state.PLAYING
		elif self.match_state == Match_state.PLAYING:
			# Logic processing
			self.time -= 1000 / 60

			if self.time <= 0.0:
				self.match_state = Match_state.KICKOFF
				self.reset_game()

			self.hud.set_time(int(self.time))

			self.process_ball()
		elif self.match_state == Match_state.GOAL:
			goal_image = self.goal_image.clone()
			goal_image.set_appear_time(500)
			goal_image.show()
			self.all_object_list.add(goal_image)
			self.match_state = Match_state.KICKOFF
			self.reset_game()

		# Update all objects
		self.all_object_list.update()
		self.hud.update()

	def draw(self, screen):
		screen.fill(BLACK)
		self.all_object_list.draw(screen)
		apply_all(self.teams[self.P1_controlled_team][self.P1_controlled_position], 'show_selection_circle', screen)

		if self.game_mode is Game_mode.PvP:
			apply_all(self.teams[self.P2_controlled_team][self.P2_controlled_position], 'show_selection_circle', screen)

		self.hud.draw(screen)

	def reset_game(self):
		self.calculate_position()
		self.match_state = Match_state.KICKOFF

	#--------------------------------------LOGIC PROCESSING SECTION-----------------------------------------------
	def process_ball(self):
		# Check if hit goals
		if (pygame.sprite.collide_mask(self.ball, self.goal[0])) is not None:
			self.sound_list['goal'].play()
			self.hud.update_right_score()
			self.match_state = Match_state.GOAL
			return
		elif pygame.sprite.collide_mask(self.ball, self.goal[1]) is not None:
			self.sound_list['goal'].play()
			self.hud.update_left_score()
			self.match_state = Match_state.GOAL
			return

		# Check if hit field's border
		self.process_collide_border()

		# Check if hit players 
		player_list = [players for sublist in (list(self.teams[Team_side.LEFT].values()) + list(self.teams[Team_side.RIGHT].values())) for players in sublist]
		hit_player = pygame.sprite.spritecollideany(self.ball, player_list, pygame.sprite.collide_circle)

		if hit_player is not None:
			self.sound_list['ball_kick'].play()
			self.ball.collide_object(hit_player)

		# Process AI list(chain(*self.teams[Team_side.LEFT].values()))
		"""for position in self.teams[Team_side.RIGHT].keys():
			action = 'move_up' if random.randrange(0, 2) is 0 else 'move_down'
			apply_all(self.teams[Team_side.RIGHT][position], action)"""

	def process_collide_border(self):
		"""Check if ball touch field's border and calculate rebound direction
		"""
		ball_pos = self.ball.get_pos()

		if ball_pos[0] < 50:
			self.ball.move_to(51, self.ball.get_pos()[1])
			self.ball.toggle_x_vel()
		elif  (ball_pos[0] + self.ball.get_width()) > SCREEN_WIDTH - 50:
			self.ball.move_to(SCREEN_WIDTH - 51 - self.ball.get_width(), self.ball.get_pos()[1])
			self.ball.toggle_x_vel()
		elif ball_pos[1] < 20:
			self.ball.move_to(self.ball.get_pos()[0], 21)
			self.ball.toggle_y_vel()
		elif (ball_pos[1] + self.ball.get_height()) > SCREEN_HEIGHT - 20:
			self.ball.move_to(self.ball.get_pos()[0], SCREEN_HEIGHT - 21 - self.ball.get_height())
			self.ball.toggle_y_vel()

	def calculate_position(self):
		"""Calculate and move ball and players to the right position
		"""

		# Calculate ball postion
		x = (SCREEN_WIDTH - self.ball.get_width()) // 2
		y = (SCREEN_HEIGHT - 8 - self.ball.get_height()) // 2
		self.ball.move_to(x, y)

		# Generate and calculate red team players
		for i in range(len(self.formation[Team_side.LEFT])):
			if len(self.teams[Team_side.LEFT]) == 4:
				apply_all(self.teams[Team_side.LEFT][self.position[i]], 'kill')

			self.teams[Team_side.LEFT].update({self.position[i]: []})

			# Calculate offset
			x_offset = 100
			y_offset = (self.field.get_height() - 8 - self.left_player.get_height() * self.formation[Team_side.LEFT][i]) // (self.formation[Team_side.LEFT][i] + 1)

			for j in range(self.formation[Team_side.LEFT][i]):
				# Calculate position
				x = self.left_player.get_pos()[0] + (x_offset * (i ** 1.69))
				y = y_offset * (j + 1) + self.left_player.get_height() * j + 4

				self.teams[Team_side.LEFT][self.position[i]].append(self.left_player.clone())
				self.teams[Team_side.LEFT][self.position[i]][j].move_to(x, y)
				self.teams[Team_side.LEFT][self.position[i]][-1].set_layer(1)
				self.teams[Team_side.LEFT][self.position[i]][-1].set_radius()
				self.teams[Team_side.LEFT][self.position[i]][j].set_max_offset(y_offset - 20)
				self.all_object_list.add(self.teams[Team_side.LEFT][self.position[i]][-1])

		# Generate and calculate blue team players
		for i in range(len(self.formation[Team_side.RIGHT])):
			if len(self.teams[Team_side.RIGHT]) == 4:
				apply_all(self.teams[Team_side.RIGHT][self.position[i]], 'kill')

			self.teams[Team_side.RIGHT].update({self.position[i]: []})

			# Calculate offset
			x_offset = 100
			y_offset = (self.field.get_height() - 8 - self.right_player.get_height() * self.formation[Team_side.RIGHT][i]) // (self.formation[Team_side.RIGHT][i] + 1)

			for j in range(self.formation[Team_side.RIGHT][i]):
				# Calculate position
				x = self.right_player.get_pos()[0] - (x_offset * (i ** 1.69))
				y = y_offset * (j + 1) + self.right_player.get_height() * j + 4

				self.teams[Team_side.RIGHT][self.position[i]].append(self.right_player.clone())
				self.teams[Team_side.RIGHT][self.position[i]][j].move_to(x, y)
				self.teams[Team_side.RIGHT][self.position[i]][-1].set_layer(1)
				self.teams[Team_side.RIGHT][self.position[i]][-1].set_radius()
				self.teams[Team_side.RIGHT][self.position[i]][j].set_max_offset(y_offset - 20)
				self.all_object_list.add(self.teams[Team_side.RIGHT][self.position[i]][-1])

		# Assign selection_circle to each player
		# Left team
		for player in [players for sublist in list(self.teams[Team_side.LEFT].values()) for players in sublist]:
			player.selection_circle = self.selection_circle[0].clone()

		# Right team
		for player in [players for sublist in list(self.teams[Team_side.RIGHT].values()) for players in sublist]:
			player.selection_circle = self.selection_circle[1].clone()

	#----------------------------------------READ FILE SECTION-----------------------------------------------------
	def read_scene(self, file_path):
		with open(file_path) as file:
			self.read_hud(file)
			self.read_field(file)
			self.read_red_team(file)
			self.read_blue_team(file)
			self.read_selection_circle(file)
			self.read_ball(file)
			self.read_effect(file)
			self.read_sound(file)

	def read_hud(self, file):
		file.readline()
		hud_id = int(file.readline().strip().split(' ')[1])
		self.hud.init(ResourceManager.instance().hud_path_list[hud_id])

	def read_field(self, file):
		# Read field
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])
		self.field.init('Image', file_name = ResourceManager.instance().image_path_list[image_id])
		self.field.scale_to(SCREEN_WIDTH, SCREEN_HEIGHT)
		self.all_object_list.add(self.field)

		# Read goal
		file.readline()
		image_id_1, image_id_2 = list(map(int, file.readline().strip().split(' ')[1:]))
		self.goal.append(Object())
		self.goal[-1].init('Image', file_name = ResourceManager.instance().image_path_list[image_id_1])
		self.goal[-1].scale_to(SCREEN_WIDTH, SCREEN_HEIGHT)
		self.goal[-1].set_layer(-1)
		self.goal.append(Object())
		self.goal[-1].init('Image', file_name = ResourceManager.instance().image_path_list[image_id_2])
		self.goal[-1].scale_to(SCREEN_WIDTH, SCREEN_HEIGHT)
		self.goal[-1].set_layer(-1)
		self.all_object_list.add(self.goal)
		
	def read_red_team(self, file):
		self.teams[Team_side.LEFT] = dict()
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])

		# Prototype
		self.left_player.init('Image', file_name = ResourceManager.instance().image_path_list[image_id])
		self.left_player.rotate(float(file.readline().strip().split(' ')[1]))
		self.left_player.scale(*map(float, file.readline().strip().split(' ')[1:]))
		self.left_player.translate(*map(int, file.readline().strip().split(' ')[1:]))

	def read_blue_team(self, file):
		self.teams[Team_side.RIGHT] = dict()
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])

		# Prototype
		self.right_player.init('Image', file_name = ResourceManager.instance().image_path_list[image_id])
		self.right_player.rotate(float(file.readline().strip().split(' ')[1]))
		self.right_player.scale(*map(float, file.readline().strip().split(' ')[1:]))
		self.right_player.translate(*map(int, file.readline().strip().split(' ')[1:]))

	def read_selection_circle(self, file):
		file.readline()
		image_id = list(map(int, (file.readline().strip().split(' ')[1:])))
		image_id_green = image_id[0]
		image_id_red = image_id[1]

		# Green circle
		self.selection_circle.append(Object())
		self.selection_circle[-1].init('Image', file_name = ResourceManager.instance().image_path_list[image_id_green], alpha = True)
		self.selection_circle[-1].rotate(float(file.readline().strip().split(' ')[1]))
		self.selection_circle[-1].scale(*map(float, file.readline().strip().split(' ')[1:]))
		self.selection_circle[-1].translate(*map(int, file.readline().strip().split(' ')[1:]))

		# Red circle
		self.selection_circle.append(self.selection_circle[-1].clone())
		self.selection_circle[-1].setImage(ResourceManager.instance().image_path_list[image_id_red])

	def read_ball(self, file):
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])
		self.ball.init('Image', file_name = ResourceManager.instance().image_path_list[image_id], alpha = True)
		self.ball.rotate(float(file.readline().strip().split(' ')[1]))
		self.ball.scale(*map(float, file.readline().strip().split(' ')[1:]))
		self.ball.translate(*map(int, file.readline().strip().split(' ')[1:]))
		self.ball.set_radius()
		self.all_object_list.add(self.ball)

	def read_effect(self, file):
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])
		self.goal_image.init('Image', file_name = ResourceManager.instance().image_path_list[image_id], alpha = True)
		self.goal_image.rotate(float(file.readline().strip().split(' ')[1]))
		self.goal_image.scale(*map(float, file.readline().strip().split(' ')[1:]))
		self.goal_image.translate(*map(int, file.readline().strip().split(' ')[1:]))
		self.goal_image.set_layer(5)

	def read_sound(self, file):
		sound_num = int(file.readline().strip().split(' ')[1])

		for i in range(sound_num):
			sound_type = file.readline().strip().replace('#', '')
			sound_id = int(file.readline().strip().split(' ')[1])
			sound = pygame.mixer.Sound(ResourceManager.instance().sound_path_list[sound_id])
			self.sound_list.update({sound_type: sound})
Example #3
0
def run_Game():
    main_menu = Main_menu()
    pause_menu = Pause_menu()
    main_menu.draw()
    onMenu = 1
    onGame = 0
    tick = 0
    while onMenu:
        for ev in event.get():
            if ev.type == QUIT:
                display.quit()
                quit()
                return
            elif ev.type == KEYDOWN:
                if not first_screen(main_menu, ev):
                    if not second_screen(main_menu, ev):
                        third_screen(main_menu, ev)
                main_menu.drawFocus()
                if main_menu.current_screen == len(main_menu.screens):
                    onMenu = 0
                    onGame = 1
                    main_menu.current_screen -= 1
        display.update()
        clock.tick(60)
    display.set_mode((1024, 700))
    if main_menu.charSelect == 0:
        player = WaveController()
    else:
        player = SpearBearer()

    hud = HUD(player)
    level = LevelOne()
    level.draw()
    camera = Camera(level.image.get_size()[0], level.image.get_size()[1])
    while onGame:
            if level.cleared() == 1:
                player.hp = player.hpmax
                player.mana = player.manamax
                level = LevelTwo()
            elif level.cleared() == 2:
                player.hp = player.hpmax
                player.mana = player.manamax
                level = LevelTwoPointOne()
            keys = key.get_pressed()
            for ev in event.get():
                if ev.type == QUIT:
                    display.quit()
                    quit()
                    return
                elif ev.type == KEYDOWN:
                    if ev.key == K_p:
                        image.save(screen, path + "/.tmp/game.png")
                        pause_menu.paused()
                    elif ev.key == K_k:
                        all_sprites.remove(enemies)
                        enemies.empty()

                    else:
                        player.action(ev.key, tick)
            if keys[K_DOWN]:
                player.move_down()
                level.update(player, 2)
            if keys[K_UP]:
                level.update(player, 3)
                player.move_up()
            if keys[K_RIGHT]:
                player.move_right()
                level.update(player, 1)
            if keys[K_LEFT]:
                player.move_left()
                level.update(player, 0)
            check_collisions()
            level.draw()
            player.update(tick)
            all_sprites.draw(screen)
            hud.draw(player)
            enemies.update(player, tick)
            spells.draw(screen)
            e_spells.draw(screen)
            display.update()
            tick += 1
            clock.tick(60)
    quit()
Example #4
0
class Scene(State):
	def __init__(self):
		super(Scene, self).__init__()

		pygame.mixer.init(44100, -16, 4, 2048)
		self.all_object_list = pygame.sprite.LayeredUpdates()
		self.zombie_list = pygame.sprite.Group()
		self.blood_splash = BloodSplash()
		self.background = Object()
		self.player = Player()
		self.zombie_sprite = []
		self.grave_list = []
		self.hud = HUD()
		self.sound_list = dict()
		self.bg_music = pygame.mixer.music
		self.game_over = False
		self.time = pygame.time.get_ticks()

	def init(self):
		self.read_scene()

		# Bring cursor to front
		self.all_object_list.move_to_front(self.player)

		# Set background music
		self.sound_list['background'].play().set_endevent(pygame.constants.USEREVENT)

		# Scale background to screen size
		self.background.image = pygame.transform.scale(self.background.image, (SCREEN_WIDTH, SCREEN_HEIGHT))

	def process_events(self, event):
		if event.type == pygame.USEREVENT:
			self.sound_list['background'].play()
		elif event.type == pygame.MOUSEBUTTONDOWN:
			self.sound_list['gunshot'].play()
			self.process_raycast()
		elif event.type == pygame.KEYDOWN:
			if (event.key == pygame.K_p):
				if self.is_running:
					self.pause()
				else:
					self.resume()

	def update(self):
		if (not self.is_running):
			return

		# Process game
		self.process_zombie()

		# Update all objects
		self.all_object_list.update(self.hud)
		self.hud.update()

	def draw(self, screen):
		screen.fill(WHITE)
		self.all_object_list.draw(screen)
		apply_all(self.zombie_list.sprites(), 'show_timer', screen)
		self.hud.draw(screen)

	#--------------------------------------LOGIC PROCESSING SECTION-----------------------------------------------
	def process_zombie(self):
		# Randomly choose an interval between 0.5 to 1.5 second to spawn another zombie
		if (pygame.time.get_ticks() - self.time >= random.randrange(1, 3) * 500):
			# Random location for zombie
			zombie_pos = random.randrange(0, len(self.grave_list))

			# Check if grave's position already had zombie
			if (not next((True for zombie in self.zombie_list.sprites() if zombie.pos == zombie_pos), False)):
				# Randomly pick zombie from zombie sprite list
				zombie = deepcopy(self.zombie_sprite[random.randrange(0, len(self.zombie_sprite))])
				zombie.set_pos(zombie_pos)

				# Set zombie to the right position
				zombie.move_to(*self.grave_list[zombie_pos].get_pos())
				zombie.translate(35, -10)

				# Set zombie layer
				zombie.set_layer(self.grave_list[zombie_pos]._layer - 1)

				# Add to zombie list and object list
				self.zombie_list.add(zombie)
				self.all_object_list.add(zombie)

			# Reset timer
			self.time = pygame.time.get_ticks()

	def process_raycast(self):
		mouse_pos = pygame.mouse.get_pos()

		hit_zombie = next((zombie for zombie in self.zombie_list.sprites() if zombie.collide_point(list(map(operator.sub, mouse_pos, zombie.get_pos())))), None)

		if (hit_zombie is not None):
			# Play zombie's death sound
			self.sound_list['dying_scream'].play()

			# Update hit count
			self.hud.update_hit()

			# Splash blood
			blood = deepcopy(self.blood_splash)
			blood.move_to(*self.player.get_pos())
			blood.set_layer(self.all_object_list.get_top_layer() + 1)
			blood.show()
			self.all_object_list.add(blood)

			hit_zombie.kill()

	#----------------------------------------READ FILE SECTION-----------------------------------------------------
	def read_scene(self):
		with open(ResourceManager.scene_path_list[0]) as file:
			self.read_hud(file)
			self.read_background(file)
			self.read_player(file)
			self.read_grave(file)
			self.read_zombie(file)
			self.read_blood_splash(file)
			self.read_sound(file)

	def read_hud(self, file):
		file.readline()
		hud_id = int(file.readline().strip().split(' ')[1])
		self.hud.init(ResourceManager.hud_path_list[hud_id])

	def read_background(self, file):
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])
		self.background.init('Image', file_name = ResourceManager.image_path_list[image_id])
		self.all_object_list.add(self.background)

	def read_player(self, file):
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])
		self.player.init('Image', file_name = ResourceManager.image_path_list[image_id], alpha = True)
		self.player.translate(*map(int, file.readline().strip().split(' ')[1:]))
		self.player.rotate(float(file.readline().strip().split(' ')[1]))
		self.player.scale(*map(float, file.readline().strip().split(' ')[1:]))
		self.all_object_list.add(self.player)

	def read_grave(self, file):
		file.readline()
		image_id = int(file.readline().strip().split(' ')[1])
		grave = Object()
		grave.init('Image', file_name = ResourceManager.image_path_list[image_id], alpha = True)
		grave.translate(*map(int, file.readline().strip().split(' ')[1:]))
		grave.rotate(float(file.readline().strip().split(' ')[1]))
		grave.scale(*map(float, file.readline().strip().split(' ')[1:]))

		for i in range(3):
			for j in range(3):
				self.grave_list.append(deepcopy(grave))
				self.grave_list[-1].translate(200 * j, 100 * i)
				self.grave_list[-1].set_layer(2 * (i + 1))

		self.all_object_list.add(self.grave_list)

	def read_zombie(self, file):
		zombie_num = int(file.readline().strip().split(' ')[1])

		for i in range(zombie_num):
			image_id = int(file.readline().strip().split(' ')[1])
			self.zombie_sprite.append(Zombie())
			self.zombie_sprite[-1].init('Image', file_name = ResourceManager.image_path_list[image_id], alpha = True)
			self.zombie_sprite[-1].translate(*map(int, file.readline().strip().split(' ')[1:]))
			self.zombie_sprite[-1].rotate(float(file.readline().strip().split(' ')[1]))
			self.zombie_sprite[-1].scale(*map(float, file.readline().strip().split(' ')[1:]))

	def read_blood_splash(self, file):
		file.readline()
		blood_id = int(file.readline().strip().split(' ')[1])
		self.blood_splash.init('Image', file_name = ResourceManager.image_path_list[blood_id], alpha = True)
		self.blood_splash.translate(*map(int, file.readline().strip().split(' ')[1:]))
		self.blood_splash.rotate(float(file.readline().strip().split(' ')[1]))
		self.blood_splash.scale(*map(float, file.readline().strip().split(' ')[1:]))

	def read_sound(self, file):
		sound_num = int(file.readline().strip().split(' ')[1])

		for i in range(sound_num):
			sound_type = file.readline().strip().replace('#', '')
			sound_id = int(file.readline().strip().split(' ')[1])
			sound = pygame.mixer.Sound(ResourceManager.sound_path_list[sound_id])
			self.sound_list.update({sound_type: sound})
Example #5
0
def playGame(screen, character, currentInfoText):
    screen_rect = screen.get_rect()
    
    level = LevelTutorial("level/tutorial/tutorial.txt", character, currentInfoText)
    world = level.world
    crashman = level.crashman
    pygame.mouse.set_visible(True)

    camera = Camera(screen, crashman.rect, level)
    all_sprite = level.all_sprite

    
    clock = pygame.time.Clock()

    up = down = left = right = False
    x, y = 0, 0


    #randomly selects an enemy port
    enemy_list=[]
    activePortIndex=random.randrange(len(level.enemy_ports))
    activePort=level.enemy_ports[activePortIndex]




    #untilNextSpawn=level.spawn_delay
    untilNextSpawn=0
    totalTime=0
    enemyCount=0

    hud=HUD()



    #this is the while true loop
    while crashman.alive :
        for event in pygame.event.get():

            if event.type == QUIT:
                pygame.quit()
                sys.exit()



            if event.type == KEYDOWN and (event.key == K_ESCAPE or event.key==K_RETURN):
                up=down=left=right=False
                pauseScreen(screen,character)
                
            #control crashman
            keys = pygame.key.get_pressed()  #checking pressed keys
            if keys[pygame.K_UP] or keys[pygame.K_SPACE]:
                up=True
            else:
                up=False
                
            if keys[pygame.K_DOWN]:
                down=True
            else:
                down=False
                
            if keys[pygame.K_LEFT]:
                left=True
            else:
                left=False
                
            if keys[pygame.K_RIGHT]:
                right=True
            else:
                right=False

        #sequential spawn order
        if untilNextSpawn<=0 and enemyCount<level.enemy_max:
            print "ENEMY HERE NOW"
            e=Enemy(activePort[0],activePort[1],activePort[2],level)
            enemy_list.append(e)
            level.all_sprite.add(e)
            world.append(e)
            activePortIndex+=1
            if activePortIndex>=len(level.enemy_ports):
                activePortIndex=0
            activePort=level.enemy_ports[activePortIndex]
            untilNextSpawn=level.spawn_delay
            enemyCount+=1

        #random spawn order
        """if untilNextSpawn<=0 and enemyCount<level.enemy_max:
            print "ENEMY HERE NOW"
            e=Enemy(activePort[0],activePort[1],activePort[2],level)
            enemy_list.append(e)
            level.all_sprite.add(e)
            world.append(e)
            activePortIndex=random.randrange(len(level.enemy_ports))
            activePort=level.enemy_ports[activePortIndex]
            untilNextSpawn=level.spawn_delay
            enemyCount+=1"""


        #removes dead enemies
        for e in enemy_list:
            if e.alive==False:
                print "ded del thjo"
                enemy_list.remove(e)
                all_sprite.remove(e)
                world.remove(e)
                enemyCount-=1

            if e.freshkick==True:
                hud.enemies_defeated+=1
                hud.update()
                e.freshkick=False


        

        #timer and spawn countdown
        #updates hud time
        tpt = tps(clock, FPS)
        totalTime+=tpt
        if hud.time!=math.floor(totalTime):
            hud.time=math.floor(totalTime)
            hud.update()
        
        if enemyCount<level.enemy_max:
            untilNextSpawn-=tpt
            print str(enemyCount)+": "+str(untilNextSpawn)


        #DRAW ORDER:
        #bg, world, elemental, hud
        #camera.draw_sprites(screen, all_sprite)
        level.drawBG(screen)
        camera.draw_sprites_prio(screen, all_sprite, crashman)

        if level.elemental:
            level.elementalOverlay.draw(screen)

        hud.draw(screen)
        level.drawInfo(screen)

        #final updates
        crashman.update(up, down, left, right)
        for e in enemy_list:
            e.update(tpt)
        camera.update()
        pygame.display.flip()


    #################################
    #game complete
    #pygame.display.flip()
    playGame(screen,character, level.currentInfoBlock.infoText)
def playGame(screen, level):
    screen_rect = screen.get_rect()

    level.reset()
    world = level.world
    crashman = level.crashman
    pygame.mouse.set_visible(True)

    camera = Camera(screen, crashman.rect, level)
    all_sprite = level.all_sprite

    clock = pygame.time.Clock()

    up = down = left = right = False
    x, y = 0, 0

    #randomly selects an enemy port
    enemy_list = []
    activePortIndex = random.randrange(len(level.enemy_ports))
    activePort = level.enemy_ports[activePortIndex]

    #untilNextSpawn=level.spawn_delay
    untilNextSpawn = 0
    totalTime = 0
    enemyCount = 0

    hud = HUD()

    pygame.mixer.music.load(level.musicPath)
    pygame.mixer.music.play(-1)

    #this is the while true loop
    while crashman.alive and not (objectiveComplete(
            objectiveProgress(level.objectiveType, hud.enemies_defeated,
                              totalTime), level.objectiveMax)
                                  or crashman.foundFlag):
        for event in pygame.event.get():

            if event.type == QUIT:
                pygame.quit()
                sys.exit()

            if event.type == KEYDOWN and (event.key == K_ESCAPE
                                          or event.key == K_RETURN):
                #import MainScreen
                if level.hasVideo == True:
                    level.movie.pause()
                up = down = left = right = False
                pauseScreen(screen, level)
                if level.hasVideo == True:
                    level.movie.pause()

            #cheat to end level
            if event.type == KEYDOWN and event.key == K_BACKSPACE:
                crashman.foundFlag = True

            #control crashman
            keys = pygame.key.get_pressed()  #checking pressed keys
            if keys[pygame.K_UP] or keys[pygame.K_SPACE]:
                up = True
            else:
                up = False

            if keys[pygame.K_DOWN]:
                down = True
            else:
                down = False

            if keys[pygame.K_LEFT]:
                left = True
            else:
                left = False

            if keys[pygame.K_RIGHT]:
                right = True
            else:
                right = False

        #sequential spawn order
        """
        if untilNextSpawn<=0 and enemyCount<level.enemy_max:
            print "ENEMY HERE NOW"
            e=Enemy(activePort[0],activePort[1],activePort[2],level)
            enemy_list.append(e)
            level.all_sprite.add(e)
            world.append(e)
            activePortIndex+=1
            if activePortIndex>=len(level.enemy_ports):
                activePortIndex=0
            activePort=level.enemy_ports[activePortIndex]
            untilNextSpawn=level.spawn_delay
            enemyCount+=1"""

        #random spawn order
        if untilNextSpawn <= 0 and enemyCount < level.enemy_max:
            print "ENEMY HERE NOW"
            e = Enemy(activePort[0], activePort[1], activePort[2], level)
            enemy_list.append(e)
            level.all_sprite.add(e)
            world.append(e)
            activePortIndex = random.randrange(len(level.enemy_ports))
            activePort = level.enemy_ports[activePortIndex]
            untilNextSpawn = level.spawn_delay
            enemyCount += 1

        #removes dead enemies
        for e in enemy_list:
            if e.alive == False:
                print "ded del thjo"
                enemy_list.remove(e)
                all_sprite.remove(e)
                world.remove(e)
                enemyCount -= 1

            if e.freshkick == True:
                hud.enemies_defeated += 1
                hud.update()
                e.freshkick = False

        #timer and spawn countdown
        #updates hud time
        tpt = tps(clock, FPS)
        totalTime += tpt
        if hud.time != math.floor(totalTime):
            hud.time = math.floor(totalTime)
            hud.update()

        if enemyCount < level.enemy_max:
            untilNextSpawn -= tpt
            print str(enemyCount) + ": " + str(untilNextSpawn)

        #DRAW ORDER:
        #bg, world, elemental, hud
        #camera.draw_sprites(screen, all_sprite)
        level.drawBG(screen)
        camera.draw_sprites_prio(screen, all_sprite, crashman)

        if level.elemental:
            level.elementalOverlay.draw(screen)

        hud.draw(screen)

        #final updates
        crashman.update(up, down, left, right)
        for e in enemy_list:
            e.update(tpt)
        camera.update()
        pygame.display.flip()

    #################################
    #game complete
    #pygame.display.flip()
    pygame.mixer.music.stop()
    crashman.update(False, False, False, False)

    level.drawBG(screen)
    camera.draw_sprites_prio(screen, all_sprite, crashman)

    if level.elemental:
        level.elementalOverlay.draw(screen)

    hud.draw(screen)
    pygame.display.flip()

    if crashman.direction == "right":
        crashman.image = crashman.jump_right
    else:
        crashman.image = crashman.jump_left
    """if objectiveComplete(objectiveProgress(level.objectiveType,hud.enemies_defeated,totalTime),level.objectiveMax):
        win(screen, camera, level, enemy_list, clock)
    else:
        lose(screen, camera, level, enemy_list, clock)"""

    if crashman.alive == False:
        lose(screen, camera, level, enemy_list, clock, hud)
    else:
        win(screen, camera, level, enemy_list, clock, hud, crashman.character)