Annonce

Réduire
Aucune annonce.

Script Python erreur et plantage (crash) du terminal

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Script Python erreur et plantage (crash) du terminal

    Bonjour à tous.

    Je suis débutant en Python et pour commencer je me suis acheté une magazine qui propose aux neophytes créer un jeux simple.

    Le soucis que j'ai c'est que quand je le lance dans le terminal linux, des que j'essaye de faire bouger le "personnage" pour l'instant c'est une X, le program provoque une erreur et ferme. Par contre si je l'ouvre depuis l'IDLE tout fonctionne correctement. Après lire et relire le code je n'ai pas trouvé d'erreur. J'ai eu l'idée de le tester sous windows et là tout marche parfaitement...

    Je vous laisse le code, por l'instant c'est très très simple, on peut juste déplacer la X. J'ai mis la version la plus simple à fin de ne pas poster un code très long.

    Je vous remercie d'avance.

    Code:
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import sys
    import os
    #########
    # Définition des différents niveaux
    ##Niveau 1
    level_1= [
    	"+------------------+",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"|                  |",
    	"+------------------+",
    	]
    def affiche_labyrinthe(lab, perso, pos_perso):
        n_ligne = 0
        for ligne in lab:                   
            if n_ligne == pos_perso[1]:
                print(ligne[0:pos_perso[0]] + perso + ligne[pos_perso[0]+1:])
            else:
                print(ligne)
            n_ligne = n_ligne + 1
    
    def efface_ecran():
        if sys.platform.startswith("win"):
            os.system("cls")
        else:
            os.system("clear")
    
    def verification_deplacement(lab, pos_col, pos_ligne):
        """
           Indique si le deplacement du personnage est autorisé ou pas.
        """
        #Calcul de la taille du labyrinthe
        n_cols = len(lab[0])
        n_lignes = len(lab)
        #Teste si le déplacement conduit le personnage en dehors de l'aire de jeu
        if pos_ligne < 0 or pos_col <0 or pos_ligne>(n_lignes-1) or pos_col>(n_cols-1):
            return None
        elif lab[pos_ligne][pos_col] != " ":
            return None
        else:
            return [pos_col,pos_ligne]
    
    def choix_joueur(lab, pos_perso):
        """
           Demande au joueur de saisir son déplacement et vérifie s'il est possible.
           Si ce n'est pas le cas affiche un message, sinon modifie la position du
        """
        dep = None
        choix = input("Votre déplacement (Haut/Bas/Droite/Gauche/Quitter) ? ")
        if choix == "H" or choix == "Haut":
            dep = verification_deplacement(lab, pos_perso[0], pos_perso[1] - 1)
        elif choix == "B" or choix == "Bas":
            dep = verification_deplacement(lab, pos_perso[0], pos_perso[1] + 1)
        elif choix =="G" or choix == "Gauche":
            dep = verification_deplacement(lab, pos_perso[0] - 1, pos_perso[1])
        elif choix =="D" or choix =="Droite":
            dep = verification_deplacement(lab, pos_perso[0] + 1, pos_perso[1])
        elif choix =="Q" or choix =="Quitter":
            exit(0)
        if dep == None:
            print ("Déplacement impossible")
        else:
            pos_perso[0] = dep[0]
            pos_perso[1] = dep[1]
    
    def jeu(level, perso, pos_perso):
        """
           Boucle principal du jeu. Affiche le labyrinthe dans ses différents
           états après les déplacements du joueur.
    
           level: Labyrinthe
           perso: caractère représentant le personnage
           pos_perso: liste contenant la position du personnage [colonne, ligne]
        """
        while True:
            affiche_labyrinthe(level, perso, pos_perso)
            choix_joueur(level, pos_perso)
    
    #########
    # Programme principal
    # Initializaion du personnage
    perso = "X"
    pos_perso = [1,1]
    #Lancement de la partie
    jeu(level_1, perso, pos_perso)

  • #2
    salut zorbak

    pour ton programme, la reponse est dans le code

    Code:
    dep = None
        choix = input("Votre déplacement (Haut/Bas/Droite/Gauche/Quitter) ? ")
        if choix == "H" or choix == "Haut":
            dep = verification_deplacement(lab, pos_perso[0], pos_perso[1] - 1)
        elif choix == "B" or choix == "Bas":
            dep = verification_deplacement(lab, pos_perso[0], pos_perso[1] + 1)
        elif choix =="G" or choix == "Gauche":
            dep = verification_deplacement(lab, pos_perso[0] - 1, pos_perso[1])
        elif choix =="D" or choix =="Droite":
            dep = verification_deplacement(lab, pos_perso[0] + 1, pos_perso[1])
        elif choix =="Q" or choix =="Quitter":
            exit(0)
        if dep == None:
            print ("Déplacement impossible")
    pour faire un mouvement avec le terminal linux il faut ecrire "H" pour fleche du haut, "B" pour fleche du bas, etc...

    si tu veux que sur linux les flèches directionnelles soit reconnu jette un coup d’œil a la libs curses

    (pour "curses" je ne suis pas sur, j'ai pas testé, je pense que des personnes plus compétente vont pouvoir te renseigner)
    Dernière modification par pl3x, 12 mai 2014, 01h25.

    Commentaire


    • #3
      Le soucis que j'ai c'est que quand je le lance dans le terminal linux, des que j'essaye de faire bouger le "personnage" pour l'instant c'est une X, le program provoque une erreur et ferme.
      Si tu le lances depuis le terminal tu dois avoir une erreur, peux-tu là copier/coller sur le forum ?

      Chez moi à partir du terminal linux ça fonctionne très bien... N'exécuterais tu pas ton code avec python 2.x en faisant

      Code:
      python monfichier.py
      Dans ce cas c'est une erreur !

      Pour python 3.x, il faut placer un 3 devant python

      Code:
      python3 monfichier.py

      Commentaire


      • #4
        Que ce soit sur la version 2.x de python ou la version 3.x ça fonctionne quand même, la seule différence c'est que pour la version 2.x il faut écrire "D"(avec les guillemets)pour droite, "G" pour gauche etc...

        pour la version 3.x les guillemets ne sont pas nécessaire
        Dernière modification par pl3x, 12 mai 2014, 15h02. Motif: orthographe

        Commentaire


        • #5
          Non ça ne fonctionne pas de la même manière, ce n'est pas dû à python 2.x ou 3.x l'erreur, c'est dû au PO selon qu'il utilise la version 2.x ou 3.x

          S'il utilise la version 2.x, il doit utiliser

          Code:
          raw_input(...)
          en version 3.x

          Code:
          input(...)
          La question est surtout qu'elle est sa version python?

          Commentaire


          • #6
            PO = Portable Object ?

            quand je parle d'écrire "D"(avec les guillemets) pour droite avec la version 2.x , je ne parle pas de l’écrire dans le code, mais après avoir lancé le programme pour "jouer"
            Dernière modification par pl3x, 12 mai 2014, 12h16.

            Commentaire


            • #7
              PO -> posteur d'origine du 1er post

              quand je parle d'écrire "D"(avec les guillemets) pour droite avec la version 2.x , je ne parle pas de l’écrire dans le code, mais après avoir lancé le programme pour "jouer"
              J'ai bien compris
              Dernière modification par fred, 12 mai 2014, 12h37.

              Commentaire


              • #8
                Envoyé par fred Voir le message
                Si tu le lances depuis le terminal tu dois avoir une erreur, peux-tu là copier/coller sur le forum ?

                Chez moi à partir du terminal linux ça fonctionne très bien... N'exécuterais tu pas ton code avec python 2.x en faisant

                Code:
                python monfichier.py
                Dans ce cas c'est une erreur !

                Pour python 3.x, il faut placer un 3 devant python

                Code:
                python3 monfichier.py
                Effectivement, mon erreur venait de là ... pour l'executer je faisait python nomdufichier.py et je ne savait pas que c'était la version 2.x... un grand merci

                Après j'ai essaié à nouveau avec python2, et avec "D" les guillemets comme a bien indiqué pl3X ça fonctionne aussi correctement.

                Merci a tous les deux.

                Bonne soirée!!

                Commentaire


                • #9
                  Après j'ai essaié à nouveau avec python2, et avec "D" les guillemets comme a bien indiqué pl3X ça fonctionne aussi correctement.
                  Exact ça fonctionne avec les guillemets, mais ce n'est pas ce que tu souhaites... Si tu veux qu'il y est un bon fonctionnement, dans ce cas il te faudra remplacer input par raw_input.

                  Si tu veux que se soit compatible version 2.x et 3.x, faudra faire un petit hack

                  Code:
                  import sys
                  if sys.version[0] == 2:
                      input = raw_input

                  Commentaire


                  • #10
                    Envoyé par fred Voir le message
                    Exact ça fonctionne avec les guillemets, mais ce n'est pas ce que tu souhaites... Si tu veux qu'il y est un bon fonctionnement, dans ce cas il te faudra remplacer input par raw_input.

                    Si tu veux que se soit compatible version 2.x et 3.x, faudra faire un petit hack

                    Code:
                    import sys
                    if sys.version[0] == 2:
                        input = raw_input
                    Ah non, j'était déjà satisfat car en ouvrant le jeux avec la commande python3 jeux.py tout marche correctement, mais j'apprecie vraiment ton apport qui permet de le faire compatible. Merci fred

                    Commentaire

                    Chargement...
                    X