diff --git a/neutron.c b/neutron.c index d1f8c41..0f36bc2 100644 --- a/neutron.c +++ b/neutron.c @@ -48,6 +48,7 @@ damier init(){ return d; } +//fonction d'affichage d'un damier d donné void affichage(damier d){ int i,j; for (i=0;i=0) && ((d->tab[i][j])!=empty)){ + while ((i>=1) && ((d->tab[i-1][j])==empty)){ temp=d->tab[i][j]; - (d->tab[i][j])=(d->tab[i-2][j]); - (d->tab[i-2][j])=temp; + (d->tab[i][j])=(d->tab[i-1][j]); + (d->tab[i-1][j])=temp; i=i-1; } + + } + + else if (dir==5){ + while ((i<=3) && ((d->tab[i+1][j])==empty)){ + temp=d->tab[i][j]; + (d->tab[i][j])=(d->tab[i+1][j]); + (d->tab[i+1][j])=temp; + i=i+1; + } } + + else if (dir==2){ + while ((i>=1) && (j<=3) && ((d->tab[i-1][j+1])==empty)){ + temp=d->tab[i][j]; + (d->tab[i][j])=(d->tab[i-1][j+1]); + (d->tab[i-1][j+1])=temp; + i=i-1; + j=j+1; + } + } + + else if (dir==6){ + while ((j>=1) && (i<=3) && ((d->tab[i+1][j-1])==empty)){ + temp=d->tab[i][j]; + (d->tab[i][j])=(d->tab[i+1][j-1]); + (d->tab[i+1][j-1])=temp; + i=i+1; + j=j-1; + } + } + + else if (dir==8){ + while ((j>=1) && (i>=1) && ((d->tab[i-1][j-1])==empty)){ + temp=d->tab[i][j]; + (d->tab[i][j])=(d->tab[i-1][j-1]); + (d->tab[i-1][j-1])=temp; + i=i-1; + j=j-1; + } + } + + + else if (dir==4){ + while ((j<=3) && (i<=3) && ((d->tab[i+1][j+1])==empty)){ + temp=d->tab[i][j]; + (d->tab[i][j])=(d->tab[i+1][j+1]); + (d->tab[i+1][j+1])=temp; + i=i+1; + j=j+1; + } + } + + else if (dir==7){ + while ((j>=1) && ((d->tab[i][j-1])==empty)){ + temp=d->tab[i][j]; + (d->tab[i][j])=(d->tab[i][j-1]); + (d->tab[i][j-1])=temp; + j=j-1; + } + } + + else if (dir==3){ + while ((j<=3) && ((d->tab[i][j+1])==empty)){ + temp=d->tab[i][j]; + (d->tab[i][j])=(d->tab[i][j+1]); + (d->tab[i][j+1])=temp; + j=j+1; + } + } + else { printf("Déplacement inéxistant\n"); } + +} + +// Fonction qui renvoie 0 si le déplacement n'est pas valide et 1 sinon +int valide(int i,int j,int dir,damier d){ + i=N-i; + j=j-1; + + int valide; + valide=1; + + if(dir==8 && (d.tab[i-1][j-1]!=empty) && i==0 && j==0){ + valide=0; + } + + else if(dir==1 && i==0 && d.tab[i-1][j]!=empty){ valide=0;} + else if(dir==2 && j==4 && i==0 && d.tab[i-1][j+1]!=empty){ valide=0;} + else if(dir==3 && j==4 && d.tab[i][j+1]!=empty ){ valide=0;} + else if(dir==4 && i==4 && j==4 && d.tab[i+1][j+1]!=empty){ valide=0;} + else if(dir==5 && i==4 && d.tab[i+1][j]!=empty){ valide=0;} + else if(dir==6 && i==4 && j==0 && d.tab[i+1][j-1]!=empty){ valide=0;} + else if(dir==7 && j==0 && d.tab[i][j-1]!=empty){ valide=0;} + return valide; } + int main(){ + int i; //indice de ligne + int j; //indice de colonne + int dir; //indice de déplacement + damier d; + d=init(); + affichage(d); + printf("\n\n"); + + printf("Saisir l'indice de ligne et de colonne\n"); + scanf("%d%d",&i,&j); + + printf("Saisir le déplacement souhaité\n"); + scanf("%d",&dir); + printf("%d",dir); + + //On redemande une autre direction tant que la direction ne peut pas être faite + while (valide(i,j,dir,d)==0){ + printf("saisir un autre déplacement valide\n"); + scanf("%d",&dir); + printf("%d",dir); + } + + dep(i, j, dir, &d); - damier d; - d=init(); - affichage(d); - printf("\n\n"); - dep(1,1,1,&d); - affichage(d); + affichage(d); + return 0; } -- libgit2 0.21.2