Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déplacement image pygame

    22 mai 2018 à 20:48:14

    Bonjour,

    je fais un jeu tron mais le problème est que l'image est décalée par rapport à la tête. Pouvez vous m'aider ?

    programme principale: (peut être devriez vous regarder vers les lignes 40)

    from pygame import *
    from classes import*
    from constantes import*
     
     
     
    
    fenetre = display.set_mode((x * one, y * one))
     
    # init des motos
    moto_a = [(0, 0), (0, 1)]
    
    tete_a = moto_a[-1]
     
    moto_b = [(x - 1, y - 1), (x - 1, y - 2)]
    tete_b = moto_b[-1]
     
    # initialisation d'un tableau pour les collisions entre les deux motos
    plateau = [[0 for i in range(x)] for j in range(y)]
    plateau[0][0] = 1
    plateau[0][1] = 1
     
    plateau[9][9] = 1
    plateau[9][8] = 1
     
    # direction
    direction_a = (0, 1)
    direction_b = (0, -1)
     
    
    le_joueur_a = joueurs(moto_a[-1])
    le_joueur_b = joueurs(moto_b[-1])
    
     
    continuer_jeu = 1
     
    # Boucle du jeux
    while continuer_jeu:
        fenetre.fill(BLACK)
        le_joueur_a.rect.center = (tete_a[0]*one,tete_a[1]*one)
        le_joueur_b.rect.center = (tete_b[0]*one,tete_b[1]*one)
        print(le_joueur_a.rect)  
        # tant que le tete ne depasse pas les bords et que la mot n'a qu'une tete (si 2 tetes alors "elle s'est mordu")
        if 0 <= tete_a[0] < x and 0 <= tete_a[1] < x and moto_a.count(tete_a) and 1:
            if 0 <= tete_b[0] < x and 0 <= tete_b[1] < x and moto_b.count(tete_b) and 1:
                # changement de direction en fonction des touches
                for ev in event.get(KEYDOWN):
     
                    if ev.key == K_LEFT:
                        direction_a = (-1, 0)
                        directiona = 'gauche_a'
                        le_joueur_a.direction_a(directiona)
    
                    elif ev.key == K_RIGHT:
                        direction_a = (1, 0)
                        directiona = 'droite_a'
                        le_joueur_a.direction_a(directiona)
    
                    elif ev.key == K_UP:
                        direction_a = (0, -1)
                        directiona = 'haut_a'
                        le_joueur_a.direction_a(directiona)
    
                    elif ev.key == K_DOWN:
                        direction_a = (0, 1)
                        directiona = 'bas_a'
                        le_joueur_a.direction_a(directiona)
    
                    if ev.key == K_f:
                        direction_b = (-1, 0)
                        direction = 'gauche_b'
                        le_joueur_b.direction_a(direction)
    
                    elif ev.key == K_h:
                        direction_b = (1, 0)
                        direction = 'droite_b'
                        le_joueur_b.direction_a(direction)
    
                    elif ev.key == K_t:
                        direction_b = (0, -1)
                        direction = 'haut_b'
                        le_joueur_b.direction_a(direction)
    
                    elif ev.key == K_g:
                        direction_b = (0, 1)
                        direction = 'bas_b'
                        le_joueur_b.direction_a(direction)
    
     
                # si la tete est différent de la fenetre,on ajoute une nouvelle tete, donc on ajoute toujours une case tant qu'elle est dans la fenetre
                moto_a = moto_a[0 if tete_a != fenetre else 1:] + [(tete_a[0] + direction_a[0], tete_a[1] + direction_a[1])]
                moto_b = moto_b[0 if tete_b != fenetre else 1:] + [(tete_b[0] + direction_b[0], tete_b[1] + direction_b[1])]
    
                # quand la moto passe sur une case, cette dermière prend la valeur 1, et si la moto passe par une case de valeur 1....collision
                try:
                    if plateau[tete_a[0] + direction_a[0]][tete_a[1] + direction_a[1]] == 1:
     
                        continuer_jeu = 0
                    elif plateau[tete_b[0] + direction_b[0]][tete_b[1] + direction_b[1]] == 1:
                        continuer_jeu = 0
                except:
                    pass
     
     
     
     
                else:
                    plateau[tete_a[0] + direction_a[0]][tete_a[1] + direction_a[1]] = 1
                plateau[tete_b[0] + direction_b[0]][tete_b[1] + direction_b[1]] = 1
     
                # *********************************************************************
                # ici la partie rendu
                # pour l'instant on dessine des carres pour verifier le fonctionnement
                for i in moto_a + []:
                    fenetre.fill((228,43,61), (i[0] * one, i[1] * one, one, one))
                for z in moto_b + []:
                    fenetre.fill((74,139,221), (z[0] * one, z[1] * one, one, one))
                fenetre.blit(le_joueur_a.image,le_joueur_a.rect)
                fenetre.blit(le_joueur_b.image,le_joueur_b.rect)
                display.flip()
     
                # *********************************************************************
                # on n'oublie pas d'aligner les variables
                tete_a = moto_a[-1]
                tete_b = moto_b[-1]
     
                # comme on filtre les events, par principe on clear la event queue
                event.clear()
     
                # tempo
                time.wait(100)
            else:
                continuer_jeu = 0 and print("collision moto b")
     
        else:
            continuer_jeu = 0 and print(" collision moto a")
     
    print(continuer_jeu)
    

    classes:

    import pygame
    from pygame.locals import*
    from constantes import*
     
    class joueurs:
        def __init__(self,position_départ):
     
            self.droite_a = pygame.image.load('motodroite_a.png').convert_alpha()
            self.gauche_a = pygame.image.load('motogauche_a.png').convert_alpha()
            self.haut_a = pygame.image.load('motohaut_a.png').convert_alpha()
            self.bas_a = pygame.image.load('motobas_a.png').convert_alpha()
    
            self.image = self.bas_a
    
            self.rect = self.image.get_rect()
    
            self.rect.topleft = position_départ
    
     
        def direction_a(self,direction):
     
            if direction == 'gauche_a':
                self.image=self.gauche_a
     
            if direction == 'droite_a':
                self.image=self.droite_a
     
            if direction == 'haut_a':
                self.image=self.haut_a
     
            if direction == 'bas_a':
                self.image=self.bas_a
     
        def direction_b(self,direction):
     
            if direction == 'gauche_b':
                self.image=self.gauche_b
     
            if direction == 'droite_b':
                self.image=self.droite_b
     
            if direction == 'haut_b':
                self.image=self.haut_b
     
            if direction == 'bas_b':
                self.image=self.bas_b
    

    Pour l'instant j'ai fais que l'affichage de la tête a donc c'est normale si le système d'affichage pour tête b n'est pas complet...

    constantes:

    x, y = 60, 60
    one = 10
    
    BLACK = (0,0,0)
    WHITE = (255,255,255)
    

    Merci d'avance




    -
    Edité par OscarDurand 22 mai 2018 à 20:49:30

    • Partager sur Facebook
    • Partager sur Twitter

    Déplacement image pygame

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown