Commit 0a50320e8bd1ddb84aa25d200131912f9e9d6a74
1 parent
88349bf1
4e dépôt
Showing
1 changed file
with
128 additions
and
9 deletions
Show diff stats
neutron.c
@@ -48,6 +48,7 @@ damier init(){ | @@ -48,6 +48,7 @@ damier init(){ | ||
48 | return d; | 48 | return d; |
49 | } | 49 | } |
50 | 50 | ||
51 | +//fonction d'affichage d'un damier d donné | ||
51 | void affichage(damier d){ | 52 | void affichage(damier d){ |
52 | int i,j; | 53 | int i,j; |
53 | for (i=0;i<N;i++){ | 54 | for (i=0;i<N;i++){ |
@@ -69,6 +70,10 @@ void affichage(damier d){ | @@ -69,6 +70,10 @@ void affichage(damier d){ | ||
69 | } | 70 | } |
70 | } | 71 | } |
71 | 72 | ||
73 | + | ||
74 | + | ||
75 | + | ||
76 | + | ||
72 | /* dir : Donnée (donne la direction voulu par le joueur) | 77 | /* dir : Donnée (donne la direction voulu par le joueur) |
73 | i,j : Données,indice de ligne et de colonne du pion qu'on veut déplacer | 78 | i,j : Données,indice de ligne et de colonne du pion qu'on veut déplacer |
74 | d: D/R | 79 | d: D/R |
@@ -78,27 +83,141 @@ void dep(int i,int j,int dir,damier *d){ | @@ -78,27 +83,141 @@ void dep(int i,int j,int dir,damier *d){ | ||
78 | int temp; | 83 | int temp; |
79 | i=N-i; | 84 | i=N-i; |
80 | j=j-1; | 85 | j=j-1; |
86 | + | ||
81 | if (dir==1){ | 87 | if (dir==1){ |
82 | - while ((i>=0) && ((d->tab[i][j])!=empty)){ | 88 | + while ((i>=1) && ((d->tab[i-1][j])==empty)){ |
83 | temp=d->tab[i][j]; | 89 | temp=d->tab[i][j]; |
84 | - (d->tab[i][j])=(d->tab[i-2][j]); | ||
85 | - (d->tab[i-2][j])=temp; | 90 | + (d->tab[i][j])=(d->tab[i-1][j]); |
91 | + (d->tab[i-1][j])=temp; | ||
86 | i=i-1; | 92 | i=i-1; |
87 | } | 93 | } |
94 | + | ||
95 | + } | ||
96 | + | ||
97 | + else if (dir==5){ | ||
98 | + while ((i<=3) && ((d->tab[i+1][j])==empty)){ | ||
99 | + temp=d->tab[i][j]; | ||
100 | + (d->tab[i][j])=(d->tab[i+1][j]); | ||
101 | + (d->tab[i+1][j])=temp; | ||
102 | + i=i+1; | ||
103 | + } | ||
88 | } | 104 | } |
89 | 105 | ||
90 | 106 | ||
107 | + | ||
108 | + else if (dir==2){ | ||
109 | + while ((i>=1) && (j<=3) && ((d->tab[i-1][j+1])==empty)){ | ||
110 | + temp=d->tab[i][j]; | ||
111 | + (d->tab[i][j])=(d->tab[i-1][j+1]); | ||
112 | + (d->tab[i-1][j+1])=temp; | ||
113 | + i=i-1; | ||
114 | + j=j+1; | ||
115 | + } | ||
116 | + } | ||
117 | + | ||
118 | + else if (dir==6){ | ||
119 | + while ((j>=1) && (i<=3) && ((d->tab[i+1][j-1])==empty)){ | ||
120 | + temp=d->tab[i][j]; | ||
121 | + (d->tab[i][j])=(d->tab[i+1][j-1]); | ||
122 | + (d->tab[i+1][j-1])=temp; | ||
123 | + i=i+1; | ||
124 | + j=j-1; | ||
125 | + } | ||
126 | + } | ||
127 | + | ||
128 | + else if (dir==8){ | ||
129 | + while ((j>=1) && (i>=1) && ((d->tab[i-1][j-1])==empty)){ | ||
130 | + temp=d->tab[i][j]; | ||
131 | + (d->tab[i][j])=(d->tab[i-1][j-1]); | ||
132 | + (d->tab[i-1][j-1])=temp; | ||
133 | + i=i-1; | ||
134 | + j=j-1; | ||
135 | + } | ||
136 | + } | ||
137 | + | ||
138 | + | ||
139 | + else if (dir==4){ | ||
140 | + while ((j<=3) && (i<=3) && ((d->tab[i+1][j+1])==empty)){ | ||
141 | + temp=d->tab[i][j]; | ||
142 | + (d->tab[i][j])=(d->tab[i+1][j+1]); | ||
143 | + (d->tab[i+1][j+1])=temp; | ||
144 | + i=i+1; | ||
145 | + j=j+1; | ||
146 | + } | ||
147 | + } | ||
148 | + | ||
149 | + else if (dir==7){ | ||
150 | + while ((j>=1) && ((d->tab[i][j-1])==empty)){ | ||
151 | + temp=d->tab[i][j]; | ||
152 | + (d->tab[i][j])=(d->tab[i][j-1]); | ||
153 | + (d->tab[i][j-1])=temp; | ||
154 | + j=j-1; | ||
155 | + } | ||
156 | + } | ||
157 | + | ||
158 | + else if (dir==3){ | ||
159 | + while ((j<=3) && ((d->tab[i][j+1])==empty)){ | ||
160 | + temp=d->tab[i][j]; | ||
161 | + (d->tab[i][j])=(d->tab[i][j+1]); | ||
162 | + (d->tab[i][j+1])=temp; | ||
163 | + j=j+1; | ||
164 | + } | ||
165 | + } | ||
166 | + else { printf("Déplacement inéxistant\n"); } | ||
167 | + | ||
168 | +} | ||
169 | + | ||
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){ | ||
172 | + i=N-i; | ||
173 | + j=j-1; | ||
174 | + | ||
175 | + int valide; | ||
176 | + valide=1; | ||
177 | + | ||
178 | + if(dir==8 && (d.tab[i-1][j-1]!=empty) && i==0 && j==0){ | ||
179 | + valide=0; | ||
180 | + } | ||
181 | + | ||
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; | ||
91 | } | 190 | } |
92 | 191 | ||
192 | + | ||
93 | 193 | ||
94 | int main(){ | 194 | int main(){ |
195 | + int i; //indice de ligne | ||
196 | + int j; //indice de colonne | ||
197 | + int dir; //indice de déplacement | ||
198 | + damier d; | ||
199 | + d=init(); | ||
200 | + affichage(d); | ||
201 | + printf("\n\n"); | ||
202 | + | ||
203 | + printf("Saisir l'indice de ligne et de colonne\n"); | ||
204 | + scanf("%d%d",&i,&j); | ||
205 | + | ||
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"); | ||
213 | + scanf("%d",&dir); | ||
214 | + printf("%d",dir); | ||
215 | + } | ||
216 | + | ||
217 | + dep(i, j, dir, &d); | ||
95 | 218 | ||
96 | - damier d; | ||
97 | - d=init(); | ||
98 | - affichage(d); | ||
99 | - printf("\n\n"); | ||
100 | - dep(1,1,1,&d); | ||
101 | - affichage(d); | 219 | + affichage(d); |
220 | + | ||
102 | return 0; | 221 | return 0; |
103 | } | 222 | } |
104 | 223 |