Commit 3823fa4b6251e30d3f92da5396757c5d28065d21

Authored by afofana
1 parent 0a50320e

5e depôt

Showing 1 changed file with 148 additions and 27 deletions   Show diff stats
neutron.c
... ... @@ -15,7 +15,7 @@
15 15  
16 16 typedef struct d{
17 17 int tab[N][N];
18   - int indi; //indice de ligne du neutron
  18 + int indl; //indice de ligne du neutron
19 19 int indc; //indice de colonne du neutron
20 20 }damier;
21 21  
... ... @@ -42,7 +42,7 @@ damier init(){
42 42  
43 43 d.tab[2][2]=0;
44 44  
45   - d.indi=3;
  45 + d.indl=3;
46 46 d.indc=3;
47 47  
48 48 return d;
... ... @@ -169,24 +169,130 @@ void dep(int i,int j,int dir,damier *d){
169 169  
170 170 // Fonction qui renvoie 0 si le déplacement n'est pas valide et 1 sinon
171 171 int valide(int i,int j,int dir,damier d){
  172 + int valide;
172 173 i=N-i;
173 174 j=j-1;
174 175  
175   - int valide;
  176 +
176 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 300 int main(){
195 301 int i; //indice de ligne
196 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 307 damier d;
199 308 d=init();
200 309 affichage(d);
201 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 317 scanf("%d",&dir);
214   - printf("%d",dir);
215   - }
  318 + v=valide(i,j,dir,d);
  319 +
  320 + }while(v==0);
216 321  
217 322 dep(i, j, dir, &d);
218   -
219 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 342 return 0;
222 343 }
... ...