Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur inconue

    28 février 2016 à 16:45:41

    Bonjour, je viens de m'amuser à coder le Conway's game of life à l'aide de pygame.

    J'ai cependant un problème arrivé sur la première boucle le programme plante sans erreur de syntaxe ou de problème au niveau du code.

    Je ne pense pas que cela provienne du fait que c'est la première fois que j'utilise les classes car l'affichage de l'écran d'accueil est fait.

    Si vous arriviez à trouver ce qui le fait planter je vous en serait reconnaissant.

    import pygame
    from pygame.locals import *
    
    fenetre = pygame.display.set_mode((800,800))
    
    cell_living = pygame.image.load("cell_living.png").convert()
    accueil = pygame.image.load("accueil.png").convert()
    fond = pygame.image.load("fond.png").convert()
    
    continuer = 0
    
    class cell:
    	"""Classe de cellule indiquant le nombre de voisins ainsi que l'état de la cellule"""
    
    	def __init__(self):
    		self.neighbour = 0
    		self.statement = 0
    
    	def refresh(self,grid,x,y):
    		self.neighbour = 0
    		try:
    			if grid[y+1][x].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    		try:
    			if grid[y+1][x+1].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    		try:
    			if grid[y][x+1].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    		try:
    			if grid[y-1][x].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    		try:
    			if grid[y-1][x-1].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    		try:
    			if grid[y][x-1].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    		try:
    			if grid[y+1][x-1].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    		try:
    			if grid[y-1][x+1].statement == 1:
    				self.neighbour += 1
    		except:
    			pass
    
    	def born_and_die(self):
    		if self.neighbour == 3:
    			self.statement = 1
    		elif self.neighbour != 2:
    			self.statement = 0
    
    
    grid = []
    for i in range(100):
    	grid.append([cell()]*100)
    
    def refresh_screen(grid):
    	fenetre.blit(fond,(0,0))
    	for y in range(100):
    		for x in range(100):
    			if grid[y][x].statement == 1:
    				fenetre.blit(cell_living,(x*8,y*8))
    	pygame.display.flip()
    
    fenetre.blit(accueil,(0,0))
    pygame.display.flip()
    
    while continuer and choix == 0: #Boucle écran d'accueil
    	pygame.time.Clock().tick(20)
    	for event in pygame.event.get():
    		if event.type == QUIT:
    			continuer = 0
    		elif event.type == KEYDOWN:
    			if event.key == K_F1:
    				choix = 1
    
    choix = 0
    
    while continuer and choix == 0: #Boucle de traçage
    	pygame.time.Clock().tick(30)
    	refresh_screen(grid)
    	for event in pygame.event.get():
    		if event.type == QUIT:
    			continuer = 0
    		elif event.type == KEYDOWN:
    			if event.key == K_F2:
    				choix = 1
    		elif event.type == MOUSEBUTTONDOWN:
    			x,y = event.pos
    			if event.button == 1 :
    				grid[y-y%8][x-x%8].statement = 1
    			elif event.button == 3:
    				grid[y-y%8][x-x%8].statement = 0
    
    while continuer: #Boucle de visualisation
    	pygame.time.Clock().tick(30)
    	refresh_screen(grid)
    	for y in range(100):
    		for x in range(100):
    			grid[y][x].refresh(grid,x,y)
    	for y in range(100):
    		for x in range(100):
    			grid[y][x].born_and_die()
    	for event in pygame.event.get():
    		if event.type == QUIT:
    			continuer = 0
    



    • Partager sur Facebook
    • Partager sur Twitter
      28 février 2016 à 17:33:04

      Je pense pas que ton programme plante. C'est juste que tu as mis continuer = 0 (le nombre zéro est interprété comme False), donc tu n'entres jamais dans tes 2 boucles while. Et privilégie les booléens car ils sont plus explicites ^^:

      continuer = True
      • Partager sur Facebook
      • Partager sur Twitter
      Précepte: Le mieux est l'ennemi du bien
        28 février 2016 à 17:57:36

        Merci, ceci dit j'ai un peu honte de ne pas avoir vus une erreur si bête.

        En tout cas merci de me l'avoir indiquée, après quelques réglages supplémentaires le programme fonctionne comme prévus, bonne journée.

        • Partager sur Facebook
        • Partager sur Twitter

        Erreur inconue

        × 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