Subversion Repositories Kolibri OS

Rev

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].xYY) YY=matrix[ID].y;}
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: