Problème avec python (pysfml et le xml)
Trameur
-
Trameur -
Trameur -
Bonjour,
Alors voici mon problème :
Depuis quelques jours j'apprend le langage python, je suis passé au pysfml récemment .
La je suis en train de faire un mini jeu, avant, mon code (la partie level) ressemblait à ceci :
level_width = 27
level_height = 17
tiles = [
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,
1,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,2,0,1,
1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,2,0,0,0,1,
1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,
1,0,0,0,0,1,1,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,3,0,1,
1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,1,0,1,
1,1,2,0,2,2,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,
1,1,0,4,3,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,4,0,0,0,1,1,
1,1,1,1,1,1,1,3,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,
1,0,0,0,2,0,0,2,0,0,0,0,0,0,1,1,1,0,1,1,4,0,0,0,0,2,1,
1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,1,0,2,0,1,1,
1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,3,0,1,1
]
Mais maintenant j'aimerais faire comme ceci :
class Level:
def __init__( self, filename ):
# ouvrir le fichier
# lire le contenu dans une chaîne
# passer la chaîne à ElementTree.fromstring() pour créer l'arbre XMl
# récupérer largeur & hauteur dans self.width & self.height
# récupérer le contenu du niveau, le découper à coup de split('\n') et split(',')
# mettre tout ça dans self.tiles
#
# on a un niveau
J'ai avant cela créé le niveau avec un logiciel qui ressemble a ceci (sur une autre page bien sur) :
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="80" height="30" tilewidth="50" tileheight="50">
<tileset firstgid="1" name="tileset" tilewidth="50" tileheight="50">
<image source="../images/tileset.png" width="500" height="500"/>
</tileset>
<layer name="Calque 1" width="80" height="30">
<data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[...],0,0,0,0,0,0,0,0,0,0,0,0,0,0
</data>
</layer>
</map>
Sauf qu'il n'existe aucun tuto la dessus et je ne comprend pas trop comment utiliser la bibliothèque dispo ici : http://docs.python.org/library/xml.etree.elementtree.html
surtout que c'est en anglais et je comprend pas grand chose.
Merci d'avance de bien vouloir m'éclaircir sur la démarche a suivre pour arriver a charger mon niveau.
EDIT : j'ai un deuxième problème :
Sur le PC que j'utilise actuellement, le pysfml ne marche pas a 100%, enfin le code si mais la page de mon programme ne s'affiche pas correctement, je vois l'onglet "mon programme" en bas mais en cliquant dessus rien ne se passe.
J'aimerais savoir comment faire pour visualiser ma page merci :)
Alors voici mon problème :
Depuis quelques jours j'apprend le langage python, je suis passé au pysfml récemment .
La je suis en train de faire un mini jeu, avant, mon code (la partie level) ressemblait à ceci :
level_width = 27
level_height = 17
tiles = [
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,
1,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,
1,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,2,0,1,
1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,2,0,0,0,1,
1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,
1,0,0,0,0,1,1,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,3,0,1,
1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,1,0,1,
1,1,2,0,2,2,1,0,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,
1,1,0,4,3,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,4,0,0,0,1,1,
1,1,1,1,1,1,1,3,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,
1,0,0,0,2,0,0,2,0,0,0,0,0,0,1,1,1,0,1,1,4,0,0,0,0,2,1,
1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,1,0,2,0,1,1,
1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,3,0,1,1
]
Mais maintenant j'aimerais faire comme ceci :
class Level:
def __init__( self, filename ):
# ouvrir le fichier
# lire le contenu dans une chaîne
# passer la chaîne à ElementTree.fromstring() pour créer l'arbre XMl
# récupérer largeur & hauteur dans self.width & self.height
# récupérer le contenu du niveau, le découper à coup de split('\n') et split(',')
# mettre tout ça dans self.tiles
#
# on a un niveau
J'ai avant cela créé le niveau avec un logiciel qui ressemble a ceci (sur une autre page bien sur) :
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="80" height="30" tilewidth="50" tileheight="50">
<tileset firstgid="1" name="tileset" tilewidth="50" tileheight="50">
<image source="../images/tileset.png" width="500" height="500"/>
</tileset>
<layer name="Calque 1" width="80" height="30">
<data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[...],0,0,0,0,0,0,0,0,0,0,0,0,0,0
</data>
</layer>
</map>
Sauf qu'il n'existe aucun tuto la dessus et je ne comprend pas trop comment utiliser la bibliothèque dispo ici : http://docs.python.org/library/xml.etree.elementtree.html
surtout que c'est en anglais et je comprend pas grand chose.
Merci d'avance de bien vouloir m'éclaircir sur la démarche a suivre pour arriver a charger mon niveau.
EDIT : j'ai un deuxième problème :
Sur le PC que j'utilise actuellement, le pysfml ne marche pas a 100%, enfin le code si mais la page de mon programme ne s'affiche pas correctement, je vois l'onglet "mon programme" en bas mais en cliquant dessus rien ne se passe.
J'aimerais savoir comment faire pour visualiser ma page merci :)
A voir également:
- Problème avec python (pysfml et le xml)
- Xml download - Télécharger - Édition & Programmation
- Citizen code python avis - Accueil - Outils
- Office xml handler - Télécharger - Traitement de texte
- Driveimage xml - Télécharger - Sauvegarde
- Mot secret python pix ✓ - Forum Python
2 réponses
Bon j'ai corrigé mon problème maintenant ça marche :)
Voici le code :
Mais il reste mon deuxième problème :
Sur le PC que j'utilise actuellement, le pysfml ne marche pas a 100%, enfin le code si mais la page de mon programme ne s'affiche pas correctement, je vois l'onglet "mon programme" en bas mais en cliquant dessus rien ne se passe.
J'aimerais savoir comment faire pour visualiser ma page merci :)
Voici le code :
class Level: def __init__( self, filename ): # ouvrir le fichier if niveau == 1: level_file = open( "levels/level01.tmx" ) elif niveau == 2: level_file = open( "levels/level02.tmx" ) elif niveau == 3: level_file = open( "levels/level03.tmx" ) # lire le contenu dans une chaine level_data = level_file.read() # passer la chaine a ElementTree.fromstring() pour creer l'arbre XMl level_tree = ElementTree.fromstring(level_data) # recuperer largeur & hauteur dans self.width & self.height self.width = int(level_tree.attrib["width"]) self.height = int(level_tree.attrib["height"]) # recuperer le contenu du niveau, le decouper a coup de split('\n') et split(',') level_content = level_tree.find("layer").find("data").text # mettre tout ca dans self.tiles self.tiles = [] for row in level_content.split('\n'): cols = row.split(',') for col in cols: if col != "": self.tiles.append( int(col) ) def Draw( self, window ): for y in range( self.height ): for x in range( self.width ): tile_value = self.tiles[ y * self.width + x ] if tile_value == 0: pass elif tile_value == 1: mur_sprite.SetPosition( x * tile_size - camera.x, y * tile_size - camera.y ) window.Draw( mur_sprite ) elif tile_value == 2: coin_sprite.SetPosition( x * tile_size - camera.x, y * tile_size - camera.y ) window.Draw( coin_sprite ) elif tile_value == 3: bloc_ralentisseur_sprite.SetPosition( x * tile_size - camera.x, y * tile_size - camera.y ) window.Draw( bloc_ralentisseur_sprite ) elif tile_value == 4: bloc_tueur_sprite.SetPosition( x * tile_size - camera.x, y * tile_size - camera.y ) window.Draw( bloc_tueur_sprite ) elif tile_value == 5: bloc_fin_sprite.SetPosition( x * tile_size - camera.x, y * tile_size - camera.y ) window.Draw( bloc_fin_sprite ) def GetTileAt( self, tile_x, tile_y ): # anciennement get_level_at if tile_x < 0 or tile_x >= self.width: return 1 if tile_y < 0 or tile_y >= self.height: return 0 return self.tiles[ tile_y * self.width + tile_x ] def SetLevelAt( self, tileX, tileY, tileValue ): self.tiles[ tileY * self.width + tileX ] = tileValue def GetTileAtPosition( self, x, y ): return self.GetTileAt( int( x / tile_size ), int( y / tile_size ) ) def SetTileAtPosition( self, x, y, tileValue ): self.SetLevelAt( int( x / tile_size ), int( y / tile_size ), tileValue ) current_level = Level( "levels/level01.tmx" ) collidable_tiles = [ 1, 3, 4 ]
Mais il reste mon deuxième problème :
Sur le PC que j'utilise actuellement, le pysfml ne marche pas a 100%, enfin le code si mais la page de mon programme ne s'affiche pas correctement, je vois l'onglet "mon programme" en bas mais en cliquant dessus rien ne se passe.
J'aimerais savoir comment faire pour visualiser ma page merci :)