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 | 48 | return d; |
49 | 49 | } |
50 | 50 | |
51 | +//fonction d'affichage d'un damier d donné | |
51 | 52 | void affichage(damier d){ |
52 | 53 | int i,j; |
53 | 54 | for (i=0;i<N;i++){ |
... | ... | @@ -69,6 +70,10 @@ void affichage(damier d){ |
69 | 70 | } |
70 | 71 | } |
71 | 72 | |
73 | + | |
74 | + | |
75 | + | |
76 | + | |
72 | 77 | /* dir : Donnée (donne la direction voulu par le joueur) |
73 | 78 | i,j : Données,indice de ligne et de colonne du pion qu'on veut déplacer |
74 | 79 | d: D/R |
... | ... | @@ -78,27 +83,141 @@ void dep(int i,int j,int dir,damier *d){ |
78 | 83 | int temp; |
79 | 84 | i=N-i; |
80 | 85 | j=j-1; |
86 | + | |
81 | 87 | if (dir==1){ |
82 | - while ((i>=0) && ((d->tab[i][j])!=empty)){ | |
88 | + while ((i>=1) && ((d->tab[i-1][j])==empty)){ | |
83 | 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 | 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 | 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 | 221 | return 0; |
103 | 222 | } |
104 | 223 | ... | ... |