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)
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, {}
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()
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()
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()
#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))