Bonjour, avant de vous expliquer mon problème, je vous présente mes codes:
Voici comment je déclare ma classe Region:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*-coding:Latin-1 -*
class Region:
 
    def __init__(self):
        self.nom = ""
        self.description = ""
        self.id = ""
        self.regionParent = self.id
        self.motsCles = []
        self.facteurDep = 1
        self.creaturesRencontrables= []
        self.conditionsEntrer = []
        self.conditionsSortir = []
        self.effets = []
        self.objets = []
        self.creatures = []
        self.portails = []
        self.directionUtil = 11111111
Ici je définis différents types de régions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
plaine_du_ninejaddai = Region()
plaine_du_ninejaddai.id = 'plaine_du_ninejaddai'
plaine_du_ninejaddai.nom = 'Plaine du Ninejaddai'
plaine_du_ninejaddai.motsCles = ['#plaine','#ninejaddai']
plaine_du_ninejaddai.creatures = [[bouc1,[1,1]],[bouc2,[1,1]],[bouc3,[0,1]]]
plaine_du_ninejaddai.creaturesRencontrables = [bouc,orque_miteux,troll_geant_maladroit,rat_pesteux]
plaine_du_ninejaddai.description = "Une plaine sauvage malgré les nombreux pâturages de boucs."
 
foret_de_schlipak = Region()
foret_de_schlipak.id = 'foret_de_schlipak'
foret_de_schlipak.nom = 'Forêt de Schlipak'
foret_de_schlipak.motsCles = ['#foret']
foret_de_schlipak.creaturesRencontrables = [orque_miteux,troll_geant_maladroit]
foret_de_schlipak.description = "Une grande forêt peuplée de divers peuples et diverses créatures."
 
plaine_du_ninejaddai_lisiere_schlipak = Region()
plaine_du_ninejaddai_lisiere_schlipak.id = 'plaine_du_ninejaddai_lisiere_schlipak'
plaine_du_ninejaddai_lisiere_schlipak.nom = 'Plaine du Ninejaddai - Lisière de la forêt de Schlipak'
plaine_du_ninejaddai_lisiere_schlipak.regionParent = 'plaine_du_ninejaddai'
plaine_du_ninejaddai_lisiere_schlipak.motsCles = ['#plaine','#ninejaddai', '#lisiere','foret']
plaine_du_ninejaddai_lisiere_schlipak.creatures = [[bouc1,[1,1]],[bouc2,[1,1]],[bouc3,[0,1]]]
plaine_du_ninejaddai_lisiere_schlipak.creaturesRencontrables = [bouc,orque_miteux,troll_geant_maladroit,rat_pesteux]
plaine_du_ninejaddai_lisiere_schlipak.description = "La lisière de la forêt de Schlipak avec la plaine du Ninejaddai."
 
plaine_du_ninejaddai_route = Region()
plaine_du_ninejaddai_route.id = 'plaine_du_ninejaddai_route'
plaine_du_ninejaddai_route.nom = 'Plaine du Ninejaddai - Route de Zoyek'
plaine_du_ninejaddai_route.regionParent = 'plaine_du_ninejaddai'
plaine_du_ninejaddai_route.motsCles = ['#plaine','#ninejaddai','#route']
plaine_du_ninejaddai_route.creatures = [[bouc1,[1,2]],[bouc2,[1,2]],[bouc3,[0,2]]]
plaine_du_ninejaddai_route.creaturesRencontrables = [bouc,rat_pesteux]
plaine_du_ninejaddai_route.description = "La route traversant la plaine du Ninejaddai et reliant Zoyek au lac de Zblouf."
 
bordure_fleuve_elibed = Region()
bordure_fleuve_elibed.id = 'bordure_fleuve_elibed'
bordure_fleuve_elibed.nom = 'Bordures du fleuve Elibed'
bordure_fleuve_elibed.motsCles = ['#fleuve','#ninejaddai','#plaine']
bordure_fleuve_elibed.creatures = [[bouc1,[1,1]],[bouc2,[1,1]],[bouc3,[0,1]]]
bordure_fleuve_elibed.creaturesRencontrables = [bouc,orque_miteux,troll_geant_maladroit,rat_pesteux]
bordure_fleuve_elibed.description = "Les bordures du fleuves Elibed qui sépare la plaine du Ninejaddai des terres sauvages de Kwzprtt."
Alors ici je définis la map de mon jeu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
univers.map = [[plaine_du_ninejaddai_route,plaine_du_ninejaddai,plaine_du_ninejaddai_lisiere_schlipak,foret_de_schlipak,foret_de_schlipak,foret_de_schlipak],
               [plaine_du_ninejaddai_route,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai_lisiere_schlipak,foret_de_schlipak,foret_de_schlipak],
               [plaine_du_ninejaddai,plaine_du_ninejaddai_route,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai_lisiere_schlipak,foret_de_schlipak],
               [plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai_route,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai_lisiere_schlipak],
               [plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai_route,plaine_du_ninejaddai_route,plaine_du_ninejaddai],
               [plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai_route],
               [plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai],
               [bordure_fleuve_elibed,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai],
               [plaine_du_ninejaddai,bordure_fleuve_elibed,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai,plaine_du_ninejaddai]
               ]
Le fonctionnement est assez simple: Cette liste définit en fait la map de mon jeu, chaque emplacement contient une région (un objet).
Ainsi on peu accéder à la région d'un emplacement précis en faisant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
region = univers.map[X][Y]
Voici la représentation de la map. Les carrés verts foncés représentent foret_de_schlipak, les verts clairs plaine_du_ninejaddai_lisiere_schlipak, les beiges plaine_du_ninejaddai, les marrons/gris plaine_du_ninejaddai_route et les bleus bordure_fleuve_elibed.
Le point (x=0,y=0) se trouve en bas à gauche.
Nom : terressauvages-carte2_rogné.jpg
Affichages : 251
Taille : 10,3 Ko

Lorsque le joueur rencontre une créature, la créature est piochée au hasard et elle est ajoutée à la liste des créatures de la région dans laquelle se trouve le joueur dans univers.map (donc elle est ajoutée à univers.map[personnage.positionX][personnage.positionY].creatures).
Mais c'est là que le problème se manifeste puisqu'elle s'ajoute également à toutes les régions du même type dans univers.map. Ce qui est assez logique.
Pour résoudre ce problème j'ai fait cette fonction que j'applique à univers.map comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def ModifierMap(map = []):
    i = 0
    while i < len(map):
        a = 0       
        while a < len(map[i]):
            obj = map[i][a]
            newObj = Region()
            newObj.conditionsEntrer = obj.conditionsEntrer
            newObj.conditionsSortir = obj.conditionsSortir
            newObj.creatures = obj.creatures
            newObj.creaturesRencontrables = obj.creaturesRencontrables
            newObj.description = obj.description
            newObj.directionUtil = obj.directionUtil
            newObj.effets = obj.effets
            newObj.facteurDep = obj.facteurDep
            newObj.id = obj.id
            newObj.motsCles = obj.motsCles
            newObj.nom = obj.nom
            newObj.objets = obj.objets
            newObj.portails = obj.portails
            newObj.regionParent = obj.regionParent
            map[i][a] = newObj
            a += 1
        i += 1
    return map
 
univers.map = ModifierMap(univers.map)
map = univers.map
i=0
while i < len(map):
        a = 0       
        while a < len(map[i]):
            print(id(map[i][a]))
            a+=1
        i+=1
La dernière boucle affiche les ids de tous les éléments de univers.map. Je confirme que tous les objets ont bien des ids différents.
Malheureusement le problème n'est pas résolu: les créatures sont toujours ajoutée à toutes les régions du même type que celle dans laquelle ont veut en ajouter. Mais si les ids pythons des objets sont différents, les objets devraient être indépendants non ?

Je précise que je suis ici entrain de tester si les mécanismes du jeu fonctionnent bien. Dans la version finale, l'utilisateur pourra personnaliser entièrement l'univers du jeu, donc entre autres, les types de régions mais également leur répartition sur la map.