def main(): # Création d'une instance de jeu jeu = cg.Game() # (SO1) Création d'un serpent à l'écran snake = cg.Snake() # Déclaration des sprites jeu.addAsset("Cactus", "assets/cactus.png") # (SO1) Ajout du corps jeu.addAsset("Corps", "assets/body.png") # (SO2) Ajout queue et tête jeu.addAsset("Queue", "assets/tail.png") jeu.addAsset("Tête", "assets/head.png") # Ajout de l'asset spécial qui sera automatiquement mis en fond jeu.addAsset("background", "assets/background.png") # Variable controlant l'ouverture de la fenêtre ouvert = True # Boucle principale du jeu while ouvert: # Récupération des événements de la file d'attente for event in pygame.event.get(): # Si l'utilisateur veut quitter... if event.type == pygame.QUIT: # ...sortie de la boucle principale, et fermeture du jeu. ouvert = False # Effacement de l'écran, et remplissage avec les tiles de fond jeu.eraseScreen() # Dessin de tous les cactus for tile in jeu.screenIterator(): if jeu.isSide(tile): jeu.draw(jeu.asset("Cactus"), tile) # (SO1) Dessin du serpent à l'écran for part in snake.partsIterator(): # (SO1) Dessin du sprite à l'écran (/!\ hors SO2) # jeu.draw(jeu.asset("Corps"), part.position) # (SO2) Choix du sprite en fonction de la partie à dessiner et rotation if part.type == snake.PARTS.HEAD: sprite = jeu.asset("Tête") elif part.type == snake.PARTS.TAIL: sprite = jeu.asset("Queue") else: sprite = jeu.asset("Corps") # (SO2) Dessin du sprite à l'écran jeu.draw(sprite, part.position) # Ne pas oublier de terminer la phase de dessin jeu.end()
def main(): # Création d'une instance de jeu jeu = cg.Game() # Création d'un serpent à l'écran snake = cg.Snake() # Déclaration des sprites jeu.addAsset("Cactus", "assets/cactus.png") # Ajout du corps jeu.addAsset("Corps", "assets/body.png") # Ajout queue et tête jeu.addAsset("Queue", "assets/tail.png") jeu.addAsset("Tête", "assets/head.png") # Ajout de la pomme jeu.addAsset("Pomme", "assets/apple.png") # Ajout de l'asset spécial qui sera automatiquement mis en fond jeu.addAsset("background", "assets/background.png") # Variable controlant l'ouverture de la fenêtre ouvert = True # Par défaut, le serpent ne doit pas bouger direction = snake.DIRECTIONS.STOP # Stockage de la position de la pomme pomme = jeu.randomPosition() # Tant que la pomme est hors-zone, on la change de place while jeu.isSide(pomme): pomme = jeu.randomPosition() # (SO3) Fonction pour faire apparaitre la pomme #def spawnPomme(): # # Stockage de la position de la pomme # pomme = jeu.randomPosition() # # # Tant que la pomme est hors-zone, on la change de place # while jeu.isSide(pomme): # pomme = jeu.randomPosition() # # # (SO3) Ne pas mettre la pomme sur le serpent # for part in snake.partsIterator(): # if jeu.collision(pomme, part.position): # # (SO3) Tant que la pomme est sur le joueur, on la change de place # pomme = jeu.randomPosition() # # # (SO3) Retourne la position trouvée # return pomme # (SO3) Ajout de la pomme #pomme = spawnPomme() # Boucle principale du jeu while ouvert: # Récupération des événements de la file d'attente for event in pygame.event.get(): # Si l'utilisateur veut quitter... if event.type == pygame.QUIT: # ...sortie de la boucle principale, et fermeture du jeu. ouvert = False # Lorsqu'une touche est appuyée... if event.type == pygame.KEYDOWN: # ...on vérifie la direction droite... if event.key == pygame.K_RIGHT: direction = snake.DIRECTIONS.RIGHT # ...et les autres directions. elif event.key == pygame.K_UP: direction = snake.DIRECTIONS.TOP elif event.key == pygame.K_DOWN: direction = snake.DIRECTIONS.BOTTOM elif event.key == pygame.K_LEFT: direction = snake.DIRECTIONS.LEFT # Effacement de l'écran, et remplissage avec les tiles de fond jeu.eraseScreen() # Dessin de tous les cactus for tile in jeu.screenIterator(): if jeu.isSide(tile): jeu.draw(jeu.asset("Cactus"), tile) # Dessin du serpent à l'écran for part in snake.partsIterator(): # Choix du sprite en fonction de la partie à dessiner et rotation if part.type == snake.PARTS.HEAD: # Rotation de la tête sprite = jeu.asset("Tête", part.rotation) elif part.type == snake.PARTS.TAIL: sprite = jeu.asset("Queue", part.rotation) else: sprite = jeu.asset("Corps", part.rotation) # Dessin du sprite à l'écran jeu.draw(sprite, part.position) # Dessin de la pomme jeu.draw(jeu.asset("Pomme"), pomme) # Ne pas oublier de terminer la phase de dessin jeu.end() # Déplacement du serpent snake.move(direction) # Si il y a collision entre la pomme et la tête du serpent if jeu.collision(snake.getHeadPosition(), pomme): # Le serpent grandit snake.grow() # La pomme change de position # (SO3) Ajout de la pomme #pomme = spawnPomme() pomme = jeu.randomPosition() # Tant que la pomme est hors-zone, on la change de place while jeu.isSide(pomme): pomme = jeu.randomPosition() # (SO1) Vérifie que le serpent soit toujours à l'écran for tile in jeu.screenIterator(): if jeu.isSide(tile) and jeu.collision(snake.getHeadPosition(), tile): # (SO1) Ferme le jeu si collision avec un mur ouvert = False # (SO2) Vérifie que le serpent ne se mord pas for part in snake.partsIterator(): # (SO2) Attention : la tête est incluse, il faut donc la retirer if jeu.collision(snake.getHeadPosition(), part.position) and part.type != snake.PARTS.HEAD: # (SO2) Ferme le jeu si le serpent se rentre dedans ouvert = False
def main(): # Création d'une instance de jeu jeu = cg.Game() # Création d'un serpent à l'écran snake = cg.Snake() # Déclaration des sprites jeu.addAsset("Cactus", "assets/cactus.png") # Ajout du corps jeu.addAsset("Corps", "assets/body.png") # Ajout queue et tête jeu.addAsset("Queue", "assets/tail.png") jeu.addAsset("Tête", "assets/head.png") # Ajout de l'asset spécial qui sera automatiquement mis en fond jeu.addAsset("background", "assets/background.png") # Variable controlant l'ouverture de la fenêtre ouvert = True # (SO1) Par défaut, le serpent ne doit pas bouger direction = snake.DIRECTIONS.STOP # Boucle principale du jeu while ouvert: # Récupération des événements de la file d'attente for event in pygame.event.get(): # Si l'utilisateur veut quitter... if event.type == pygame.QUIT: # ...sortie de la boucle principale, et fermeture du jeu. ouvert = False # (SO1) Lorsqu'une touche est appuyée... if event.type == pygame.KEYDOWN: # (SO1) ...on vérifie la direction droite... if event.key == pygame.K_RIGHT: direction = snake.DIRECTIONS.RIGHT # (SO2) ...et les autres directions. elif event.key == pygame.K_UP: direction = snake.DIRECTIONS.TOP elif event.key == pygame.K_DOWN: direction = snake.DIRECTIONS.BOTTOM elif event.key == pygame.K_LEFT: direction = snake.DIRECTIONS.LEFT # Effacement de l'écran, et remplissage avec les tiles de fond jeu.eraseScreen() # Dessin de tous les cactus for tile in jeu.screenIterator(): if jeu.isSide(tile): jeu.draw(jeu.asset("Cactus"), tile) # Dessin du serpent à l'écran for part in snake.partsIterator(): # Choix du sprite en fonction de la partie à dessiner et rotation if part.type == snake.PARTS.HEAD: # (SO3) Rotation de la tête sprite = jeu.asset("Tête", part.rotation) elif part.type == snake.PARTS.TAIL: # (SO3) Idem sprite = jeu.asset("Queue", part.rotation) else: # (SO3) Idem sprite = jeu.asset("Corps", part.rotation) # Dessin du sprite à l'écran jeu.draw(sprite, part.position) # Ne pas oublier de terminer la phase de dessin jeu.end() # (SO1) Déplacement du serpent snake.move(direction)