Bonjour, avant de vous expliquer mon problème, je vous présente mes codes:
Voici comment je déclare ma classe Region:
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 # -*-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
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
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."
Le fonctionnement est assez simple: Cette liste définit en fait la map de mon jeu, chaque emplacement contient une région (un objet).
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] ]
Ainsi on peu accéder à la région d'un emplacement précis en faisant:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part region = univers.map[X][Y]
Le point (x=0,y=0) se trouve en bas à gauche.
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:
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.
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
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.
Partager