Je lis actuellement le cours sur pygame et j'en suis au TP. J'ai pratiquement tout coder mais j'ai une erreur bizarre quand j'essaye d'ouvrir un fichier qui s'affiche sur la console juste avant de se fermer alors j'ai réussi à prendre un screenshot juste avant qu'elle se ferme et j'ai pu lire ça : "Error: invalid file: (Surface(450x450x32 SW))"
Voici mes fichiers :
dklabyrinthe.py
import pygame
from pygame.locals import *
from classes import *
from constantes import *
pygame.time.Clock().tick(30)
pygame.init()
fenetre = pygame.display.set_mode((cote_fenetre, cote_fenetre))
icone = pygame.image.load(image_icone)
pygame.display.set_icon(icone)
pygame.display.set_caption(titre_fenetre)
accueil = pygame.image.load(image_accueil)
fond = pygame.image.load(image_fond)
continuer = 1
continuer_menu = 1
continuer_jeu = 1
while continuer:
while continuer_menu:
fenetre.blit(accueil, (0,0))
pygame.display.flip()
for event in pygame.event.get():
if event.type == QUIT:
continuer = 0
continuer_menu = 0
continuer_jeu = 0
if event.type == KEYDOWN:
if event.key == K_F1:
fichier_niveau = "Niveau1.txt"
continuer_menu = 0
if event.key == K_F2:
fichier_niveau = "Niveau2.txt"
continuer_menu = 0
while continuer_jeu:
fenetre.blit(fond, (0,0))
pygame.display.flip()
niveau = Niveau()
niveau.initialisation_niveau(fenetre)
niveau.afficher_niveau(fenetre)
for event in pygame.event.get():
if event.type == QUIT:
continuer = 0
continuer_jeu = 0
continuer_menu = 0
continuer_menu = 1
continuer_jeu = 1
classes.py
class Niveau:
def __init__(self):
self.structure = []
def initialisation_niveau(self, fichier):
with open(fichier, "r") as fichier:
for ligne in fichier:
for sprite in ligne:
listeSecondaire = []
while sprite != '/n':
listeSecondaire.append(sprite)
self.structure.append(listeSecondaire)
fichier.close()
def afficher_niveau(self, fenetre):
i = 0
j = 0
while i < len(self.structure):
while j < len(self.structure[i]):
if self.structure[i][j] == 'd':
self.structure[i][j] == pygame.image.load(depart)
position_sprite_x = self.structure[i][j] * taille_sprite
position_sprite_y = self.structure[i][j] * taille_sprite
fenetre.blit(self.structure, (position_perso_x, position_perso_y))
pygame.display.flip()
class Perso: #je ne l'ai pas encore codé
def __init__(self):
self.position_bas = dk_bas
self.position_haut = dk_bas
self.position_droite = dk_droite
self.position_gauche = dk_gauche
self.position_actuelle = dk_bas
J'ai confondu avec afficher_niveau. En tout cas merci
Edit : J'ai un autre problème, il reconnait pas où est "Niveau1.txt" alors qu'il est bien dans le dossier de mon programme. Il me met l'erreur à la ligne 6 dans classes.py... Il me met aussi une autre erreur à la ligne 47 dans dklabyrinthe à "niveau.initialisation_niveau(fichier_niveau)"
Je ne suis pas sur Linux mais WindowsXP. J'ai bien vérifié il est dans le dossier de mon projet, puisqu'il n'y a pas de sous-dossier dedans... J'ai aussi essayer en copiant le nom du fichier et en le collant dans le contenu du fichier, ça ne fonctionne toujours pas.
Je ne sais pas si ces erreurs sont liées à ce que je vais dire mais dans tous les cas tu devrais supprimer la ligne 13 de classes.py puisque tu ouvre ton fichier avec with qui se charge lui même de refermer ton fichier une fois que tu sors de son bloc.
Alors voilà, j'ai résolu beaucoup de problème sur mon TP (à chaque fois que j'en résolvais un, un autre apparaissait) mais il y en a un où je sèche vraiment : dans mon code ci-dessous, il me dis "argument 1 must be pygame.Surface, not str" à la ligne 28 dans "fenetre.blit(self.structure[i][j], (position_perso_x, position_perso_x))" dans classes.py, ce que je ne comprends pas car quelques lignes au-dessus, je le remplis avec un pygame.image.load... Voici mon code :
dklabyrinthe.py :
import pygame
from pygame.locals import *
from classes import *
pygame.time.Clock().tick(30)
pygame.init()
fenetre = pygame.display.set_mode((cote_fenetre, cote_fenetre))
icone = pygame.image.load(image_icone)
pygame.display.set_icon(icone)
pygame.display.set_caption(titre_fenetre)
accueil = pygame.image.load(image_accueil)
fond = pygame.image.load(image_fond)
continuer = 1
continuer_menu = 1
continuer_jeu = 1
while continuer:
while continuer_menu:
fenetre.blit(accueil, (0,0))
pygame.display.flip()
for event in pygame.event.get():
if event.type == QUIT:
continuer = 0
continuer_menu = 0
continuer_jeu = 0
if event.type == KEYDOWN:
if event.key == K_F1:
fichier_niveau = """d00mmmmm0m00mmm
0m00000m0mm0m00
00mm0m000m0000m
m000mmmm000mmmm
000m00000mmm00m
mm0mmmm0mm000mm
000mmm0000mmmmm
0m000mm0m0mm00m
0mm0m000m000mmm
mmm00mmmm0mmmmm
mmm0mm0m00mm00m
m000m00m0mm00mm
00mm00m00000mmm
mmmmm0mm0mm0mmm
m0000mmm00m000a"""
continuer_menu = 0
if event.key == K_F2:
fichier_niveau = "Niveau1"
continuer_menu = 0
while continuer_jeu:
fenetre.blit(fond, (0,0))
pygame.display.flip()
niveau = Niveau()
niveau.initialisation_niveau(fichier_niveau)
niveau.afficher_niveau(fenetre)
for event in pygame.event.get():
if event.type == QUIT:
continuer = 0
continuer_jeu = 0
continuer_menu = 0
continuer_menu = 1
continuer_jeu = 1
classes.py :
import pygame
from pygame.locals import *
from constantes import *
class Niveau:
def __init__(self):
self.structure = []
def initialisation_niveau(self, fichier):
for ligne in fichier:
for sprite in ligne:
listeSecondaire = []
if sprite != '/n':
listeSecondaire.append(sprite)
self.structure.append(listeSecondaire)
def afficher_niveau(self, fenetre):
i = 0
j = 0
position_perso_x = 0
position_perso_y = 0
while i < len(self.structure):
while j < len(self.structure[i]):
if self.structure[i][j] == 'd':
self.structure[i][j] == pygame.image.load(depart)
position_sprite_x = self.structure[i][j] * taille_sprite
position_sprite_y = self.structure[i][j] * taille_sprite
fenetre.blit(self.structure[i][j], (position_perso_x, position_perso_y))
if self.structure[i][j] == 'm':
self.structure[i][j] == pygame.image.load(mur)
position_sprite_x = self.structure[i][j] * taille_sprite
position_sprite_y = self.structure[i][j] * taille_sprite
fenetre.blit(self.structure[i][j], (position_perso_x, position_perso_y))
if self.structure[i][j] == 'a':
self.structure[i][j] == pygame.image.load(arrivee)
position_sprite_x = self.structure[i][j] * taille_sprite
position_sprite_y = self.structure[i][j] * taille_sprite
fenetre.blit(self.structure[i][j], (position_perso_x, position_perso_y))
pygame.display.flip()
class Perso:
def __init__(self, niveau):
self.position_bas = dk_bas
self.position_haut = dk_bas
self.position_droite = dk_droite
self.position_gauche = dk_gauche
self.position_actuelle = dk_bas
self.niveau = niveau
Up. (ça devrait être marqué quand on édite dans la liste des sujets >.<")
Edit: alors là j'avoue que c'était un peu stupide... mettre deux égale alors qu'on est pas dans une condition ou dans une boucle...
Problème Pygame TP
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.