1 #include "xtama_flush.h"
2 
tama_grow(int statemask[8][12])3 int tama_grow( int  statemask[8][12] )
4 {
5   int values , i ,ii, j , k , count = 0 , count2 = 0 ;
6   int miniball[8][12] ;
7   XGCValues gcval ;
8   GC gc ;
9   char numbuf[3] ;
10 
11   gc = DefaultGC(dpy, DefaultScreen(dpy));
12 
13 
14   values =  GCTileStipXOrigin|GCTileStipYOrigin |
15     GCClipXOrigin|GCClipYOrigin| GCTile | GCClipMask ;
16 
17   for (i = 0 ; i < 12 ; i ++ )
18     for ( j = 0 ; j < 8 ; j ++ )
19       miniball[j][i] = 0 ;
20 
21   for ( i = 0 ; i < 12 ; i ++ )/* ���व��뤿�ޤ�ޥ������� */
22     for ( j = 0 ; j < 8 ; j ++ )
23       if ( statemask[j][i] ) /* �ä��뤿�ޤλ� �� */
24 	{
25 	  if ( j != 0 && map[ j - 1 ][ i ] > 7 )
26 	    miniball[ j - 1 ][ i ] = True ;
27 
28 	  if ( j != 7 && map[ j + 1 ][ i ] > 7 )
29 	    miniball[ j + 1 ][ i ] = True ;
30 
31 	  if ( i != 0 && map[ j ][ i - 1 ] > 7 )
32 	    miniball[ j ][ i - 1 ] = True ;
33 
34 	  if ( i != 11 && map[ j ][ i + 1 ] > 7 )
35 	    miniball[ j ][ i + 1 ] = True ;
36 	}
37 
38   for ( i = 0 ; i < 12 ; i ++ )
39     for ( j = 0 ; j < 8 ; j ++ )
40       {
41 	if ( miniball[j][i] )  /* �ޥ������줿�������� */
42 	  count2 ++ ;
43 	if ( statemask[j][i] )  /* �ä���֤��ޡפο� */
44 	  count ++ ;
45       }
46 
47   for ( i = 0 ; i < 4 ; i ++ )
48     XCopyArea( dpy , back , spa[i] , gc , 0 , 0 , 320 , 480 , 0 , 0 ) ;
49 
50   if ( count > erase ) {
51     for ( i = 0 ; i < 12 ; i ++ )
52       for ( j = 0 ; j < 8 ; j ++ )
53 	if ( statemask[j][i] )
54 	  {
55 	    gcval.ts_x_origin = gcval.clip_x_origin = j * 40 - 20 ;
56 	    gcval.ts_y_origin = gcval.clip_y_origin = 440 - i * 40 - 20 ;
57 
58 	    for ( ii = 0 ; ii < 3 ; ii ++ ){
59 	      gcval.tile = pdemo[ii] ;
60 	      gcval.clip_mask = pdemo_mask[ii] ;
61 	      XChangeGC( dpy , gc3 , values , &gcval) ;
62 	      XFillRectangle( dpy , spa[ii] , gc3 ,
63 			     j * 40 -20  , 440 - i * 40 - 20 , 80 , 80  ) ;
64 	    }
65 	  }
66     if ( Dairensa > 1 ){
67       gcval.foreground = iro[Dairensa%12] ;
68       gcval.fill_style = FillStippled ;
69       values = GCStipple | GCClipMask | GCTileStipXOrigin|GCTileStipYOrigin |
70 	GCClipXOrigin|GCClipYOrigin |GCFillStyle | GCForeground;
71 
72       for ( i = 0 ; i < 3 ; i ++ ){
73 	sprintf( numbuf , "%d", Dairensa ) ;
74 
75 	for ( j = 0 ; j < strlen( numbuf ) ; j ++ ){
76 	  k = numbuf[j] - '0' ;
77 	  gcval.stipple = gcval.clip_mask = number[k] ;
78 	  gcval.ts_y_origin = gcval.clip_y_origin = 130 ;
79 	  gcval.ts_x_origin = gcval.clip_x_origin =
80 	    180 - 96 * ( strlen(numbuf) - j ) ;
81 
82 	  XChangeGC( dpy , gc3 , values , &gcval) ;
83 	  XFillRectangle( dpy , spa[i] , gc3 , gcval.ts_x_origin  , 130 , 96, 80 ) ;
84 	}
85 	for ( j = 0 ; j < 2 ; j ++ ){
86 	  gcval.stipple = gcval.clip_mask = number[10+j] ;
87 	  gcval.ts_y_origin = gcval.clip_y_origin = 210 ;
88 	  gcval.ts_x_origin = gcval.clip_x_origin = 130 + 96 * j  ;
89 
90 	  XChangeGC( dpy , gc3 , values , &gcval) ;
91 	  XFillRectangle( dpy , spa[i] , gc3 , gcval.ts_x_origin  , 210 , 96, 80 ) ;
92 	}
93       }
94       gcval.fill_style = FillTiled ;
95       XChangeGC( dpy , gc3 ,GCFillStyle,&gcval ) ;
96     }
97     XSync( dpy , 0 ) ;
98 
99     for ( i = 0 ; i < 15 ; i ++ ){
100       XCopyArea( dpy , spa[i%3] , back , gc , 0 , 0 , 320 , 480 , 0 , 0 ) ;
101       XSync( dpy , 0 ) ;
102       timer(30000);
103     }
104 
105     XCopyArea( dpy , spa[3] , back , gc , 0 , 0 , 320 , 480 , 0 , 0 ) ;
106     XSync( dpy , 0 ) ;
107 
108 
109     if ( count2 > 0 )
110       count2 = tama_animation( miniball , KAITOU ) ;
111 
112     for ( i = 0 ; i < 12 ; i ++ )
113       for ( j = 0 ; j < 8 ; j ++ )
114 	if ( statemask[j][i] )
115 	  {
116 	    XClearArea( dpy , back , j * 40 , 440 - i * 40 , 40 , 40 , 0) ;
117 	    map[j][i] = 0 ;
118 	      XSync( dpy , 0 ) ;
119 	  }
120     return count + count2 / 2 ;
121   }
122 
123   return 0 ;
124 
125 }
126 
tama_war(int x1,int ty1,int x2,int ty2,int color1,int color2)127 void tama_war(int x1 , int ty1 ,int x2 ,int ty2 ,int  color1 ,int color2)
128 {
129   int y1 , y2 , i , j , values , sw;
130   int statemask[8][12] ;
131   XGCValues gcval ;
132   GC gc ;
133 
134   gc = DefaultGC(dpy, DefaultScreen(dpy));
135 
136 
137   values =  GCTileStipXOrigin|GCTileStipYOrigin |
138     GCClipXOrigin|GCClipYOrigin| GCTile | GCClipMask ;
139 
140   y1 = (int)ty1 / 4;
141   y2 = (int)ty2 / 4;
142 
143   sw = ( color1 == 5 );
144 
145   for ( i = 0 ; i < 12 ; i ++ )
146     for ( j = 0 ; j < 8 ; j ++ )
147       statemask[j][i] = 0 ;
148 
149   for ( i = -1 ; i < 2 ; i ++ )
150     for ( j = -1 ; j < 2 ; j ++ )
151       {
152 	if ( sw )
153 	  if (( x1 + j > -1 ) && ( x1 + j < 8 ) &&
154 	    ( y1 + i > -1 ) && ( y1 + i < 12 ))
155 	    if (( sw && map[x1 + j][y1 + i] > 7) ||
156 		( !sw && map[x1 + j][y1 + i] < 6 && map[x1 + j][y1 + i]))
157 	      statemask[ x1 + j ][ y1 + i ] = True ;
158 
159 	if (( x2 + j > -1 ) && ( x2 + j < 8 ) &&
160 	    ( y2 + i > -1 ) && ( y2 + i < 12 ))
161 	  if ( (sw && map[x2 + j][y2 + i] > 7 )||
162 	      ( !sw && map[x2 + j][y2 + i] < 6 && map[x2 + j][y2 + i] ))
163 	    statemask[x2+j][y2+i] = True ;
164       }
165 
166   for ( i = 0 ; i < 3 ; i ++ )
167     XCopyArea( dpy , back , spa[i] , gc , 0 , 0 , 320 , 480 , 0 , 0 ) ;
168 
169   if ( sw )
170     {
171       gcval.ts_x_origin = gcval.clip_x_origin = x1 * 40 - 30 ;
172       gcval.ts_y_origin = gcval.clip_y_origin = 440 - y1 * 40 - 30 ;
173       gcval.tile = effect[0] ;
174       gcval.clip_mask = effect[1] ;
175       XChangeGC( dpy , gc3 , values , &gcval) ;
176       XFillRectangle( dpy , spa[0] , gc3 , x1 * 40 -30  , 440 - y1 * 40 - 30 , 100 , 100  ) ;
177 
178       gcval.ts_x_origin = gcval.clip_x_origin = x2 * 40 - 30 ;
179       gcval.ts_y_origin = gcval.clip_y_origin = 440 - y2 * 40 - 30 ;
180       XChangeGC( dpy , gc3 , values , &gcval) ;
181       XFillRectangle( dpy , spa[1] , gc3 , x2 * 40 -30  , 440 - y2 * 40 - 30 , 100 , 100  ) ;
182 
183       XSync( dpy , 0 ) ;
184 
185       for ( i = 0 ; i < 15 ; i ++ )
186 	{
187 	  XCopyArea( dpy , spa[i%3] , back , gc , 0 , 0 , 320 , 480 , 0 , 0 ) ;
188       	  XSync( dpy , 0 ) ;
189 	  timer( 7000 ) ;
190 	}
191 
192     }
193 
194   else
195     {
196       gcval.ts_x_origin = gcval.clip_x_origin = x2 * 40 - 30 ;
197       gcval.ts_y_origin = gcval.clip_y_origin = 440 - y2 * 40 - 30 ;
198       gcval.tile = effect[2] ;
199       gcval.clip_mask = effect[3] ;
200       XChangeGC( dpy , gc3 , values , &gcval) ;
201       XFillRectangle( dpy , spa[0] , gc3 , x2 * 40 -30  , 440 - y2 * 40 - 30 , 100 , 100  ) ;
202       for ( i = 0 ; i < 20 ; i ++ )
203 	{
204 	  XCopyArea( dpy , spa[i%2] , back , gc , 0 , 0 , 320 , 480 , 0 , 0 ) ;
205 	  XSync( dpy , 0 ) ;
206 	  timer( 5000 ) ;
207 	}
208     }
209 
210   if ( sw )
211     tama_animation ( statemask , KAITOU ) ;
212   else tama_animation ( statemask , REITOU ) ;
213 
214   if (sw){
215     XClearArea( dpy , back , x1 * 40 , 440 - y1 * 40 , 40 , 40 , 0) ;
216     map[x1][y1] = 0 ;
217   }
218   XClearArea( dpy , back , x2 * 40 , 440 - y2 * 40 , 40 , 40 , 0) ;
219   map[x2][y2] = 0 ;
220   XSync( dpy , 0 ) ;
221 
222   tama_scan( 0 ) ;
223 
224 
225 }
226 
tama_animation(int statemask[8][12],int sw)227 int tama_animation( int statemask[8][12] , int sw )
228 {
229   int values , i , j , r , color , count = 0  ;
230   XGCValues gcval ;
231 
232   for ( r = ( sw ? 0 : 4 )  ; ( sw ? ( r < 5 ) : ( r > -1 )) ;
233        (sw ? r ++ : r -- ))
234     {
235       for ( i = 0 ; i < 12 ; i ++ )
236 	for ( j = 0 ; j < 8 ; j ++ )
237 	  if ( statemask[j][i] == True )
238 	    {
239 	      color =  map[j][i]  + ( sw ? - 7 : 0 ) ;
240 
241 	      values =  GCTileStipXOrigin|GCTileStipYOrigin |
242 		GCClipXOrigin|GCClipYOrigin| GCTile | GCClipMask ;
243 
244 	      gcval.ts_x_origin = gcval.clip_x_origin = j * 40 ;
245 	      gcval.ts_y_origin = gcval.clip_y_origin = 440 - i * 40 ;
246 	      gcval.tile = animation[color - 1][r] ;
247 	      gcval.clip_mask = animation_mask[r] ;
248 	      XChangeGC( dpy , gc3 , values , &gcval) ;
249 
250 	      XClearArea( dpy , back , j * 40 , 440 - i * 40 , 40 , 40 , 0 ) ;
251 	      XFillRectangle( dpy , back , gc3 , j * 40  , 440 - i * 40 , 40 , 40  ) ;
252 	      XSync( dpy , 0 ) ;
253 	      count ++ ;
254 
255 	      if (( r == 4 && sw == KAITOU ) || (r == 0 && sw ==REITOU ))
256 		tama_kaitou( j , i , color  , sw ) ;
257 	    }
258       timer( 50000 - count * 1000) ;
259     }
260 
261   return count ;
262 }
263 
264