Commit 3823fa4b6251e30d3f92da5396757c5d28065d21
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,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 | } |