Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Pygame] : Problème avec des booleans et des if

Pourquoi se if passe toujours ?

    28 juin 2019 à 11:56:08

    Même projet que hier, mais nouveau problème.
    Vu que je n'ai pas utilisé "pygame.Rect()" pour créer mes "sprites" alors je ne peux pas utiliser le systeme de Hitbox de Pygame.
    Alors j'ai fait des tests avec les positions x et y des joueurs par rapport à chaque pique.
    Et dans ce test, j'inclus une Bool pour savoir si le joueur est toujours sur la pique ou non ( ".hit").
    Je l'utilise donc dans mon test pour eviter de spammer l'action du touché ( ce qui serait dérangeant ).

    Mais le problème arrive quand - même !

    Voici mon code :
    #imports
    import pygame
    import random
    
    
    #pygame
    pygame.init()
    win = pygame.display.set_mode((1920, 1080), pygame.FULLSCREEN)
    pygame.display.set_caption("Da Shit By Shawrex")
    
    
    #Classes
    class Players :
        def __init__(self, x, y) :
            self.x = x
            self.y = y
            self.hit = False
    
        def draw(self) :
            pygame.draw.rect(win, (255, 255, 255), (self.x, self.y, 40, 40))
    
    class Spike :
        def __init__(self, x, y) :
            self.x = x
            self.y = y
    
        def draw(self) :
            pygame.draw.rect(win, (0, 0, 0), (self.x, self.y, 40, 40))
    
    
    #Vars
    run = True
    
    #Create objects
    p1 = Players(480, 540)
    p2 = Players(1440, 540)
    
    spikes = []
    for x in range(10) :
        x = random.randint(120, 1800)
        y = random.randint(40, 960)
        if x % 40 != 0 :
            x -= (x % 40)
        if y % 40 != 0 :
            y -= (y % 40)
            y += 20
        spikes.append(Spike(x, y))
    
    
    
    #main loop
    while run :
        #Framerate
        pygame.time.delay(80)
    
        #Quit
        for event in pygame.event.get() :
            if event.type == pygame.QUIT :
                run = False
    
        #Moves
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] :
            if p1.x > 0 :
                p1.x -= 40
                p2.y -= 40
        if keys[pygame.K_RIGHT] :
            if p1.x < 920 :
                p1.x += 40
                p2.y += 40
        if keys[pygame.K_UP] :
            if p1.y > 60 :
                p1.y -= 40
                p2.x -= 40
        if keys[pygame.K_DOWN] :
            if p1.y < 980 :
                p1.y += 40
                p2.x += 40
    
        #Drawings
        win.fill((255, 255, 255))
        pygame.draw.rect(win, (51, 255, 51), (960, 60, 960, 960))
        pygame.draw.rect(win, (51, 51, 255), (0, 60, 960, 960))
        p1.draw()
        p2.draw()
    
        for x in spikes :
            x.draw()
            #Test for collisions
            if p1.x > x.x - 20 and p1.x < x.x + 20 and p1.y > x.y - 20 and p1.y < x.y + 20 and p1.hit == Falsea :
                print("Hit 1")
                p1.hit = True
            else :
                p1.hit = False
    
    
            if p2.x > x.x - 20 and p2.x < x.x + 20 and p2.y > x.y - 20 and p2.y < x.y + 20 :
                if not(p2.hit) :
                    print("Hit 2")
                    p2.hit = True
            else :
                p2.hit = False
    
    
        pygame.display.update()
    
    pygame.quit()

    Comme vous pouvez le voir, j'ai essayer plusieurs manières de faire le test. Mais cela ne change rien.
    J'espere que vous pouvez en tirer quelque chose.
    Merci du temps que vous passerez à m'aider.

    Merci !
    • Partager sur Facebook
    • Partager sur Twitter

    Si j'entends pas les rageux, c'est car les morts ne parlent pas. - 2019

    [Pygame] : Problème avec des booleans et des if

    × 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