Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 ?








Lassé par la pub ? Créez un compte
Expert Programmation

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()
Lassé par la pub ? Créez un compte
Tom's guide dans le monde