Tom's Guide > Forum > Programmation > [Python] Modifier un dictionnaire à l'aide d'une boucle

[Python] Modifier un dictionnaire à l'aide d'une boucle

Forum Programmation : [Python] Modifier un dictionnaire à l'aide d'une boucle

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour, j'aimerais créer un grillage afin de modéliser un petit jeu de rpg tactique (du genre fftactic).

J'ai donc commencé par créer une nouvelle classe appelée Case.

Code :
  1. class Case():
  2.     def __init__(self):
  3.         self.terrain = "brown"
  4.         self.occupee = "libre"
  5.         self.numero = None



Donc par défaut, la case est une case avec un terrain de type "brown" et non occupée. J'utilise des couleurs comme type de terrain pour réutiliser cette propriété lors de l'affichage. Brown signifie une case terrestre, en comparaison à blue qui signifie une case d'eau.

Bon, maintenant, je vais créer un dictionnaire. La clef sera un tupple de deux nombres, les coordonnés de la cases, tandis que la valeur sera un objet de type case.

J'initialise mon grillage:


Code :
  1. class Carte(Frame):
  2.     "Carte du terrain, héritage de la classe Layer de Tkinter."
  3.     def __init__(self,boss,numero,groupeNpc,formationNpc,groupeEnnemi,formationEnnemie):
  4.         Frame.__init__(self)
  5.         if numero == "":
  6.             largeur = 20
  7.             hauteur = 20
  8.             nbCases = largeur * hauteur
  9.             nbPixel = 20
  10.             caseVide = Case()
  11.             carteTest = {} 
  12.             k = 0
  13.             for i in range(largeur):
  14.                 for j in range(hauteur):
  15.                     carteTest[i,j] = caseVide
  16.                     carteTest[i,j].numero = k
  17.                     k += 1




Ensuite, j'essaie de transformer certaine case en case bleue pour en faire des cases d'eau:


Code :
  1. for i in range(10,15):
  2.                 for j in range(10,15):
  3.                     carteTest[(i,j)].terrain = "blue"




Mais alors, toute mes cases se transforment en case d'eau. En gros, pas seulement les cases mentionnées par la boucle. J'espère que mes perso savent nager... :D

Quelqu'un a une idée pourquoi ?








Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Je pense qu'en faisant "carteTest[i,j] = caseVide" tu associe le même objet sur toutes les cases, ce n'est qu'une référence.
Donc, je te suggère d'essayer de créer un objet par case:

Code :
  1. carteTest[i,j] = Case()

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Oui, tu as raison. Toute mes entrées de dictionnaire pointait vers la même valeur, un seul objet de type Case().

Maintenant ça fonctionne très bien. Je vais pouvoir reprendre ce projet. Merci CRicky. :)


Message édité par reveurduciel le 06-07-2009 à 19:02:42
Répondre à reveurduciel
Tom's Guide > Forum > Programmation > [Python] Modifier un dictionnaire à l'aide d'une boucle
Aller à :

Il y a 2733 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens