Bonjour à tous ,

voilà je suis confronté à un autre problème et notamment sur les pièces à logue portée comme le fou et la reine auxquelles il faut vérifier s'il y a une pièce dans une case avant d'arriver à la case où on veut se déplacer .
je pensais qu'avec un simple vector çà pourrait marcher (c'est ce que j'ai fait pour les pions et et le roi ) mais apparemment notamment pour le fou comme exemple , l'utilisation d'un map semble la solution :
avec un simple vector , j'arrive à trouver les cases valides d'un fou sans tenir compte la présence ou non d'une pièce dans une case :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
 
/************************************************
* deplacement fou 
*************************************************/
 
class Fou:public Piece {
 
		public :
 
 
 
			Fou(int x , int y,int coul , char etiq):Piece(x,y,coul,etiq){};
 
			bool ValiderDeplacement(int x,int y,Piece* Ptr);
 
			int getCouleur();
 
 
 
			};
 
			int Fou::getCouleur(){
				return couleur;
 
				}
 
 
 
 ostream& operator<<(ostream& out,Fou &P1){
		out << "ligne: "<< P1.avoirLigne() << "colonne:"<< P1.avoirColonne() << endl ;
		 return out ;
		}
 
 
   bool Fou::ValiderDeplacement(int x,int y,Piece* Ptr){
				Coordonne temp;
				Coordonne* temp2,*temp3,*temp5;
				int val ;
				bool valide = false ;
				bool trouve = false ;
				int ligne , colonne ;
				Emplacement casesValidesFou;
				Emplacement deplacement;
				vector<Coordonne*>::iterator i;
				vector<Coordonne*>::iterator ii;
				// les vecteurs de directions 
				Coordonne* VecteurFou1 = new Coordonne(-1,1);
				Coordonne* VecteurFou2 = new Coordonne(1,-1);
				Coordonne* VecteurFou3 = new Coordonne(1,1);
				Coordonne* VecteurFou4 = new Coordonne(-1,-1);
 
 
				// on insere dans un vector
 
				casesValidesFou.push_back(VecteurFou1);
				casesValidesFou.push_back(VecteurFou2);
				casesValidesFou.push_back(VecteurFou3);
				casesValidesFou.push_back(VecteurFou4);
 
 
				for(i = casesValidesFou.begin();i!=casesValidesFou.end();i++){
						cout << *i << " " ;
 
					}
 
 
				   i = casesValidesFou.begin();
 
				   while(i!=casesValidesFou.end()){
 
					   if(*i==NULL){
						    cout <<"erreur de creation de vectore roi\n" ;
 
						   }
					   else {
 
 
						   temp = this->Place ;
 
		while(((temp <=8)==0)&&((temp>=1)==0)){
 
				 temp =temp + *i ;
			 temp2 = new Coordonne(temp);
 
		if (((temp <=8)==0)&&((temp>=1)==0)) {
							          deplacement.push_back(temp2);
 
										}
 
							   }
 
 
 
						   }
 
							i++;
					   }
 
 
				  for(i=deplacement.begin(); i!= deplacement.end();i++)
					 {
 
                          cout <<"vector dans deplacement" <<*i <<" " ;
 
						 }
 
				  i=deplacement.begin();
 
				  temp3 = new Coordonne(x,y);
				  val = 0;
				  ii = deplacement.begin();
 
		  while((ii!=deplacement.end())&&(trouve==false)){
 
			  // il faut s'assurer aussi que la case est vide 
 
				   temp5 = *ii;
				   if((*temp3==*temp5)==0){
					   trouve = true;
 
					   }
				   else {
					   ii++;
 
					   }
 
				   }
 
			   val = distance(i,ii);
 
			   cout << "la valeur se trouve a la"<<" " << val <<" " <<  "eme position" << endl;
 
			   if(trouve==true){
				   cout << "deplacement Fou " << endl ;
 
				   cout << "il faut verifier la presence d'une piece de la case "  << endl ;
 
				   cout << "s'il y a il faut s'assurer que ila une couleur differente " << endl ;
 
                       cout << "deplacement vers la ccase " << *temp3 << endl ;
 
				   }
			   else{
                     cout <<"impossible de se deplacer pour le fou "<< endl ;
				   }	
 
 
 
 
 
 
 
				return valide ;
				}
vous avez remarqué que deplacement est un vector
ce code m'affiche çà :

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
 
 
              affichage pion :ligne: 2colonne:2
 
un deplacement vers la case 4 6
ligne: -1       colonne:1
 ligne: 1       colonne:-1
 ligne: 1       colonne:1
 ligne: -1      colonne:-1
 vector dans deplacementligne: 1        colonne:3
 vector dans deplacementligne: 3        colonne:1
 vector dans deplacementligne: 3        colonne:3
 vector dans deplacementligne: 4        colonne:4
 vector dans deplacementligne: 5        colonne:5
 vector dans deplacementligne: 6        colonne:6
 vector dans deplacementligne: 7        colonne:7
 vector dans deplacementligne: 8        colonne:8
 vector dans deplacementligne: 1        colonne:1
 la valeur se trouve a la 9 eme position
impossible de se deplacer pour le fou
la validation de deplacement est0
impossible de se dÚplacer
Appuyez sur une touche pour continuer...
en fait si je resume y a des vecteurs de direction -1,1) ,(1,-1),(1,1),(-1,-1)
et à chaque vecteur de direction on associe les cases valides

exemple pour un fou (2,2)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
(-1,1) -> (1,3)
(1,-1)-> (3,1)
(1,1) -> (3,3) - (4,4) -(5,5) -(6,6) -(7,7) - (8,8)
(-1,-1) -> (1,1)
mais le problème c'est que ce cas peut changer seln la situation
exemple pour un fou (3,4)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
(-1,1) -> (2,5) - (1,6)
(1,-1)-> (4,3) -(5,2) -(6,1)
(1,1) -> (4,5) -(5,6) -(6,7)- (7,8)
(-1,-1) -> (2,3) - (1,2)
l'intérêt et l'objectif c'est que si je voulais me déplacer à la case (6,6) cas du fou (2,2) je dois vérifier selon la logique des chose et les rêgles si y a des pièces dans ces cases : (3,3) - (4,4) -(5,5)
le problème avec un vector c'est qu'il rassemble tout donc il se peut qu'il vérifie la case (3,1) ou (1,3) qui n'ont rien avoir :

l'idée qui vient à l'esprit c'est de déclarer un map comme suit au lieu de vector :
map<Coordonne*, Coordonne*> deplacement ;

mais après je ne sais pas trop comment relier comme dans cet exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
map<int, string> Employees;
 
	   // 1) Assignment using array index notation
	   Employees[5234] = "Mike C.";
	   Employees[3374] = "Charlie M.";
	   Employees[1923] = "David D.";
	   Employees[7582] = "John A.";
	   Employees[5328] = "Peter Q.";
et aussi , je pense qu'avec map::find(key). on peut trouver la clé associer et si c'était le cas , comment faire pour parcourir les valeurs associées à cette clé ??
est -ce que le fait de mettre deplacement.begin() ne met pas l'itérator au début même dans une mauvaise clé ??
j'ai vraiment besoin de vos avis et vos aides
toutes suggestions seront toujours les bienvenues

merci d'avance