Python pygame aide pour un projet

Python pygame aide pour un projet - Python - Programmation

Marsh Posté le 19-05-2016 à 21:40:56    

Bonjour !
 
Dans le cadre du projet pour l'épreuve de bac en ISN, nous avons décidé de créer un jeu labyrinthe en 4 niveaux en language python et pygame.
 
Voilà le problème, notre groupe a décidé de faire un multijoueur en local, mais le 2e joueur ne veut pas s'afficher, sans compter que le bouton " option " ne marche pas, et que la fenêtre plante quand on quitte. Je ne comprends pas comment ni pourquoi ça ne fonctionne pas. Toute aide sera la bienvenue, même infime.
 
Voici le lien du dossier : http://www.mediafire.com/download/ [...] 2/Laby.zip
 
Ps : j'ai déjà posté un autre message de ce genre, je ne sais pas si il fallait que je continue sur le même topic ou pas... voici le lien du topic : http://forum.hardware.fr/hfr/Progr [...] 5014_1.htm

Reply

Marsh Posté le 19-05-2016 à 21:40:56   

Reply

Marsh Posté le 20-05-2016 à 00:50:35    

C'est une erreur classique.
 

Code :
  1. if choix == 'n1' or 'n2' or 'n3':
  2.         start(1, choix)


 
Là python comprend si choix vaut n1, c'est ok, sinon il vaut n2.
 

Code :
  1. >>> a = 4
  2. >>> a == 1 or 2
  3. 2
  4. >>>


 
Donc utilise une liste ou un tuple.
 

Code :
  1. if choix in('n1',  'n2', 'n3') :
  2.         start(1, choix)


 


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
Reply

Marsh Posté le 20-05-2016 à 19:14:26    

Merci infiniment ! Je ne connaissais pas cette méthode, ça me sauve presque la vie !  
 
Si vous auriez une piste pour les " pièges " ( que j'ai oublié de mentionner ) : le rond noir c'est un trou pour revenir au départ, le rond vert, pour aller à l'autre rond vert, et visiblement ça ne fonctionne pas vraiment...  
 
Je vous remercie encore une autre fois, merci beaucoup.

Reply

Marsh Posté le 20-05-2016 à 19:34:37    

A toute première vue:
 
Pour le plantage, votre version de Python n'a pas de console? Je vois un message d'erreur

Code :
  1. Traceback (most recent call last):
  2.   File "...\Laby\LabyProjet.py", line 300
  3. , in <module>
  4.     fenetre.blit(fond, (0,0))
  5. NameError: name 'fond' is not defined


 
Je vois aussi plein de

Code :
  1. libpng warning: Interlace handling should be turned on when using png_read_image

comme avec la version d'avant. D'accord, c'est juste un warning mais c'est quand même mieux si on peut le faire disparaître...
 
Par ailleurs pour faire fonctionner le jeu je suis obligé de rajouter deux lignes au début (merci internet!), je ne sais pas si c'est vraiment un bug ou mon PC...

Code :
  1. import os
  2. os.chdir("C:\....\Laby" )


 
Si j'ai le temps je regarderai plus en détail pour le reste.

Reply

Marsh Posté le 20-05-2016 à 19:59:10    

,Ce n'est pas un bug, python prend pour référence le répertoire courant où le script a été lancé comme espace de travail.
 
J'avais bien l'erreur de var indéfini, mais pas les warnings que tu as.
 
 


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
Reply

Marsh Posté le 20-05-2016 à 20:19:29    

Pour le warning j'ai fait des recherches, apparemment c'est un bug dans libpng: http://stackoverflow.com/questions [...] read-image . J'ai peut-être installé une mauvaise version de pygame. :o  
 
Pour le chdir() c'est bien ma manière de lancer le script, j'ai fait des essais.
 
Bon ben sur trois trucs deux qui ne sont pas importants, désolé... :o

Reply

Marsh Posté le 20-05-2016 à 20:32:41    

Pour le plantage : oui, j'ai bien une console, et oui je vois le message d'erreur et j'essaie de trouver ce qui va pas

Reply

Marsh Posté le 20-05-2016 à 20:56:28    

Mais, en fait, il n'y a rien dans ton application qui fait que ton perso retourne à son point de départ  :pt1cable:  
 
Un indice, pour la façon de procéder (que je ferais), serait d'ajouter une méthode teleporter à ton perso qui prendrais donc comme arguments x, et y, ainsi s'il tombe dans un piège, tu le renvois en position de départ an appelant cette méthode avec comme paramètres 1 et 1.


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
Reply

Marsh Posté le 20-05-2016 à 21:10:39    

Pourtant si, je l'ai placé dans les classes :
 
def isOnPortal(self):
        if self.niveau.structure[self.case_y][self.case_x] == 'B':
            return True
        else:
            return False
 
    def isOnTrap(self):
        if self.niveau.structure[self.case_y][self.case_x] == 'C':
            return True
        else:
            return False
 
 
Et normalement, ça marche avec ça dans le programme principal :
 
if popo.isOnTrap():
                popo.deplacer('départ')
            elif popo.isOnPortal():
                popo.deplacer('avance')
 
Du moins ça marchait avant :o

Reply

Marsh Posté le 20-05-2016 à 21:32:36    

Ok, mais dans ta méthode déplacer, il n'y  a aucune condition pour gérer ça.
 
Et ça n'aurait pas de sens de le faire via cette méthode qui doit se contenter de déplacer ton personnage d'une seule case, relatif aux événements clavier.


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
Reply

Marsh Posté le 20-05-2016 à 21:32:36   

Reply

Marsh Posté le 20-05-2016 à 21:44:08    

Ah d'accord merci, je vais essayer de faire ça alors

Reply

Marsh Posté le 20-05-2016 à 22:19:52    

Pour l'option, le problème dont tu parles c'est bien le bouton "quitter"? Parce que le menu option (vide) j'arrive à y accéder sans problème. Regarde bien les deux dernières conditions, tu ne remarques rien?

Code :
  1. if event.button == 1 and event.pos[1] > 644 and event.pos[1] < 712 and event.pos[0] > 735 and event.pos[0] < 663:


Par ailleurs c'est pas cohérent, la variable de la boucle s'appelle "continuer_aide", le symbole '?' fait penser à l'aide mais le menu est titré "options"...

 

Pour le message d'erreur, je n'ai pas cherché à comprendre la logique du code mais le problème disparaît quand on corrige une faute de frappe dans le nom d'une variable: continer_aide. Il n'y a pas une option Python pour rendre obligatoire la déclaration préalable de ses variables? Cela peut éviter bien des ennuis...

 

Pour le reste bistouille en a parlé.


Message édité par rat de combat le 20-05-2016 à 22:21:16
Reply

Marsh Posté le 21-05-2016 à 09:58:36    

Pour l'option, non avant ça ne marchait pas le fait d'appuyer sur " ? ", mais c'est réglé maintenant :)
 Ah oui merci !  
 
Oui, le nom des variables ne correspond pas avec le titre, mais c'est parce que sur le moment j'ai mis ce qui me passait par la tête, et qu'on savait pas encore si nous devions mettre les règles du jeu dans cette partie ou plutôt les boutons de réglages, comme par exemple un curseur pour régler le son, même si finalement nous n'y arrivons pas... Du coup ça n'a pas changé depuis le début, et je comptais régler ça après le problème majeur du multijoueur à présent réglé
 
 
Il semble que je fasse beaucoup de fautes d'inattention, merci de les relever.

Reply

Marsh Posté le 21-05-2016 à 10:21:19    

Voilà, le problème des pièges est réglé, merci bistouille !
J'ai rajouté ça :
 
        elif direction == 'départ':
            self.case_x = 1
            self.case_y = 1
            self.x = 28
            self.y = 28
        elif direction == 'avance':
            self.case_x = 18
            self.case_y = 25
            self.x = 476
            self.y = 700
 
C'est vrai que sans, je risquais pas d'avancer loin x)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed