Partage
  • Partager sur Facebook
  • Partager sur Twitter

lenteur de la boucle for jeu de la vie de Conway

    20 mars 2018 à 14:45:32

    Bonjour bonjour

    alors voila j'ai codé un jeu de la vie de Conway avec pygame. Mon problème est que le temps que les deux boucles for s'occupent de toutes les cases de ma grille est très long et elle se rafraîchit environ toutes les 1 à 2 seconde ce qui est assez long... Est ce que vous pourriez me donner une explication ? est ce que c'est juste le procédé de la boucle for ? que puis utiliser d'autre ? Voila voila merci d’avance.

    voici le code : 

    <code type="pycon">
    from random import randrange
    import pygame
    from pygame.locals import *
    from pygame.tests.base_test import pygame_quit
    from threading import Thread
    continuer = True

    """------------------------------------------------CLASS-----------------------------------------------------"""
    class case():
            def __init__(self,x,y,valeur):
                    self.x = x
                    self.y = y
                    self.valeur = valeur

                    self.dcell = pygame.image.load("dcell.png").convert()
                    self.cell = pygame.image.load("cell.png").convert()

            def blitcell(self):
                if self.valeur == 1:
                    back.blit(self.cell, (self.x*20,self.y*20))
                else:
                    back.blit(self.dcell, (self.x*20,self.y*20))

    class quit(Thread):
        def __init__(self):
            Thread.__init__(self)
        def run(self):
            global continuer
            while continuer == True:
                for event in pygame.event.get():
                    if event.type == QUIT:
                        continuer = False

    """------------------------------------------------INIT-----------------------------------------------------"""
    Ltab_obj = list()
    hauteur = int(input("vous voulez un tableau de longueur... : ")) + 1
    largeur = int(input("sur combien de largeur ?... : ")) + 1

    pygame.init()

    Wdw = pygame.display.set_mode( (((largeur*20)+20) , ((hauteur*20)+20)) )
    back = pygame.image.load("backcell.png").convert()
    Wdw.blit(back,(0,0))
    pygame.display.flip()

    x = 0
    y = 0

    for i in range(0,hauteur +1):
        Ltab_obj.append(list())
        for j in range(0,largeur +1):
            if x == 0 or y == 0 or y == hauteur or x == largeur :
                Ltab_obj[i].append(case(x,y,0))
            else:
                nbr = randrange(0,int(hauteur/5))
                if nbr == 1:
                    Ltab_obj[i].append(case(x,y,1))
                else:
                    Ltab_obj[i].append(case(x,y,0))
            if x < largeur:
                x += 1
            else:
                y += 1
                x = 0

    th_quit = quit()
    th_quit.start()


    """------------------------------------------------MAIN LOOP-----------------------------------------------------"""
    while continuer == True:

        for event in pygame.event.get():

            if event.type == QUIT:

                continuer = False


        for i in range(0,hauteur + 1):

            for j in range(0,largeur + 1):

                if 0 < i < (hauteur) and 0 < j < (largeur):
                    cell_wheight = (Ltab_obj[i-1][j-1].valeur + Ltab_obj[i-1][j].valeur + Ltab_obj[i-1][j+1].valeur + Ltab_obj[i][j-1].valeur + Ltab_obj[i][j+1].valeur + Ltab_obj[i+1][j-1].valeur + Ltab_obj[i+1][j].valeur + Ltab_obj[i+1][j+1].valeur) 
                    if Ltab_obj[i][j].valeur == 1:
                        if (( cell_wheight < 2 ) or ( cell_wheight > 3)):
                            Ltab_obj[i][j].valeur = 0
                    else:
                        if cell_wheight == 3:
                            Ltab_obj[i][j].valeur = 1
                    Wdw.blit(back,(0,0))
                    Ltab_obj[i][j].blitcell()
        pygame.display.flip()

    pygame.quit()
    </code>
    • Partager sur Facebook
    • Partager sur Twitter

    lenteur de la boucle for jeu de la vie de Conway

    × 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