Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
778 | gluk | 1 | /* |
2 | Just Clicks v0.6 |
||
3 | Copyright (C) 2008 Leency & Veliant |
||
4 | Clickomania v0.3 |
||
5 | Copyright (C) 2005 Александр Мушиков aka Olaf |
||
6 | Compiled by C--Sphinx v0.239 b26 |
||
7 | */ |
||
8 | |||
9 | #pragma option meos |
||
10 | #jumptomain NONE |
||
11 | #include "lib\kolibri.h--" |
||
12 | #include "lib\random.h--" |
||
13 | #include "img.txt" |
||
14 | |||
15 | byte i, need_redraw, XX, YY; |
||
16 | |||
17 | struct |
||
18 | { |
||
19 | byte x; |
||
20 | byte y; |
||
21 | byte button_id; |
||
22 | byte mark; |
||
23 | dword color; |
||
24 | }matrix[8*8]; |
||
25 | |||
26 | |||
27 | |||
28 | void destroy_button(dword ID) |
||
29 | { |
||
30 | IF ((matrix[ID-8].color == matrix[ID].color)&&(matrix[ID-8].mark!=1)){ |
||
31 | matrix[ID-8].mark=1; |
||
32 | need_redraw=1; |
||
33 | destroy_button(ID-8); |
||
34 | } |
||
35 | IF ((matrix[ID+8].color == matrix[ID].color)&&(matrix[ID+8].mark!=1)){ |
||
36 | matrix[ID+8].mark=1; |
||
37 | need_redraw=1; |
||
38 | destroy_button(ID+8); |
||
39 | } |
||
40 | IF ((ID!=0)&&(ID!=8)&&(ID!=16)&&(ID!=24)&&(ID!=32)&&(ID!=40)&&(ID!=48)&&(ID!=56)) |
||
41 | IF ((matrix[ID-1].color == matrix[ID].color)&&(matrix[ID-1].mark!=1)){ |
||
42 | matrix[ID-1].mark=1; |
||
43 | need_redraw=1; |
||
44 | destroy_button(ID-1); |
||
45 | } |
||
46 | IF ((ID!=7)&&(ID!=15)&&(ID!=23)&&(ID!=31)&&(ID!=39)&&(ID!=47)&&(ID!=55)&&(ID!=63)) |
||
47 | IF ((matrix[ID+1].color == matrix[ID].color)&&(matrix[ID+1].mark!=1)){ |
||
48 | matrix[ID+1].mark=1; |
||
49 | need_redraw=1; |
||
50 | destroy_button(ID+1); |
||
51 | } |
||
52 | IF (matrix[ID].x |
||
53 | IF (matrix[ID].y>YY){YY=matrix[ID].y; IF (matrix[ID].x |
||
54 | } |
||
55 | |||
56 | void shift_bars(byte AA, BB) |
||
57 | byte id_curr,id_next,bz; |
||
58 | { |
||
59 | for (j=AA;j<8;j++) for (i=BB; i>0; i--) |
||
60 | { |
||
61 | id_curr=i*8+j; |
||
62 | bz=i-1; |
||
63 | _HH: |
||
64 | id_next=bz*8+j; |
||
65 | IF (matrix[id_curr].mark == 1) |
||
66 | IF (bz>0)&&(matrix[id_next].mark == 1) {bz--; GOTO _HH;} |
||
67 | ELSE IF (matrix[id_next].mark == 0) |
||
68 | { |
||
69 | matrix[id_curr].color=matrix[id_next].color; |
||
70 | matrix[id_curr].mark=matrix[id_next].mark; |
||
71 | matrix[id_next].mark=1; |
||
72 | } |
||
73 | } |
||
74 | } |
||
75 | |||
76 | byte count_blocks() |
||
77 | { |
||
78 | byte kol_vo=0; |
||
79 | FOR (i=0;i<8;i++) FOR (j=0;j<8;j++) IF (matrix[j*8+i].mark==0) kol_vo++; |
||
80 | return kol_vo; |
||
81 | } |
||
82 | |||
83 | |||
84 | byte check_for_end () |
||
85 | byte id_next_two, id_next_one, crr; |
||
86 | { |
||
87 | for (j=0; j<8; j++) for (i=0; i<8; i++) |
||
88 | { |
||
89 | crr=j*8+i; |
||
90 | id_next_one=crr+1; |
||
91 | id_next_two=j+1*8+i; |
||
92 | IF (matrix[crr].color==matrix[id_next_one].color)&&(matrix[crr].mark==0)&&(matrix[id_next_one].mark==0) return 0; |
||
93 | IF (matrix[crr].color==matrix[id_next_two].color)&&(matrix[crr].mark==0)&&(matrix[id_next_two].mark==0) return 0; |
||
94 | } |
||
95 | return 1; |
||
96 | } |
||
97 | |||
98 | void move_it () |
||
99 | byte but_id_curr,but_id_next, count, x; |
||
100 | { |
||
101 | for (x=0;x<8;x++) |
||
102 | { |
||
103 | count = 0; |
||
104 | FOR (i=0;i<8;i++) IF (matrix[i*8+x].mark==1) count++; |
||
105 | if (count == 8) for (i=0;i<8;i++) |
||
106 | { |
||
107 | XX=x; |
||
108 | WHILE (XX<7) |
||
109 | { |
||
110 | but_id_curr=i*8+XX; |
||
111 | but_id_next=i*8+XX+1; |
||
112 | matrix[but_id_curr].mark=matrix[but_id_next].mark; |
||
113 | matrix[but_id_curr].color=matrix[but_id_next].color; |
||
114 | matrix[but_id_next].mark=1; |
||
115 | IF (XX+1 == 7) matrix[but_id_next].mark=1; |
||
116 | XX++; |
||
117 | } |
||
118 | } |
||
119 | } |
||
120 | } |
||
121 | |||
122 | |||
123 | void main() |
||
124 | { dword id; |
||
125 | randomize(); |
||
126 | skin_width = GetSkinWidth(); |
||
127 | ReDraw_Blocks(1); |
||
128 | loop() |
||
129 | { |
||
130 | switch(WaitEvent()) |
||
131 | { |
||
132 | CASE evButton: |
||
133 | id=GetButtonID(); |
||
134 | IF (id==600) {ExitProcess(); break;} |
||
135 | ELSE IF (id==500) {ReDraw_Blocks(1);break;} |
||
136 | ELSE { |
||
137 | destroy_button(id); |
||
138 | IF (XX!=9)&&(need_redraw==1) |
||
139 | { |
||
140 | shift_bars(XX,YY); |
||
141 | IF (YY == 7) {move_it();move_it();} |
||
142 | XX=9; |
||
143 | YY=0; |
||
144 | ReDraw_Blocks(0); |
||
145 | } |
||
146 | break; |
||
147 | } |
||
148 | case evKey: IF (GetKey()==051) ReDraw_Blocks(1); break;//New game |
||
149 | case evReDraw: draw_window(); break; |
||
150 | } |
||
151 | } |
||
152 | ExitProcess(); |
||
153 | } |
||
154 | |||
155 | void ReDraw_Blocks(dword newgame) |
||
156 | { |
||
157 | dword num=0, y; |
||
158 | y=skin_width; |
||
159 | for (i=0;i<8;i++) |
||
160 | { |
||
161 | for (j=0;j<8;j++) |
||
162 | { |
||
163 | IF (newgame == 1) |
||
164 | { |
||
165 | matrix[num].mark=0; |
||
166 | XX=9; YY=0; |
||
167 | matrix[num].color = random(5)+1; |
||
168 | } |
||
169 | DefineButton(1,1,1,1,i*8+j+BT_DEL,1); |
||
170 | matrix[num].x=j; |
||
171 | matrix[num].y=i; |
||
172 | IF (matrix[num].mark==0) |
||
173 | { |
||
174 | DefineButton(j*21+5,y-22, 20, 20, num+BT_HIDE, matrix[num].color); |
||
175 | PutImage(matrix[num].color-1*21*21*3+#img,21,21,j*21+5,y-22); |
||
176 | } ELSE DrawBar(j*21+5,y-22,21,21, 0xB2B4BF); |
||
177 | num++; |
||
178 | } |
||
179 | y=y+21; |
||
180 | } |
||
181 | EDI = 0x00E4DFE1; //цвет панели |
||
182 | IF (check_for_end()==1) WriteText(95,178,0xC0,0x000000,"Результат:",10); //184 |
||
183 | ELSE WriteText(95,178,0xC0,0x000000," Осталось:",10); |
||
184 | WriteText(155,178,0xC0,0x000000,IntToStr(count_blocks()),0); //Блоков осталось |
||
185 | IF (count_blocks()<10) DrawBar(161,178,6,8,0xE4DFE1); |
||
186 | need_redraw=0; |
||
187 | } |
||
188 | |||
189 | void draw_window() |
||
190 | { |
||
191 | WindowRedrawStatus(1); |
||
192 | DefineAndDrawWindow(300,176,177,201+skin_width,0x04,0x00B2B4BF,0,0,0); |
||
193 | DefineButton(155,2-skin_width,18,18,600+BT_HIDE+BT_NOFRAME,0x0866CC00); //кнопка закрытия |
||
194 | DrawTitle("Just Clicks v0.6 L&V"); |
||
195 | DrawBar(5,168,168,29,0xE4DFE1); //поле снизу |
||
196 | DrawFlatButton(9,172,84,19,500,0xE4DFE1); //New E4DFE1 |
||
197 | WriteText(14,178,0x80,0,"New game (F2) ",14); |
||
198 | //WriteText(95,172,0x80,0," Уровень:01",10); //Уровень |
||
199 | ReDraw_Blocks(0); |
||
200 | WindowRedrawStatus(2); |
||
201 | } |
||
202 | |||
203 | stop:10)>8;j++) |