1 #include "xtama_rensa.h"
2
seek(int x,int y,int * rensa,int dir,int color)3 int seek ( int x , int y , int *rensa , int dir , int color )
4 {
5 if ( map[x][y] != color || state[x][y] != 0 )
6 return 0 ;
7
8 state[x][y] |= dir ;
9 (*rensa) ++ ;
10
11 if ( !( state[x][y] & SEEK_LEFT ))
12 {
13 if ( x > 0 )
14 seek( x - 1, y , rensa , SEEK_RIGHT , color ) ;
15 state[x][y] |= SEEK_LEFT ;
16 }
17
18 if ( !( state[x][y] & SEEK_LOWER ))
19 {
20 if ( y < 11 )
21 seek( x , y + 1 , rensa , SEEK_UPPER , color ) ;
22 state[x][y] |= SEEK_LOWER ;
23 }
24
25 if ( !( state[x][y] & SEEK_RIGHT ))
26 {
27 if ( x < 7 )
28 seek( x + 1 , y , rensa , SEEK_LEFT , color ) ;
29 state[x][y] |= SEEK_RIGHT ;
30 }
31
32 if ( !( state[x][y] & SEEK_UPPER ))
33 {
34 if ( y > 0 )
35 seek( x , y - 1 , rensa , SEEK_LOWER , color ) ;
36 state[x][y] |= SEEK_UPPER ;
37 }
38 return * rensa ;
39 }
40
41
tama_rensa(int rensa)42 void tama_rensa( int rensa )
43 {
44 int i , j , sw , count , sw2 = 0 ;
45
46 struct Tmap{
47 int x ;
48 int y ;
49 int color ;
50 int state ;
51 } tamamap[100] ;
52
53 #ifdef NET
54 if ( net ) net_map( ) ; /* ������Υޥåפ��������� */
55 #endif
56
57 Dairensa ++ ;
58
59 for ( i = 0 ; i < 12 ; i ++ )
60 for ( j = 0 ; j < 8 ; j ++ )
61 miniball[j][i] = 0 ;
62
63 sw2 = tama_grow( statemask ) ; /* 3�İʾ夯�äĤ�����ե�å��夷��
64 ͻ�����֤äƤ��� */
65
66 tama_score( sw2 * rensa ) ; /* ������������ */
67
68 for (i = 0 ; i < 12 ; i ++ )
69 for ( j = 0 ; j < 8 ; j ++ )
70 statemask[j][i] = 0 ;
71
72 count = 0 ;
73
74 for ( j = 0 ; j < 8 ; j ++ ) /* ������������ͤ�� */
75 {
76 sw = 0 ;
77 for ( i = 0 ; i < ( net ? 19 : 12 ) ; i ++ )
78 {
79 if ( !map[j][i] && map[j][ i + 1 ] )
80 sw = True ;
81 if ( sw && map[j][i] )
82 {
83 statemask[j][i] = True ;
84 tamamap[count].x = j ;
85 tamamap[count].y = i * 4 ;
86 tamamap[count].color = map[j][i] ;
87 tamamap[count].state = True ;
88 count ++ ;
89 map[j][i] = 0 ;
90 }
91 }
92 }
93
94 j = sw = count ;
95
96 if ( sw2 || j ) timer(100000) ;
97
98 while( sw )
99 {
100 sw = 0 ;
101 for ( i = 0 ; i < count ; i ++ )
102 if ( tamamap[i].state )
103 {
104 sw ++ ;
105 tamamap[i].state = tama_fall2( tamamap[i].x , &tamamap[i].y
106 , tamamap[i].color ) ;
107 }
108 }
109 if ( sw2 || j )
110 {
111 /*timer(500000 - sw2 * 2000) ;*/
112 tama_scan( rensa ) ;
113 }
114 }
115
tama_scan()116 void tama_scan()
117 {
118 int i , j , ii , jj , tmp , tmp_rensa ;
119
120 tmp_rensa = 0 ;
121
122 for ( i = 0 ; i < 12 ; i ++ )
123 for ( j = 0 ; j < 8 ; j ++ )
124 state[j][i] = statemask[j][i] = 0 ;
125
126 /* �����Ǥ� */
127
128 for ( i = 0 ; i < 12 ; i ++ )
129 for ( j = 0 ; j < 8 ; j ++ ) {
130 if ( map[j][i] ) {
131 tmp = 0 ;
132 if ( map[j][i] < 6 && statemask[j][i] == 0 )
133 if ( seek( j , i , &tmp ,0 , map[j][i] ) > erase ) {
134 for ( ii = 0 ; ii < 12 ; ii ++ )
135 for ( jj = 0 ; jj < 8 ; jj ++ ) {
136 if ( state[jj][ii] == 15 ) {
137 statemask[jj][ii] = True ;
138 rensa ++ ;
139 tmp_rensa ++ ;
140 }
141 }
142 }
143 for ( ii = 0 ; ii < 12 ; ii ++ )
144 for ( jj = 0 ; jj < 8 ; jj ++ )
145 state[jj][ii] = 0 ;
146 }
147 }
148 #ifdef NET
149 if ( net ) net_tama(tmp_rensa) ;
150 #endif
151 tama_rensa(rensa) ;
152 }
153
154
155
156
157