Commit 3823fa4b6251e30d3f92da5396757c5d28065d21

Authored by afofana
1 parent 0a50320e

5e depôt

Showing 1 changed file with 148 additions and 27 deletions   Show diff stats
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 15
16 typedef struct d{ 16 typedef struct d{
17 int tab[N][N]; 17 int tab[N][N];
18 - int indi; //indice de ligne du neutron 18 + int indl; //indice de ligne du neutron
19 int indc; //indice de colonne du neutron 19 int indc; //indice de colonne du neutron
20 }damier; 20 }damier;
21 21
@@ -42,7 +42,7 @@ damier init(){ @@ -42,7 +42,7 @@ damier init(){
42 42
43 d.tab[2][2]=0; 43 d.tab[2][2]=0;
44 44
45 - d.indi=3; 45 + d.indl=3;
46 d.indc=3; 46 d.indc=3;
47 47
48 return d; 48 return d;
@@ -169,24 +169,130 @@ void dep(int i,int j,int dir,damier *d){ @@ -169,24 +169,130 @@ void dep(int i,int j,int dir,damier *d){
169 169
170 // Fonction qui renvoie 0 si le déplacement n'est pas valide et 1 sinon 170 // Fonction qui renvoie 0 si le déplacement n'est pas valide et 1 sinon
171 int valide(int i,int j,int dir,damier d){ 171 int valide(int i,int j,int dir,damier d){
  172 + int valide;
172 i=N-i; 173 i=N-i;
173 j=j-1; 174 j=j-1;
174 175
175 - int valide; 176 +
176 valide=1; 177 valide=1;
177 178
178 - if(dir==8 && (d.tab[i-1][j-1]!=empty) && i==0 && j==0){  
179 - valide=0;  
180 - } 179 + if(dir==8 && (i==0 || j==0 || (d.tab[i-1][j-1]!=empty)) ){
  180 + valide=0;}
  181 + else if(dir==1 && (i==0 || d.tab[i-1][j]!=empty)){
  182 + valide=0;}
  183 + else if(dir==2 && (j==4 || i==0 || d.tab[i-1][j+1]!=empty)){
  184 + valide=0;}
  185 + else if(dir==3 && (j==4 || d.tab[i][j+1]!=empty) ){
  186 + valide=0;}
  187 + else if(dir==4 && (i==4 || j==4 || d.tab[i+1][j+1]!=empty)){
  188 + valide=0;}
  189 + else if(dir==5 && (i==4 || d.tab[i+1][j]!=empty)){
  190 + valide=0;}
  191 + else if(dir==6 && (i==4 || j==0 || d.tab[i+1][j-1]!=empty)){
  192 + valide=0;}
  193 + else if(dir==7 && (j==0 || d.tab[i][j-1]!=empty)){
  194 + valide=0;}
  195 + /*else if (1<=dir || dir>=8){
  196 + valide=0;}*/
  197 + return valide==1;
  198 +}
  199 +
  200 +// 1 si joueur est bleu et 2 si le joueur est rouge
  201 +//renvoie 0 si perd et 1 si gagne
  202 +int perd(int joueur,damier d){
  203 + int i=d.indl;
  204 + int j=d.indc;
  205 + int c=1;
  206 + int perd=0;
  207 +
  208 +
  209 +
  210 + //Test si les pions du joueur bleu peuvent se déplacer
  211 + if(joueur==blue){
  212 + for(i=0;i<N;i++){
  213 + for(j=0;j<N;j++){
  214 + if(d.tab[i][j]==blue){
  215 + while(c<=8 && valide(i,j,c,d)==0){
  216 + c++;}
  217 +
  218 + if(c==9){
  219 + perd=1;}
  220 + else { perd=0;}
  221 +
  222 + }
  223 + }
  224 + }
  225 + if(d.indl==0) {
  226 + perd=1;
  227 + }
  228 + }
  229 +
  230 + //Test si les pions du joueur rouge peuvent se déplacer
  231 + else if(joueur==red){
  232 + for(i=0;i<N;i++){
  233 + for(j=0;j<N;j++){
  234 + if(d.tab[i][j]==red){
  235 + while(c<=8 && valide(i,j,c,d)==0){
  236 + c++;}
  237 +
  238 + if(c==9){
  239 + perd=1;}
  240 + else { perd=0;}
  241 + }
  242 + }
  243 + }
  244 + if(d.indl==4) {
  245 + perd=1;
  246 + }
  247 + }
  248 +
  249 +
  250 + //TEST SI LE NEUTRON PEUT SE DÉPLACER
  251 + c=1;
  252 + while(c<=8 && valide(i,j,c,d)==0){
  253 + c++;}
  254 +
  255 + if(c==9){
  256 + perd=1;}
  257 +
  258 + return perd;
  259 +
  260 +
  261 +}
  262 +
  263 +
  264 +
  265 +
  266 +//Défini un coup joué
  267 +
  268 +void tour(int joueur,damier *d){
  269 + int ind=d->indl;
  270 + int col=d->indc;
  271 + int dir;
  272 + int v;
  273 + int i,j;
  274 +
  275 + do{
  276 + printf("saisir un déplacement valide TOUR1\n");
  277 + scanf("%d",&dir);
  278 + v=valide(ind,col,dir,*d);
  279 +
  280 + }while(v==0);
  281 + dep(ind,col,dir,d);
  282 +
  283 + do{
  284 + printf("saisir un déplacement valide TOUR2\n");
  285 + scanf("%d",&dir);
  286 + v=valide(i,j,dir,*d);
  287 +
  288 + }while(v==0);
  289 +
  290 + printf("Saisir l'indice de ligne et de colonne du pion\n");
  291 + scanf("%d,%d",&i,&j);
181 292
182 - else if(dir==1 && i==0 && d.tab[i-1][j]!=empty){ valide=0;}  
183 - else if(dir==2 && j==4 && i==0 && d.tab[i-1][j+1]!=empty){ valide=0;}  
184 - else if(dir==3 && j==4 && d.tab[i][j+1]!=empty ){ valide=0;}  
185 - else if(dir==4 && i==4 && j==4 && d.tab[i+1][j+1]!=empty){ valide=0;}  
186 - else if(dir==5 && i==4 && d.tab[i+1][j]!=empty){ valide=0;}  
187 - else if(dir==6 && i==4 && j==0 && d.tab[i+1][j-1]!=empty){ valide=0;}  
188 - else if(dir==7 && j==0 && d.tab[i][j-1]!=empty){ valide=0;}  
189 - return valide; 293 +
  294 + dep(i,j,dir,d);
  295 + affichage(*d);
190 } 296 }
191 297
192 298
@@ -194,29 +300,44 @@ int valide(int i,int j,int dir,damier d){ @@ -194,29 +300,44 @@ int valide(int i,int j,int dir,damier d){
194 int main(){ 300 int main(){
195 int i; //indice de ligne 301 int i; //indice de ligne
196 int j; //indice de colonne 302 int j; //indice de colonne
197 - int dir; //indice de déplacement 303 + int dir;//indice de déplacement
  304 + int v;
  305 +
  306 +
198 damier d; 307 damier d;
199 d=init(); 308 d=init();
200 affichage(d); 309 affichage(d);
201 printf("\n\n"); 310 printf("\n\n");
202 311
203 - printf("Saisir l'indice de ligne et de colonne\n");  
204 - scanf("%d%d",&i,&j);  
205 312
206 - printf("Saisir le déplacement souhaité\n");  
207 - scanf("%d",&dir);  
208 - printf("%d",dir);  
209 -  
210 - //On redemande une autre direction tant que la direction ne peut pas être faite  
211 - while (valide(i,j,dir,d)==0){  
212 - printf("saisir un autre déplacement valide\n"); 313 + printf("Indice de ligne et de colonne du pion\n");
  314 + scanf("%d,%d",&i,&j);
  315 + do{
  316 + printf("saisir un déplacement valide MAIN\n");
213 scanf("%d",&dir); 317 scanf("%d",&dir);
214 - printf("%d",dir);  
215 - } 318 + v=valide(i,j,dir,d);
  319 +
  320 + }while(v==0);
216 321
217 dep(i, j, dir, &d); 322 dep(i, j, dir, &d);
218 -  
219 affichage(d); 323 affichage(d);
  324 +
  325 +
  326 + while (perd(blue,d)==1 && perd(red,d)==1){
  327 + tour(red,&d);
  328 + affichage(d);
  329 + printf("\n\n");
  330 + tour(blue,&d);
  331 + affichage(d);
  332 + }
  333 +
  334 + if (perd(blue,d)==0){
  335 + printf("Joueur Bleu gagne\n");
  336 + }
  337 +
  338 + else if (perd(red,d)==0){
  339 + printf("Joueur Rouge gagne\n");
  340 + }
220 341
221 return 0; 342 return 0;
222 } 343 }