1 #include "xisola.h"
2
affichage(val,tableau)3 void affichage(val,tableau)
4
5 int val;
6 Widget tableau;
7
8 {
9 Arg ar[10];
10
11 XtSetArg(ar[0],XtNbitmap,pixtab[val]);
12 XtSetValues(tableau,ar,1);
13
14 };
15
single(w,client_data,call_data)16 void single(w,client_data,call_data)
17 Widget w;
18 XtPointer client_data,call_data;
19 {
20 is_single=!(is_single);
21 if (is_single) {
22 XtSetArg(ar[0],XtNlabel,"SINGLE");
23 } else {
24 XtSetArg(ar[0],XtNlabel," TWO ");
25 };
26 XtSetValues(wsingle,ar,1);
27 };
28
29
quit(w,client_data,call_data)30 void quit(w,client_data,call_data)
31 Widget w;
32 XtPointer client_data,call_data;
33 {
34 exit(0);
35 };
36
compuplay(w,client_data,call_data)37 void compuplay(w,client_data,call_data)
38 Widget w;
39 XtPointer client_data,call_data;
40 {
41 int mi,mj,dump,di,dj,ii,jj;
42
43 if (player)
44 {
45 mi=white_i;
46 mj=white_j;
47 di=black_i;
48 dj=black_j;
49 }
50 else
51 {
52 di=white_i;
53 dj=white_j;
54 mi=black_i;
55 mj=black_j;
56 };
57 if (liberte(play_board,mi,mj)&&mode&&(!the_end))/* on ne joue que si on peut */
58 { /* et qu'on est en phase move */
59 play_board[mi][mj]=0; /* et si the_end est faux */
60 dump=move(play_board,mi,mj); /* mouvement du pion */
61 affichage(0,tabl[mi][mj]);
62 jj=dump%10;
63 ii=(dump-jj)/10;
64 if (!play_board[ii][jj])
65 {
66 mi=ii;
67 mj=jj;
68 };
69 play_board[mi][mj]=3-player;
70 affichage(play_board[mi][mj],tabl[mi][mj]);
71
72 dump=move(play_board,di,dj); /* destruction d'une case */
73 dj=dump%10;
74 di=(dump-dj)/10;
75 play_board[di][dj]=1;
76 affichage(play_board[di][dj],tabl[di][dj]);
77 if (player)
78 {
79 white_i=mi;
80 white_j=mj;
81 }
82 else
83 {
84 black_i=mi;
85 black_j=mj;
86 };
87 player=!player;
88 };
89
90 if (player)
91 {
92 XtSetArg(ar[0],XtNlabel,"it's you to play,white...");
93 }
94 else
95 {
96 XtSetArg(ar[0],XtNlabel,"it's you to play,black...");
97 };
98 XtSetValues(wmesg,ar,1);
99
100 if (!(liberte(play_board,white_i,white_j)))
101 {
102 XtSetArg(ar[0],XtNlabel," BLACK IS THE WINNER !!! ");
103 XtSetValues(wmesg,ar,1);
104 XtSetArg(ar[0],XtNlabel," GAME OVER ");
105 XtSetValues(wmode,ar,1);
106 the_end=1;
107 };
108
109 if (!(liberte(play_board,black_i,black_j)))
110 if (liberte(play_board,white_i,white_j))
111 {
112 XtSetArg(ar[0],XtNlabel," WHITE IS THE WINNER !!! ");
113 XtSetValues(wmesg,ar,1);
114 XtSetArg(ar[0],XtNlabel," GAME OVER ");
115 XtSetValues(wmode,ar,1);
116 the_end=1;
117 }
118 else
119 {
120 XtSetArg(ar[0],XtNlabel," A DRAW ....... ");
121 XtSetValues(wmesg,ar,1);
122 XtSetArg(ar[0],XtNlabel," GAME OVER ");
123 XtSetValues(wmode,ar,1);
124 the_end=1;
125 };
126 };
127
play(w,client_data,call_data)128 void play(w,client_data,call_data)
129 Widget w;
130 XtPointer client_data,call_data;
131 {
132 int ii,jj,dump,di,dj,ok;
133
134 dump= (int) client_data;
135 jj= dump % 10;
136 ii= (dump-jj)/10;
137
138 ok=0;
139 if (mode)
140 {
141 if (player)
142 {
143 if (!(abs(ii-white_i)/2+abs(jj-white_j)/2)&&(!(play_board[ii][jj]))&&(!((ii==white_i)&&(jj==white_j))))
144 {
145 play_board[white_i][white_j]=0;
146 affichage(0,tabl[white_i][white_j]);
147 white_i=ii;
148 white_j=jj;
149 play_board[ii][jj]=2;
150 affichage(2,tabl[white_i][white_j]);
151 mode=!mode;
152 XtSetArg(ar[0],XtNlabel,"destroy phase ");
153 XtSetValues(wmode,ar,1);
154 };
155 }
156 else
157 {
158 if (!(abs(ii-black_i)/2+abs(jj-black_j)/2)&&(!(play_board[ii][jj]))&&(!((ii==black_i)&&(jj==black_j))))
159 {
160 play_board[black_i][black_j]=0;
161 affichage(0,tabl[black_i][black_j]);
162 black_i=ii;
163 black_j=jj;
164 play_board[ii][jj]=2;
165 affichage(3,tabl[black_i][black_j]);
166 mode=!mode;
167 XtSetArg(ar[0],XtNlabel,"destroy phase ");
168 XtSetValues(wmode,ar,1);
169 };
170 };
171 }
172 else
173 {
174 if (!(play_board[ii][jj]))
175 {
176 play_board[ii][jj]=1;
177 affichage(1,tabl[ii][jj]);
178 mode=!mode;
179 player=!player;
180 XtSetArg(ar[0],XtNlabel,"movement phase");
181 XtSetValues(wmode,ar,1);
182 if (player)
183 {
184 XtSetArg(ar[0],XtNlabel,"it's you to play,white...");
185 }
186 else
187 {
188 XtSetArg(ar[0],XtNlabel,"it's you to play,black...");
189 };
190 XtSetValues(wmesg,ar,1);
191 ok=1;
192 };
193 };
194 if (!(liberte(play_board,white_i,white_j)))
195 {
196 XtSetArg(ar[0],XtNlabel," BLACK IS THE WINNER !!! ");
197 XtSetValues(wmesg,ar,1);
198 XtSetArg(ar[0],XtNlabel," GAME OVER ");
199 XtSetValues(wmode,ar,1);
200 the_end=1;
201 };
202
203 if (!(liberte(play_board,black_i,black_j)))
204 if (liberte(play_board,white_i,white_j))
205 {
206 XtSetArg(ar[0],XtNlabel," WHITE IS THE WINNER !!! ");
207 XtSetValues(wmesg,ar,1);
208 XtSetArg(ar[0],XtNlabel," GAME OVER ");
209 XtSetValues(wmode,ar,1);
210 the_end=1;
211 }
212 else
213 {
214 XtSetArg(ar[0],XtNlabel," A DRAW ....... ");
215 XtSetValues(wmesg,ar,1);
216 XtSetArg(ar[0],XtNlabel," GAME OVER ");
217 XtSetValues(wmode,ar,1);
218 the_end=1;
219 };
220
221 if ((!the_end)&&is_single&&ok)
222 {
223 compuplay(w,client_data,call_data);
224 };
225 };
226
reset(w,client_data,call_data)227 void reset(w,client_data,call_data)
228 Widget w;
229 XtPointer client_data,call_data;
230 {
231 int i,j;
232
233 for(i=1;i<=8;i++)
234 for(j=1;j<=6;j++)
235 {
236 XtSetArg(args[0],XtNbitmap,pixtab[0]);
237 XtSetValues(tabl[i][j],args,1);
238 };
239
240 XtSetArg(args[0],XtNbitmap,pixtab[2]);
241 XtSetValues(tabl[1][3],args,1);
242
243 XtSetArg(args[0],XtNbitmap,pixtab[3]);
244 XtSetValues(tabl[8][4],args,1);
245
246 for(i=0;i<8;i++)
247 for(j=0;j<8;j++)
248 play_board[i][j]=0;
249
250 for(i=0;i<10;i++)
251 {
252 play_board[i][0]=1;
253 play_board[i][7]=1;
254 };
255
256 for(i=0;i<8;i++)
257 {
258 play_board[0][i]=1;
259 play_board[9][i]=1;
260 };
261
262 player=1;
263 mode=1;
264 the_end=0;
265 white_i=1;
266 white_j=3;
267 black_i=8;
268 black_j=4;
269 play_board[1][3]=2;
270 play_board[8][4]=3;
271
272 XtSetArg(ar[0],XtNlabel,"movement phase");
273 XtSetValues(wmode,ar,1);
274 XtSetArg(ar[0],XtNlabel,"it's you to play,white...");
275 XtSetValues(wmesg,ar,1);
276 };
277
278