示例#1
0
    def reset(self):
        self.score = 0
        self.speedbird = self.min_speed
        self.size_ouv = self.max_size_ouv

        self.bird = Bird(self.width // 4, self.height // 2)
        self.plateformes = [
            Plateforme(self.width + delta * self.dist_plat, self.height,
                       self.size_ouv) for delta in range(self.nb_plateform)
        ]
        self.current_plat = self._get_current_plateform(self.bird)
        self.steps_beyond_done = None
        return np.array(self.state)
示例#2
0
    def step(self, action, duo=False):
        assert self.action_space.contains(
            action), "%r (%s) invalid" % (action, type(action))

        # Applique l action sur flappy bird
        action = FlappyBirdEnv.actions[action]
        self.bird.y += self.powerbird if action == 'fly' and self.bird.y + self.bird.rayon < self.height else 0
        self.bird.y -= self.massbird if self.bird.y > 0 else 0
        if self.bird.alive:
            if self.checkCollision(self.bird):
                self.bird.kill(self.score)

        # Si plateforme hors plateau, on la supprime et on en ajoute une autre a la suite
        if (self.plateformes[0].x + self.plateformes[0].epaisseur < 0):
            new_p = Plateforme(self.plateformes[-1].x + self.dist_plat,
                               self.height, self.size_ouv)
            self.plateformes = np.delete(self.plateformes, 0)
            self.plateformes = np.append(self.plateformes, new_p)
            if (self.size_ouv > self.min_size_ouv):
                self.size_ouv -= 2
            elif (self.speedbird < self.max_speed):
                self.speedbird += 0.05
            self.score += 1

        # Decale les plateformes a la vitesse "speedbird"
        for p in self.plateformes:
            p.updatePos(self.speedbird)

        # Verifie que flappy bird n est pas mort
        done = not self.bird.alive or (self.score > self.score_max)
        done = bool(done)

        # Calcul du score
        if not done:
            if (self.current_plat != self._get_current_plateform(self.bird)):
                self.current_plat = self._get_current_plateform(self.bird)
            reward = 1.0
        elif self.steps_beyond_done is None:
            self.steps_beyond_done = 0
            reward = 1.0
            if not duo and self.score > FlappyBirdEnv.high_score:
                FlappyBirdEnv.high_score = self.score
        else:
            if self.steps_beyond_done == 0:
                logger.warn(
                    "You are calling 'step()' even though this environment has already returned done = True. You should always call 'reset()' once you receive 'done = True' -- any further steps are undefined behavior."
                )
            self.steps_beyond_done += 1
            reward = 0.0
        return self.state, reward, done, {}
示例#3
0
 def __init__(self):
     #chargement joueur
     self.player = Player()
     #chargement enemy
     self.enemy = Enemy()
     #chargement sol
     self.sol = Sol()
     #chargement effects
     self.effects = Effects()
     #chargement plateforme
     self.plateforme = Plateforme()
     #chargement sonore
     self.sonore = Sonore()
     
     
     #définir pressed
     self.pressed = {}  #touches actionnées par le joueur
     
     #création gravité
     self.gravite = 3
     self.resistance = 0
	def boucle_principale(self):
		"""
		Boucle principale du jeu

		"""
		dictionnaire_vide_joueur = {}
		dictionnaire_images_joueur = self.joueur.convertir_rect_surface(self.image_joueur, dictionnaire_vide_joueur)
		dictionnaire_vide_enemie = {}
		dictionnaire_images_enemie = self.enemie.image_liste(self.image_enemie, dictionnaire_vide_enemie)

		while self.jeu_encours:

			for event in pygame.event.get():
				if event.type == pygame.QUIT:
					sys.exit()

				if event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]:
					self.x_souris, self.y_souris = pygame.mouse.get_pos()
					print(self.x_souris, self.y_souris)

					if (self.x_souris < 575 and self.x_souris > 525 and self.y_souris < 70 and self.y_souris > 20):
						self.etat_1 = True

					if (self.x_souris < 59 and self.x_souris > 29 and self.y_souris < 480 and self.y_souris > 450) and self.etat_1:
						self.but_du_jeu = True

					if (self.x_souris < 901 and self.x_souris > 851 and self.y_souris < 572 and self.y_souris > 533) and self.etat_1:
						self.recommencer()
						self.etat_1 = False

					if (self.x_souris < 884 and self.x_souris > 855 and self.y_souris < 477 and self.y_souris > 437) and self.etat_1:
						self.etat_1 = False



				if event.type == pygame.KEYDOWN:
					if event.key == pygame.K_RIGHT:
						self.joueur_vitesse_x = 10
						self.joueur.direction = 1
						self.joueur.etat = 'bouger'

					if event.key == pygame.K_LEFT:
						self.joueur_vitesse_x = -10
						self.joueur.direction = -1
						self.joueur.etat = 'bouger'


					if event.key == pygame.K_UP:
						self.joueur.a_sauter = True
						self.joueur.nombre_de_saut += 1

					if event.key == pygame.K_p:
						self.t1 = time.time()
						self.joueur.etat = 'attaque'

					if event.key == pygame.K_e:
						self.enemie.a_attaque = True
						self.enemie.etat = 'attaque'

				if event.type == pygame.KEYUP:
					if event.key == pygame.K_RIGHT:
						self.joueur_vitesse_x = 0
						self.joueur.etat = 'debout'

					if event.key == pygame.K_LEFT:

						self.joueur_vitesse_x = 0
						self.joueur.etat = 'debout'


					if event.key == pygame.K_p:
						self.t2 = time.time()
						self.joueur.a_tire = True
						self.joueur.etat = 'debout'

					if event.key == pygame.K_e:
						self.enemie.etat = 'vivant'



			if self.sol.rect.colliderect(self.joueur.rect):
				self.resistance = (0, -10)
				self.collision_sol = True
				self.joueur.nombre_de_saut = 0

			else:
				self.resistance = (0, 0)

			if self.joueur.a_sauter and self.collision_sol:
				if self.joueur.nombre_de_saut < 2:
					self.joueur.sauter()

			if self.joueur.a_tire:
				if len(self.projectile_groupe) < self.joueur.tir_autorise and self.delta_temps > 0.05:
					projectile = Projectile(self.joueur.rect.x + 20, self.joueur.rect.y + 10, [10, 10], self.joueur.direction,
					                            self.image_boule_de_feu)
					self.projectile_groupe.add(projectile)
					self.joueur.a_tire = False

			if self.enemie.a_attaque:

				if len(self.slash_groupe) < self.enemie.tir_autorise:
					slash = Slash(self.enemie.rect.x + 20, self.enemie.rect.y - 5, [30, 30], self.image_slash)
					self.slash_groupe.add(slash)
					self.enemie.a_attaque = False

			secondes = (self.debut_timer - pygame.time.get_ticks()) // 1000

			if secondes == 0:
				break

			for projectile in self.projectile_groupe:
				projectile.mouvement(50)
				if projectile.rect.right >= self.rect.right or projectile.rect.left <= self.rect.left:
					self.projectile_groupe.remove(projectile)

				if self.enemie.rect.colliderect(projectile.rect):
					self.projectile_groupe.remove(projectile)
					self.enemie.degats_recus = 10
					if self.delta_temps > 2:
						self.enemie.degats_recus = 30
					self.enemie.vie -= self.enemie.degats_recus
					self.enemie.degats_recus = 0


			for slash in self.slash_groupe:
				slash.mouvement(50)
				if slash.rect.right >= self.rect.right or slash.rect.left <= self.rect.left:
					self.slash_groupe.remove(slash)

				if self.joueur.rect.colliderect(slash.rect):
					self.slash_groupe.remove(slash)
					self.joueur.rect.x += 3
					self.joueur.degats_recus = 10
					self.joueur.vie -= self.joueur.degats_recus
					self.joueur.degats_recus = 0

			if self.joueur.vie <= 0:
				self.joueur.etat = 'mort'
			if self.enemie.vie <= 0:
				self.enemie.etat = 'mort'

			for rectangle in self.plateforme_liste_rect:
				plateforme = Plateforme(rectangle, self.image_plat)
				self.plateforme_groupe.add(plateforme)
				if self.joueur.rect.midbottom[1] // 10 * 10 == plateforme.rect.top \
						and self.joueur.rect.colliderect(rectangle):
					self.resistance = (0, -10)
					self.joueur.nombre_de_saut = 0

			self.delta_temps = self.t2 - self.t1
			self.joueur.mouvement(self.joueur_vitesse_x)
			self.gravite_jeu()
			self.joueur.rect.clamp_ip(self.rect)
			self.ecran.fill((255, 255, 255))
			self.ecran.blit(self.image_ciel_bleu, self.rect)
			self.sol.afficher(self.ecran)
			self.ecran.blit(self.image_barre_de_vie, (26, 500, 285, 40))
			self.ecran.blit(self.image_tete, (10, 490, 50, 50))
			self.joueur.afficher(self.ecran, dictionnaire_images_joueur)
			self.enemie.afficher(self.ecran, dictionnaire_images_enemie)
			self.ecran.blit(self.image_bouton, (525, 20, 50, 50))
			self.creer_message('grande','{}'.format(secondes), [535, 70, 20, 20], (255, 255, 255))
			for plateforme in self.plateforme_groupe:
				plateforme.afficher(self.ecran)

			for slash in self.slash_groupe:
				slash.afficher(self.ecran)
			for projectile in self.projectile_groupe:
				projectile.afficher(self.ecran, self.delta_temps)

			if self.etat_1:
				pygame.draw.rect(self.ecran, (255, 255, 255), (0, 500, 1100, 100), 2)
				pygame.draw.rect(self.ecran, (0, 0, 0), (0, 400, 1100, 200))
				self.ecran_menu()
				if self.but_du_jeu:
					self.creer_message('petite', f" Le dernier en vie Gagne !!!  ", (100, 450, 80, 80), (255, 255, 255))


			pygame.draw.rect(self.ecran, (255, 0, 0), self.rect, 1)
			self.horloge.tick(self.fps)
			pygame.display.flip()
示例#5
0
文件: main.py 项目: Stupzz/Master1
from plateforme import Plateforme
from transit import Transit
from operateur import Operateur
from actor import Actor

if __name__ == '__main__':
    context = dict()

    parts = [Operateur, Transit]
    objs_parts = []
    actor = Actor(context)

    for p in parts:
        objs_parts += [p(context)]

    objs_parts.append(Plateforme(context, input('Combien de train souhaitez vous dans votre gare?')))

    for p in objs_parts:
        p.launch()

    actor.run()

    for p in objs_parts:
        p.join()
示例#6
0
    def boucle_principale(self):
        """
		Boucle principale du jeu

		"""
        dictionnaire_vide_joueur = {}
        dictionnaire_images_joueur = self.joueur.convertir_rect_surface(
            self.image_joueur, dictionnaire_vide_joueur)
        dictionnaire_vide_enemie = {}
        dictionnaire_images_enemie = self.enemie.image_liste(
            self.image_enemie, dictionnaire_vide_enemie)

        while self.jeu_encours:

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    sys.exit()

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_RIGHT:
                        self.joueur_vitesse_x = 10
                        self.joueur.direction = 1
                        self.joueur.etat = 'bouger'

                    if event.key == pygame.K_LEFT:
                        self.joueur_vitesse_x = -10
                        self.joueur.direction = -1
                        self.joueur.etat = 'bouger'

                    if event.key == pygame.K_UP:
                        self.joueur.a_sauter = True
                        self.joueur.nombre_de_saut += 1

                    if event.key == pygame.K_p:
                        self.t1 = time.time()
                        self.joueur.etat = 'attaque'

                    if event.key == pygame.K_e:
                        self.enemie.a_attaque = True
                        self.enemie.etat = 'attaque'

                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_RIGHT:
                        self.joueur_vitesse_x = 0
                        self.joueur.etat = 'debout'

                    if event.key == pygame.K_LEFT:

                        self.joueur_vitesse_x = 0
                        self.joueur.etat = 'debout'

                    if event.key == pygame.K_p:
                        self.t2 = time.time()
                        self.joueur.a_tire = True
                        self.joueur.etat = 'debout'

                    if event.key == pygame.K_e:
                        self.enemie.etat = 'vivant'

            if self.sol.rect.colliderect(self.joueur.rect):
                self.resistance = (0, -10)
                self.collision_sol = True
                self.joueur.nombre_de_saut = 0

            else:
                self.resistance = (0, 0)

            if self.joueur.a_sauter and self.collision_sol:
                if self.joueur.nombre_de_saut < 2:
                    self.joueur.sauter()

            if self.joueur.a_tire:
                if len(
                        self.projectile_groupe
                ) < self.joueur.tir_autorise and self.delta_temps > 0.05:
                    projectile = Projectile(self.joueur.rect.x + 20,
                                            self.joueur.rect.y - 5, [10, 10],
                                            self.joueur.direction,
                                            self.image_boule_de_feu)
                    self.projectile_groupe.add(projectile)
                    self.joueur.a_tire = False

            if self.enemie.a_attaque:

                if len(self.slash_groupe) < self.enemie.tir_autorise:
                    slash = Slash(self.enemie.rect.x + 20,
                                  self.enemie.rect.y - 5, [30, 30],
                                  self.image_slash)
                    self.slash_groupe.add(slash)
                    self.enemie.a_attaque = False

            for projectile in self.projectile_groupe:
                projectile.mouvement(50)
                if projectile.rect.right >= self.rect.right or projectile.rect.left <= self.rect.left:
                    self.projectile_groupe.remove(projectile)

            for slash in self.slash_groupe:
                slash.mouvement(50)
                if slash.rect.right >= self.rect.right or slash.rect.left <= self.rect.left:
                    self.slash_groupe.remove(slash)

            for rectangle in self.plateforme_liste_rect:
                plateforme = Plateforme(rectangle, self.image_plat)
                self.plateforme_groupe.add(plateforme)
                if self.joueur.rect.midbottom[1] // 10 * 10 == plateforme.rect.top \
                  and self.joueur.rect.colliderect(rectangle):
                    self.resistance = (0, -10)
                    self.joueur.nombre_de_saut = 0

            self.delta_temps = self.t2 - self.t1
            self.joueur.mouvement(self.joueur_vitesse_x)
            self.gravite_jeu()
            self.joueur.rect.clamp_ip(self.rect)
            self.ecran.fill((255, 255, 255))
            self.ecran.blit(self.image_ciel_bleu, self.rect)
            self.joueur.afficher(self.ecran, dictionnaire_images_joueur)
            self.enemie.afficher(self.ecran, dictionnaire_images_enemie)
            self.sol.afficher(self.ecran)
            for plateforme in self.plateforme_groupe:
                plateforme.afficher(self.ecran)

            for slash in self.slash_groupe:
                slash.afficher(self.ecran)
            for projectile in self.projectile_groupe:
                projectile.afficher(self.ecran, self.delta_temps)
            pygame.draw.rect(self.ecran, (255, 0, 0), self.rect, 1)
            self.horloge.tick(self.fps)
            pygame.display.flip()
示例#7
0
#charger images arriere plan
background=pygame.image.load('assets/bg2.png').convert()
bgOver=pygame.image.load('assets/bg1.png').convert_alpha()
maison=pygame.image.load('assets/bg3.png').convert_alpha()



#chargement classe Player(), etc...
player = Player()
#chargement jeu
game = Game()
#chargement sol
sol = Sol()
#Plateforme
plateforme = Plateforme()
#chargement enemy
enemy = Enemy()
#chargement effets
effects = Effects()
#chargement sonor
sonore = Sonore()

font=pygame.font.Font(None, 50)

#PV Joueur
PV = 10
music_1PV = False
PV_im = pygame.image.load('assets/PV.png').convert_alpha()
StrPV = font.render("    "+str(PV),1,(16,16,22))