Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Pygame] : Classe dans un Array ? (Impossible ?)

Comment puis-je mettre des objets d'une class dans un array.

Sujet résolu
    26 juin 2019 à 19:42:36

    Je cherche a faire un truc simple, le reste ne devrait pas importer.

    Le but de ma classe "spike" permet juste de génerer autant d'objet qui peuvent être render avec Pygame.
    Pour simplifier le truc et avoir plein de "spike" sans trop faire de répétitions, j'ai voulu append des objets dans un array ( "spikes". attention au S )

    Mais lors ce que je veux lancer le truc. Shell m'indique :

    Traceback (most recent call last):
      File "D:\Programmes\Python\Test Zone.py", line 78, in <module>
        spikes[x].draw()
    TypeError: list indices must be integers or slices, not spike


    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
    
        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(3) :
        spikes.append(spike(random.randint(120, 1800), random.randint(0, 960)))
    
    
    #main loop
    while run :
        #Framerate
        pygame.time.delay(5)
    
        #Quit
        for event in pygame.event.get() :
            if event.type == pygame.QUIT :
                run = False
    
        #Keys Bindings
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] :
            if p1.x > 0 :
                p1.x -= 10
                p2.y -= 10
        if keys[pygame.K_RIGHT] :
            if p1.x < 920 :
                p1.x += 10
                p2.y += 10
        if keys[pygame.K_UP] :
            if p1.y > 60 :
                p1.y -= 10
                p2.x -= 10
        if keys[pygame.K_DOWN] :
            if p1.y < 980 :
                p1.y += 10
                p2.x += 10
    
        #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 :
            spikes[x].draw()
    
        pygame.display.update()
        
    pygame.quit()
    


    J'espere que vous pourrez en faire quelque chose.
    Merci bien !


    • Partager sur Facebook
    • Partager sur Twitter

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

      26 juin 2019 à 21:50:43

      Salut,

      Quand tu fais for x in spikes, x parcourt les éléments de spike, x n'est pas un indice mais une instance de la classe spike (c'est d'ailleurs l'erreur que tu obtiens). Donc c'est plutôt x.draw() que tu veux dans ce for et pas spikes[x].draw(). Sinon, met une majuscule à tes noms de classe (Player et Spike plutôt que players et spike).

      • Partager sur Facebook
      • Partager sur Twitter
      Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
        26 juin 2019 à 23:50:37

        Merci bien !

        Je vais rendre ça plus lisible aussi !

        Bonne soirée ! 

        • Partager sur Facebook
        • Partager sur Twitter

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

        [Pygame] : Classe dans un Array ? (Impossible ?)

        × 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