Se connecter / S'enregistrer
Votre question

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

Tags :
  • Boss
  • Programmation
Dernière réponse : dans Programmation
24 Juin 2009 22:46:45

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.

  1. class Case():
  2.  
  3. def __init__(self):
  4.  
  5. self.terrain = "brown"
  6. self.occupee = "libre"
  7. 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:


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



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


  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 ?








Autres pages sur : python modifier dictionnaire aide boucle

a b L Programmation
25 Juin 2009 21:02:27

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:
  1. carteTest[i,j] = Case()
6 Juillet 2009 19:02:09

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. :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS