Snake en Python
Synerz
Messages postés
1341
Statut
Membre
-
Arya Dröttningu Messages postés 650 Statut Membre -
Arya Dröttningu Messages postés 650 Statut Membre -
Bonjour,
Je dois effectuer un jeu snake pour les cours et j'aimerai un peu t'aide sans me donner les réponses clairement sinon cela n'a pas d’intérêt.
Voici mon code :
Question 1 : J'ai une erreur à la ligne 54 qui est
Question 2 : Ma fonction create_food -> But voulu quand l'emplacement de la food est égal à la tête du serpent je veux supprimer la valeur dans food et lui en donner une nouvelle aléatoirement.
Question 3 : A la fin je fais un
Voilà merci d'avance et j'insiste je veux juste des éclaircissements par les réponses
Un peu d'aide contre un topic résolu !
Je dois effectuer un jeu snake pour les cours et j'aimerai un peu t'aide sans me donner les réponses clairement sinon cela n'a pas d’intérêt.
Voici mon code :
#! /usr/bin/env python3
# -*- coding: utf8 -*-
# imports ####################################################################
import sys
import curses
import random
# screen handling ############################################################
def init_screen():
screen = curses.initscr()
screen.keypad(1)
def excepthook(*args):
cleanup(screen)
return sys.__excepthook__(*args)
sys.excepthook = excepthook
curses.noecho()
curses.halfdelay(2)
curses.curs_set(0)
return screen
def display(screen, snake, food):
screen.clear()
screen.border()
for l, c in snake:
screen.addstr(l, c, "O")
for food_l, food_c in food:
screen.addstr(food_l,food_c, "X")
screen.refresh()
def cleanup(screen):
screen.keypad(0)
curses.nocbreak()
curses.echo()
curses.endwin()
def inside(screen, snake) :
lmax, cmax = screen.getmaxyx()
# Position de la tête
l, c = snake[-1]
snakes = snake
del snakes[-1]
if 0 < l < lmax-1 and 0 < c < cmax-1 :
return False
if l,c in snake:
return True
else:
return False
else:
return True
def create_food (food, snake, screen):
if food == snake[-1]:
food_lmax, food_cmax = screen.getmaxyx()
food_c = random.randint(1,food_cmax-1)
food_l = random.randint(1,food_lmax-1)
del food
food += [(food_l,food_c)]
return food
# main program ###############################################################
def main():
screen = init_screen()
food_l = 20
food_c = 100
food = []
food += [(food_l,food_c)]
l = 50
c = 8
direc = "right"
snake = [(50,2),(50,3),(50,4),(50,5),(50,6),(50,7),(50,8)]
while True:
k = screen.getch()
if k == ord('q'):
break
elif k == curses.KEY_LEFT:
if direc == "right":
direc = "up"
elif direc == "up":
direc = "left"
elif direc == "left":
direc = "down"
elif direc == "down":
direc = "right"
elif k == curses.KEY_RIGHT:
if direc == "right":
direc = "down"
elif direc == "down":
direc = "left"
elif direc == "left":
direc = "up"
elif direc == "up":
direc = "right"
if direc == "right" :
c = c+1
elif direc == "left" :
c = c-1
elif direc == "up" :
l = l-1
elif direc == "down" :
l = l+1
#Supprime le bout de la gueue pour le deplacmeent
del snake[0]
snake += [(l,c)]
create_food (food, snake, screen)
if inside(screen, snake):
print "Game Over"
break
else:
display(screen, snake, food)
snake += [(l,c)]
cleanup(screen)
if __name__ == "__main__":
sys.exit(main())
Question 1 : J'ai une erreur à la ligne 54 qui est
if l,c in snake:je ne vois pas ou il y a une erreur à ce niveau la
Question 2 : Ma fonction create_food -> But voulu quand l'emplacement de la food est égal à la tête du serpent je veux supprimer la valeur dans food et lui en donner une nouvelle aléatoirement.
Question 3 : A la fin je fais un
if inside(screen, snake):
print "Game Over"
break en gros la fonction inside fait que si le serpent touche un mur ou lui même ça écrit Game Over mais sans le break plein de Game Over sont écriés à l'écran ( normal vu que j'appelle la fonction dans un while) et si je break comme la je ne vois pas le texte. En gros J'aimerait qu'il affiche game over au milieu de l'écran et que le jeu ce qui quand j'appuie sur n'importe quelle touche.
Voilà merci d'avance et j'insiste je veux juste des éclaircissements par les réponses
Un peu d'aide contre un topic résolu !
A voir également:
- Snake en Python
- Citizen code python - Accueil - Outils
- Jeux google caché snake - Guide
- Citizen code python solution - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Python par la pratique : 101 exercices corrigés pdf - Forum Python
1 réponse
Bonjour,
Alors désolé je n'ai pas d'ordi pour tester là desuite.
Pour ta question 1 : essaye peut-être
Pour la question 3 : dans le if tu peux juste faire un break pour sortir de la boucle et après ta boucle while tu fais ton
A la ligne 123 c'est normal qu'il n'y ait pas d'indentation (ou c'est juste un problème de copié collé) ?
Ensuite ton programme n'ira jamais dans le
Voilà un premier jet de réflexion n'hésite pas si tu comprends pas un trucs ou si tu as d'autres questions ou besoin d'éclaircissement sur ce que je t'ai dit
Alors désolé je n'ai pas d'ordi pour tester là desuite.
Pour ta question 1 : essaye peut-être
if (l,c) in snakecar ce que tu veux c'est voir si le couple est dans ton tableau.
Pour la question 3 : dans le if tu peux juste faire un break pour sortir de la boucle et après ta boucle while tu fais ton
print "Game Over"comme ça ton programme break, sort de la boucle et exécute la ligne suivante qui sera le print. (mais lis la suite de mon message avant de faire des modifs, le fait qu'il ne t'affiche pas Game Over vient d'ailleurs)
A la ligne 123 c'est normal qu'il n'y ait pas d'indentation (ou c'est juste un problème de copié collé) ?
Ensuite ton programme n'ira jamais dans le
elsede la ligne 129 car il tombera systématiquement sur ton
break(c'est d'ailleurs pour ça qu'il ne doit pas t'afficher le Game Over, il break même sans passer dans le if, problème d'indentation, le break doit être au même niveau que le print).
Voilà un premier jet de réflexion n'hésite pas si tu comprends pas un trucs ou si tu as d'autres questions ou besoin d'éclaircissement sur ce que je t'ai dit