Bonjour ,
j'essaie d'avancer sur ce projet d'échecs et là je suis confronté à un problème délicat il s'agit des pièces à longue portée comme le Fou - la reine et le tour
mais je fais en ce moment le cas du fou :
on suppose que le fou se trouve ds Coordonnee (3,3) , après analyse du problème j'ai remarqué que toutes les pièces ont disons des vecteur de directions et le cas du Fou y en a 4 :
(-1,1); - > veut dire qu'on accède à la case (2,4)
(1,1);
(1,-1);
(-1,-1);

mon problème c'est que non seulement il faut voir jusqu'où le fou peut aller et aussi il faut s'assurer que s'il rencontre une pièce c'est la limite
en prenant le schéma , j'applique cette méthode :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
8 - - - - - - - -  
7 - - - - - - P -  
6 - - - - - x - -  
5 - - - - x - - -  
4 - - - x - - - -  
3 - - F - - - - -  
2 - - - - - - - - 
1 - - - - - - - - 
  1 2 3 4 5 6 7 8
si on voulait atteindre la direction où il y a le pion (P) il faut appliquer le vecteur (1,1)
départ : Fou (3,3)


Fou (3,3) +(1,1) =( 4,4) -> valide car vide (x)
(4,4) + (1,1) = (5,5) -> valide car vide (x)
(5,5) + (1,1) = (6,6) -> valide car vide (x)
(6,6) + (1,1) = (7,7) -> présence Pièce(il faut vérifier si c'est adverse )

voilà en gros le problème , je sais qu'il y a la récursivité dedans mais je ne sais pas comment le faire et comment l'associer aux conditions de contrôle
tant qu'il n'y a pas de pièce et tant que c'est < = 8 et >= 1 (il faut s'assurer aussi que çà ne dépasse pas le plateau
j'ai regarder qlq exemple sur la récursivité mais l'exemple sur le factoriel me paraît simple et logique mais , j'ai dû mal à l'appliquer ici

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 int Fact(int n)
{
 
      if(n == 1)
 
            return 1;
 
      else
 
            return (n*Fact(n-1));
 
}
en fait j'ai déjà rédiger un code qui nous traite seulement 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
 
 
ostream& operator<<(ostream& out,Fou &P1){
		out << "ligne: "<< P1.avoirLigne() << "colonne:"<< P1.avoirColonne() << endl ;
		 return out ;
		}
 
 
   bool Fou::ValiderDeplacement(int x,int y){
				Coordonne temp;
				Coordonne* temp2,*temp3,*temp5;
				int val ;
				bool valide = false ;
				bool trouve = false ;
				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 << " " ;
 
					}
 
 
 
				for(i= casesValidesFou.begin(); i!= casesValidesFou.end();++i)
					 {
 
					 if(*i==NULL)
						 {
                          cout <<"erreur de creation de vectore roi\n" ;
 
						 }
					 else {
						 // succès et on traite
						 temp = this->Place + *i ;
 
							// on teste si entre 1 et 8
						 if(((temp>=1)==0)&&((temp<=8)==0))
								{
 
							 temp2 = new Coordonne(temp);
							 deplacement.push_back(temp2);
 
								}
 
 
 
							}
 
 
 
 
					 }
 
 
				  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)){
 
				   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 cavalier " << 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"<< endl ;
				   }	
 
 
 
 
 
				return valide ;
				}
affichage
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
 
affichage pion :ligne: 3colonne:3
 
un deplacement vers la case (2,2)
ligne: -1       colonne:1
 ligne: 1       colonne:1
 ligne: 1       colonne:-1
 ligne: -1      colonne:-1
 vector dans deplacementligne: 2        colonne:4
 vector dans deplacementligne: 4        colonne:4
 vector dans deplacementligne: 4        colonne:2
 vector dans deplacementligne: 2        colonne:2
 la valeur se trouve a la 4 eme position
impossible de se deplacer
Appuyez sur une touche pour continuer...
est ce que vous aurrez une suggestion où la manière où je dois procéder pour cette récursivité car j'ai juste traiter le vecteur de direction -1 , 1
mais il faut faire aussi les autres ;
est ce qu vous croyez qu'un vector serait la meilleure solution pour ce genre de cas

je vous remercie d'avance