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 | 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 | } | ... | ... |