IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Snake en python [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Snake en python
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    #! /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. (Pour le moment quand je passe sur la food elle ne disparait pas et je ne comprends pas pourquoi)

    Question 3 : A la fin je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     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 quitte quand j'appuie sur n'importe quelle touche.

    Voilà merci d'avance et j'insiste je veux juste des éclaircissements par les réponses

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par Synerzie Voir le message
    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
    L'erreur qui doit être "SyntaxError: invalid syntax" - mais il eût été sympa. de le préciser - dit seulement qu'il faut mettre les formes pour écrire "if l,c in snake:". i.e. ajouter des parenthèses (et à priori vous avez 2 possibilités).

    Pour les autres questions, je les abandonne à la sagacité de mes collègues.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    L'erreur qui doit être "SyntaxError: invalid syntax" - mais il eût été sympa. de le préciser - dit seulement qu'il faut mettre les formes pour écrire "if l,c in snake:". i.e. ajouter des parenthèses (et à priori vous avez 2 possibilités).

    Pour les autres questions, je les abandonne à la sagacité de mes collègues.

    - W
    Ah merci, oui effectivement c'est juste un manque de parenthèse ! Mais pourquoi j'en est besoin la alors que plus haut j'en est pas besoin pourtant c'est presque la même ligne ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par Synerzie Voir le message
    Ah merci, oui effectivement c'est juste un manque de parenthèse ! Mais pourquoi j'en est besoin la alors que plus haut j'en est pas besoin pourtant c'est presque la même ligne ?
    Le "presque", c'est des contextes différents qui permettent (ou pas) de lever des ambiguïtés.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Collision snake
    Bonjour,

    Bon pendant ces quelques jours j'ai pu avancer ! La fonction create food fonctionne parfaitement avec mon nouveau code mais je n'arrive pas à créer une erreur pour la collision du snake. En gros j'aimerait lui dire que si le premier n-uplet touche n'importe quel autre n-uplet il break le programme mais je n'y arrive pas. J'arrive à sélectionner juste le premier n-uplet et sélectionner le reste du tableau mais je sais pas lui dire si le premier n-uplet "touche" le reste du tableau alors break le programme. En gros c'est le "touché" qui me pose problème.
    Voila mon exemple de condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #(50,8) représente la tête de mon serpent
    snake = [(50,2),(50,3),(50,4),(50,5),(50,6),(50,7),(50,8)]
    z = len(snake)
     
    if snake [-1] "touche" snake [0:z-1]
        break
    Voilà merci de me donner un petit coup de main ça serait super

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par Synerzie Voir le message
    J'arrive à sélectionner juste le premier n-uplet et sélectionner le reste du tableau mais je sais pas lui dire si le premier n-uplet "touche" le reste du tableau alors break le programme. En gros c'est le "touché" qui me pose problème.
    Avant d'imaginer comment traduire cette relation en Python, il faut peut être clarifier ce qu'elle veut dire. Et à défaut de savoir l'écrire avec des mots, prendre des exemples i.e. si:
    snake [0:z-1] contient [(50,2),(50,3),(50,4),(50,5),(50,6),(50,7)] quand dit-on que toucher(snake[0], snake[:-1]) est "vraie" ?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Avant d'imaginer comment traduire cette relation en Python, il faut peut être clarifier ce qu'elle veut dire. Et à défaut de savoir l'écrire avec des mots, prendre des exemples i.e. si:
    snake [0:z-1] contient [(50,2),(50,3),(50,4),(50,5),(50,6),(50,7)] quand dit-on que toucher(snake[0], snake[:-1]) est "vraie" ?

    - W
    Je ne comprends pas ce que tu me dis la :/

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par Synerzie Voir le message
    Je ne comprends pas ce que tu me dis la :/
    Reprenez votre exemple: "if snake [-1] "touche" snake [0:z-1]". Si vous n'explicitez pas quand la condition (s'il y a un "if", il y a une condition) est vraie, pas facile de savoir par quoi remplacer "touche".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    En gros l'erreur à renvoyer c'est que quand le tête du serpent touche son corps il faut renvoyer une erreur mais je ne vois pas comment je peux lui dire

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par Synerzie Voir le message
    En gros l'erreur à renvoyer c'est que quand le tête du serpent touche son corps il faut renvoyer une erreur mais je ne vois pas comment je peux lui dire
    Ben le plus simple c'est de prendre un papier et un crayon et de réfléchir à comment raconter çà en français... Comme je n'habite pas dans votre tête, il n'y a que vous qui sachiez ce que vous voulez.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ben le plus simple c'est de prendre un papier et un crayon et de réfléchir à comment raconter çà en français... Comme je n'habite pas dans votre tête, il n'y a que vous qui sachiez ce que vous voulez.

    - W
    Bah en français ça donne "si la tête du serpent toujours son corps alors je coupe le programme"

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par Synerzie Voir le message
    Bah en français ça donne "si la tête du serpent toujours son corps alors je coupe le programme"
    Et vous appelez çà du français? où est le verbe?
    admettons que ce soit l'idée, çà veut dire quoi côté positions de la tête et du reste? (En fait, c'est çà qu'il faut dessiner avec papier/crayon).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Et vous appelez çà du français? où est le verbe?
    admettons que ce soit l'idée, çà veut dire quoi côté positions de la tête et du reste? (En fait, c'est çà qu'il faut dessiner avec papier/crayon).

    - W
    Que la tête est égal au corps mais quand je fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    snake = [(50,2),(50,3),(50,4),(50,5),(50,6),(50,7),(50,8)]
    z = len(snake)
     
    #snake [-1] correspond à l'emplacement de la tête
    if snake[-1] == snake[0:z-1]:
        break
    Mon code ne fonctionne pas. Quand je touche le corps du serpent avec la tête rien ne ce passe

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bon bah j'ai réussi la collision

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jeu du snake en python
    Par pythonovice dans le forum Général Python
    Réponses: 1
    Dernier message: 24/04/2015, 10h46
  2. Snake avec Python 3.0 et Tkinter
    Par tonykart13 dans le forum Tkinter
    Réponses: 18
    Dernier message: 10/06/2012, 21h55
  3. [Open-Source][Python]Snake like
    Par the_dorian dans le forum Mon programme
    Réponses: 3
    Dernier message: 21/03/2008, 11h22
  4. [TP][Projet] Réaliser un Snake-Like
    Par Giovanny Temgoua dans le forum Turbo Pascal
    Réponses: 69
    Dernier message: 17/01/2005, 18h04
  5. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo