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