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