Subversion Repositories Kolibri OS

Rev

Rev 2281 | Rev 2283 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2281 Rev 2282
1
//Leency 06.10.2011, Flood-it! v2.1, GPL
1
//Leency 06.10.2011, Flood-it! v2.1, GPL
2
 
2
 
3
#include "lib\kolibri.h" 
3
#include "lib\kolibri.h" 
4
#include "lib\random.h"
4
#include "lib\random.h"
5
 
5
 
6
#ifndef AUTOBUILD
6
#ifndef AUTOBUILD
7
#include "lang.h--"
7
#include "lang.h--"
8
#endif
8
#endif
9
 
9
 
10
system_colors sc;
10
system_colors sc;
11
proc_info Form;
11
proc_info Form;
12
dword stak[100]; //îêíî ïîìîùè
12
dword stak[100]; //îêíî ïîìîùè
13
 
13
 
14
//óðîâíè ñëîæíîñòè
14
//óðîâíè ñëîæíîñòè
15
int DIFFICULTY_LEV_PARAMS[]={ 28, 14, 25,  //ëåãêî
15
int DIFFICULTY_LEV_PARAMS[]={ 28, 14, 25,  //ëåãêî
16
                              17, 28, 50}; //òÿæåëî
16
                              17, 28, 50}; //òÿæåëî
17
							  
17
							  
18
//ïî-óìîë÷àíèþ "ëåãêî"
18
//ïî-óìîë÷àíèþ "ëåãêî"
19
int BLOCK_SIZE = 28; //ðàçìåð êâàäðàòèêà
19
int BLOCK_SIZE = 28; //ðàçìåð êâàäðàòèêà
20
int BLOCKS_NUM = 14; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
20
int BLOCKS_NUM = 14; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
21
int MAX_CLICKS = 25; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
21
int MAX_CLICKS = 25; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
22
 
22
 
23
int CLICKS = 0;      //ñêîëüêî õîäîâ óæå ñäåëàë èãðîê
23
int CLICKS = 0;      //ñêîëüêî õîäîâ óæå ñäåëàë èãðîê
24
 
24
 
25
#define USER_PANEL_WIDTH 119
25
#define USER_PANEL_WIDTH 119
26
 
26
 
27
//øåñòü öâåòîâ èñïîëüçóåòñÿ â èãðå äëÿ êâàäðàòèêîâ, ñåäüìîé æå (ïîñëåäíèé) äëÿ òîãî,
27
//øåñòü öâåòîâ èñïîëüçóåòñÿ â èãðå äëÿ êâàäðàòèêîâ, ñåäüìîé æå (ïîñëåäíèé) äëÿ òîãî,
28
//÷òîáû îòìåòèòü êâàäðàòèêè â ïðîöåññå çàëèâêè
28
//÷òîáû îòìåòèòü êâàäðàòèêè â ïðîöåññå çàëèâêè
29
dword FIELD_COLORS[]= {0xf18db6, 0x605ca8, 0xfddc80, 0xdc4a20, 0x46b1e2, 0x7e9d1e,   0x232323, 0};
29
dword FIELD_COLORS[]= {0xf18db6, 0x605ca8, 0xfddc80, 0xdc4a20, 0x46b1e2, 0x7e9d1e,   0x232323, 0};
30
char *BOARD_SIZES[]={ "S", "L", 0 };
30
char *BOARD_SIZES[]={ "S", "L", 0 };
31
 
31
 
32
 
32
 
33
#ifdef LANG_RUS
33
#ifdef LANG_RUS
34
	char *BUTTON_CAPTIONS[]={ " ®¢ ï  [F2]", " ®¬®éì [F1]", " ‚ë室 [Esc]", 0}; 
34
	char *BUTTON_CAPTIONS[]={ " ®¢ ï  [F2]", " ®¬®éì [F1]", " ‚ë室 [Esc]", 0}; 
35
	char CLICKS_TEXT[]=" Š«¨ª¨:   /";
35
	char CLICKS_TEXT[]=" Š«¨ª¨:   /";
36
	char LEVELS_TEXT[]="®«¥:";
36
	char LEVELS_TEXT[]="®«¥:";
37
	
37
	
38
	char HELP_WINDOW_CAPTION[]="®¬®éì";
38
	char HELP_WINDOW_CAPTION[]="®¬®éì";
39
	char *HELP_TEXT[]={	"Š ª ¨£à âì ¢® Flood-it?",
39
	char *HELP_TEXT[]={	"Š ª ¨£à âì ¢® Flood-it?",
40
	"",
40
	"",
41
	"‡ ¯®«­¨â¥ ¯®«¥ ®¤­¨¬ 梥⮬ §  ®£à ­¨ç¥­­®¥ ç¨á«® 室®¢.",
41
	"‡ ¯®«­¨â¥ ¯®«¥ ®¤­¨¬ 梥⮬ §  ®£à ­¨ç¥­­®¥ ç¨á«® 室®¢.",
42
	"ˆ£à  ­ ç¨­ ¥âáï á ¢¥àå­¥© «¥¢®© ª«¥âª¨. ‚ë¡¥à¨â¥ 梥â, ­ ¦ ¢ ­  ®¤¨­ ¨§",
42
	"ˆ£à  ­ ç¨­ ¥âáï á ¢¥àå­¥© «¥¢®© ª«¥âª¨. ‚ë¡¥à¨â¥ 梥â, ­ ¦ ¢ ­  ®¤¨­ ¨§",
43
	"ª¢ ¤à â¨ª®¢ á«¥¢ , ¨ ª«¥âª¨ ®ªà áïâáï í⨬ 梥⮬ - â ª ¢ë ¯à¨á®¥¤¨­¨â¥",
43
	"ª¢ ¤à â¨ª®¢ á«¥¢ , ¨ ª«¥âª¨ ®ªà áïâáï í⨬ 梥⮬ - â ª ¢ë ¯à¨á®¥¤¨­¨â¥",
44
	"á®á¥¤­¨¥ ª«¥âª¨ ⮩ ¦¥ ®ªà áª¨. ‡ å¢ â¨âì ¯®«¥ ­ã¦­® §  ¬¨­¨¬ «ì­®¥",
44
	"á®á¥¤­¨¥ ª«¥âª¨ ⮩ ¦¥ ®ªà áª¨. ‡ å¢ â¨âì ¯®«¥ ­ã¦­® §  ¬¨­¨¬ «ì­®¥",
45
	"ç¨á«® 室®¢. ®è £®¢ ï áâà â¥£¨ï á ¨­â¥à¥á­ë¬ ¯à¨­æ¨¯®¬ - ¨§¬¥­¨áì,",
45
	"ç¨á«® 室®¢. ®è £®¢ ï áâà â¥£¨ï á ¨­â¥à¥á­ë¬ ¯à¨­æ¨¯®¬ - ¨§¬¥­¨áì,",
46
	"çâ®¡ë ¯®¡¥¤¨âì!",
46
	"çâ®¡ë ¯®¡¥¤¨âì!",
47
	"",
47
	"",
48
	"ˆ£à âì â ª¦¥ ¬®¦­® ª« ¢¨è ¬¨:",
48
	"ˆ£à âì â ª¦¥ ¬®¦­® ª« ¢¨è ¬¨:",
49
	"[Q] [W] [E]",
49
	"[Q] [W] [E]",
50
	"[A] [S] [D]",
50
	"[A] [S] [D]",
51
	0}; 
51
	0}; 
52
#else
52
#else
53
	char *BUTTON_CAPTIONS[]={ "New Game [F2]", "Help     [F1]", "Exit    [Esc]", 0}; 
53
	char *BUTTON_CAPTIONS[]={ "New Game [F2]", "Help     [F1]", "Exit    [Esc]", 0}; 
54
	char CLICKS_TEXT[]="Clicks:   /";
54
	char CLICKS_TEXT[]="Clicks:   /";
55
	char LEVELS_TEXT[]="Board:";
55
	char LEVELS_TEXT[]="Board:";
56
	
56
	
57
	char HELP_WINDOW_CAPTION[]="Help";
57
	char HELP_WINDOW_CAPTION[]="Help";
58
	char *HELP_TEXT[]={	"How to play Flood-it?",
58
	char *HELP_TEXT[]={	"How to play Flood-it?",
59
	"",
59
	"",
60
	"Flood the whole board with one color within the allowed steps.",
60
	"Flood the whole board with one color within the allowed steps.",
61
	"You start from the top left corner and progress by selecting one",
61
	"You start from the top left corner and progress by selecting one",
62
	"of the colored buttons on the left. When you change your current area",
62
	"of the colored buttons on the left. When you change your current area",
63
	"color, every adjacent square with the same color also changes, that",
63
	"color, every adjacent square with the same color also changes, that",
64
	"way you can flood other areas of the board. Select from 3 sizes of",
64
	"way you can flood other areas of the board. Select from 3 sizes of",
65
	"the board and try to flood-it in the least amount of steps!",
65
	"the board and try to flood-it in the least amount of steps!",
66
	"Addictive and Fun!",
66
	"Addictive and Fun!",
67
	"",
67
	"",
68
	"You can also play with keyboard:",
68
	"You can also play with keyboard:",
69
	"[Q] [W] [E]",
69
	"[Q] [W] [E]",
70
	"[A] [S] [D]",
70
	"[A] [S] [D]",
71
	0}; 
71
	0}; 
72
#endif
72
#endif
73
 
73
 
74
 
74
 
75
int color_matrix[28*28]; //öâåòà äëÿ ïîëÿ ñ êâàäðàòèêàìè
75
int color_matrix[28*28]; //öâåòà äëÿ ïîëÿ ñ êâàäðàòèêàìè
76
 
76
 
77
int loose_matrix[14*14]={
77
int loose_matrix[14*14]={
78
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
78
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
79
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
79
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
80
2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 2,
80
2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 2,
81
2, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 3, 2, 2,
81
2, 3, 2, 2, 2, 3, 2, 3, 2, 2, 2, 3, 2, 2,
82
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
82
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
83
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
83
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
84
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
84
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
85
2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 2,
85
2, 3, 3, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2, 2,
86
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
86
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
87
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
87
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
88
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
88
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2,
89
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 3, 2,
89
2, 3, 2, 2, 2, 3, 2, 3, 2, 3, 2, 3, 3, 2,
90
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
90
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
91
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
91
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
92
};
92
};
93
 
93
 
94
int win_matrix[14*14]={
94
int win_matrix[14*14]={
95
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
95
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
96
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
96
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
97
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
97
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
98
4, 1, 4, 1, 4, 1, 4, 4, 4, 1, 4, 4, 1, 4,
98
4, 1, 4, 1, 4, 1, 4, 4, 4, 1, 4, 4, 1, 4,
99
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4, 1, 4,
99
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4, 1, 4,
100
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4,
100
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4,
101
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
101
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
102
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
102
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
103
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
103
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
104
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
104
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
105
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
105
4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 4, 1, 4,
106
4, 4, 1, 4, 1, 4, 4, 1, 4, 1, 4, 4, 1, 4,
106
4, 4, 1, 4, 1, 4, 4, 1, 4, 1, 4, 4, 1, 4,
107
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
107
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
108
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
108
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
109
};
109
};
110
 
110
 
111
void main()
111
void main()
112
{   
112
{   
113
	int key, id;
113
	int key, id;
114
	
114
	
115
	new_game();
115
	new_game();
116
   
116
   
117
	loop()
117
	loop()
118
	{
118
	{
119
		switch(WaitEvent()) 
119
		switch(WaitEvent()) 
120
		{
120
		{
121
			case evButton:
121
			case evButton:
122
				id = GetButtonID(); 
122
				id = GetButtonID(); 
123
				if (id==1) || (id==4) ExitProcess();
123
				IF (id==1) || (id==4) ExitProcess();
124
				if (id==2) goto _NEW_GAME_MARK;
124
				IF (id==2) goto _NEW_GAME_MARK;
125
				if (id==3) goto _HELP_MARK;
125
				IF (id==3) goto _HELP_MARK;
126
				if (id>=100) make_turn(id-100);
126
				IF (id>=100) make_turn(id-100);
127
				if (id>=10)
127
				if (id>=10)
128
				{
128
				{
129
					id=id-10*3;
129
					id=id-10*3;
130
					
130
					
131
					if (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[id]) break; //âûáðàí òîò æå ðàçìåð
131
					IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[id]) break; //âûáðàí òîò æå ðàçìåð
132
					
132
					
133
					BLOCK_SIZE = DIFFICULTY_LEV_PARAMS[id]; //ðàçìåð êâàäðàòèêà
133
					BLOCK_SIZE = DIFFICULTY_LEV_PARAMS[id]; //ðàçìåð êâàäðàòèêà
134
					BLOCKS_NUM = DIFFICULTY_LEV_PARAMS[id+1]; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
134
					BLOCKS_NUM = DIFFICULTY_LEV_PARAMS[id+1]; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
135
					MAX_CLICKS = DIFFICULTY_LEV_PARAMS[id+2]; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
135
					MAX_CLICKS = DIFFICULTY_LEV_PARAMS[id+2]; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
136
					
136
					
137
					new_game();
137
					new_game();
138
					
138
					
139
					MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14);
139
					MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14);
140
				}
140
				}
141
				break;
141
				break;
142
			case evKey:
142
			case evKey:
143
				key = GetKey();
143
				key = GetKey();
144
				if (key==027) //Escape
144
				IF (key==027) //Escape
145
					 ExitProcess();
145
					 ExitProcess();
146
				if (key==050) //F1
146
				IF (key==050) //F1
147
				{
147
				{
148
					_HELP_MARK:
148
					_HELP_MARK:
149
						CreateThread(#help,#stak); 
149
						CreateThread(#help,#stak); 
150
				}
150
				}
151
				if (key==051) //F2
151
				IF (key==051) //F2
152
				{
152
				{
153
					_NEW_GAME_MARK:
153
					_NEW_GAME_MARK:
154
						new_game();
154
						new_game();
155
						draw_clicks_num();
155
						draw_clicks_num();
156
						draw_field();
156
						draw_field();
157
				}
157
				}
158
				if (key==113) make_turn(0); //Q
158
				IF (key==113) make_turn(0); //Q
159
				if (key==119) make_turn(1); //W
159
				IF (key==119) make_turn(1); //W
160
				if (key==101) make_turn(2); //E
160
				IF (key==101) make_turn(2); //E
161
				if (key==097) make_turn(3); //A
161
				IF (key==097) make_turn(3); //A
162
				if (key==115) make_turn(4); //S
162
				IF (key==115) make_turn(4); //S
163
				if (key==100) make_turn(5); //D
163
				IF (key==100) make_turn(5); //D
164
				break;
164
				break;
165
			case evReDraw:
165
			case evReDraw:
166
				draw_window();
166
				draw_window();
167
		}
167
		}
168
	}
168
	}
169
}
169
}
170
 
170
 
171
 
171
 
172
void make_turn(int turn_id)
172
void make_turn(int turn_id)
173
{
173
{
174
	if (color_matrix[0]==turn_id) return; //åñëè öâåò ïåðâîé ôèøêè òàêîé æå, èãíîðèðóåì áåññìûñëåííûé õîä
174
	IF (color_matrix[0]==turn_id) return; //åñëè öâåò ïåðâîé ôèøêè òàêîé æå, èãíîðèðóåì áåññìûñëåííûé õîä
175
	if (CLICKS>=MAX_CLICKS) return; //åñëè èãðà çàêîí÷åíà
175
	IF (CLICKS>=MAX_CLICKS) return; //åñëè èãðà çàêîí÷åíà
176
	
176
	
177
	CLICKS++;
177
	CLICKS++;
178
	draw_clicks_num();
178
	draw_clicks_num();
179
	
179
	
180
	fill_field(turn_id);
180
	fill_field(turn_id);
181
	draw_field();
181
	draw_field();
182
	check_for_end(); //åñëè èãðà çàêîí÷åíà	
182
	check_for_end(); //åñëè èãðà çàêîí÷åíà	
183
}
183
}
184
 
184
 
185
 
185
 
186
void draw_window()
186
void draw_window()
187
{
187
{
188
	int i, j;
188
	int i, j;
189
	#define BUTTON_SIZE 28
189
	#define BUTTON_SIZE 28
190
	
190
	
191
	sc.get();
191
	sc.get();
192
		
192
		
193
	DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14, 0x74,sc.work,0,0,"Flood-it!"); 
193
	DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14, 0x74,sc.work,0,0,"Flood-it!"); 
194
	
194
	
195
	//ïðîâåðÿåì íå ñõëîïíóòî ëè îêíî â çàãîëîâîê
195
	//ïðîâåðÿåì íå ñõëîïíóòî ëè îêíî â çàãîëîâîê
196
	GetProcessInfo(#Form, SelfInfo);
196
	GetProcessInfo(#Form, SelfInfo);
197
	if (Form.height==GetSkinWidth()+3) return;
197
	IF (Form.height==GetSkinWidth()+3) return;
198
	
198
	
199
	//çàêðàøèâàåì ôîí -> óìåíüøàåò ïåðåðèñîâêó
199
	//çàêðàøèâàåì ôîí -> óìåíüøàåò ïåðåðèñîâêó
200
	for (i=0;i<=4;i++)
200
	for (i=0;i<=4;i++)
201
	{
201
	{
202
		if (i<>4)
202
		IF (i<>4)
203
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work);
203
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work);
204
		else
204
		else
205
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work_graph); //îáîäîê
205
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work_graph); //îáîäîê
206
	}
206
	}
207
	DrawBar(0,0, USER_PANEL_WIDTH-5, BLOCK_SIZE*BLOCKS_NUM+10, sc.work);
207
	DrawBar(0,0, USER_PANEL_WIDTH-5, BLOCK_SIZE*BLOCKS_NUM+10, sc.work);
208
	
208
	
209
	//êíîïî÷êè çàëèâêè
209
	//êíîïî÷êè çàëèâêè
210
	for (i=0;i<2;i++)
210
	for (i=0;i<2;i++)
211
		for (j=0;j<3;j++)
211
		for (j=0;j<3;j++)
212
			DefineButton(j*BUTTON_SIZE+17,i*BUTTON_SIZE+15,BUTTON_SIZE,BUTTON_SIZE, i*3+j+100,FIELD_COLORS[i*3+j]);
212
			DefineButton(j*BUTTON_SIZE+17,i*BUTTON_SIZE+15,BUTTON_SIZE,BUTTON_SIZE, i*3+j+100,FIELD_COLORS[i*3+j]);
213
 
213
 
214
	//êíîïî÷êè äåéñòâèé
214
	//êíîïî÷êè äåéñòâèé
215
	for (j=0;j<3;j++)
215
	for (j=0;j<3;j++)
216
	{
216
	{
217
		DefineButton(17,j*25+120, 13*6+6, 20, j+2,sc.work_button);
217
		DefineButton(17,j*25+120, 13*6+6, 20, j+2,sc.work_button);
218
		WriteText(17+4,j*25+127,0x80,sc.work_button_text,BUTTON_CAPTIONS[j],0);
218
		WriteText(17+4,j*25+127,0x80,sc.work_button_text,BUTTON_CAPTIONS[j],0);
219
	}
219
	}
220
 
220
 
221
	//êíîïî÷êè âûáîðà óðîâíÿ ñëîæíîñòè
221
	//êíîïî÷êè âûáîðà óðîâíÿ ñëîæíîñòè
222
	WriteText(17,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,sc.work_text,#LEVELS_TEXT,0);
222
	WriteText(17,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,sc.work_text,#LEVELS_TEXT,0);
223
	for (j=0;j<2;j++)
223
	for (j=0;j<2;j++)
224
	{
224
	{
225
		DefineButton(j*25+56,BLOCKS_NUM*BLOCK_SIZE-20, 20,20, j+10,sc.work_button);
225
		DefineButton(j*25+56,BLOCKS_NUM*BLOCK_SIZE-20, 20,20, j+10,sc.work_button);
226
		
226
		
227
		if (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[j*3]) EDI=0x800080;
227
		IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[j*3]) EDI=0x800080;
228
			else EDI=sc.work_button_text;
228
			else EDI=sc.work_button_text;
229
		
229
		
230
		WriteText(j*25+56+8,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
230
		WriteText(j*25+56+8,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
231
		WriteText(j*25+56+9,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
231
		WriteText(j*25+56+9,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
232
	}
232
	}
233
	
233
	
234
	draw_clicks_num();
234
	draw_clicks_num();
235
	
235
	
236
	draw_field();
236
	draw_field();
237
 
237
 
238
}
238
}
239
 
239
 
240
 
240
 
241
void new_game()
241
void new_game()
242
{
242
{
243
	int i, j;
243
	int i, j;
244
	
244
	
245
	//randomize();
245
	//randomize();
246
 
246
 
247
	CLICKS = 0;
247
	CLICKS = 0;
248
	
248
	
249
	for (i=0;i
249
	for (i=0;i
250
		for (j=0;j
250
		for (j=0;j
251
			color_matrix[i*BLOCKS_NUM+j] = random(6);
251
			color_matrix[i*BLOCKS_NUM+j] = random(6);
252
}
252
}
253
 
253
 
254
 
254
 
255
void fill_field(int new_color_id)
255
void fill_field(int new_color_id)
256
{
256
{
257
	int i=0, j=0,
257
	int i=0, j=0,
258
	old_color_id=color_matrix[0],
258
	old_color_id=color_matrix[0],
259
	restart;
259
	restart;
260
	#define MARKED 6
260
	#define MARKED 6
261
	
261
	
262
	color_matrix[0]=MARKED;
262
	color_matrix[0]=MARKED;
263
	
263
	
264
	_RESTART_MARK:
264
	_RESTART_MARK:
265
	
265
	
266
	restart=0;
266
	restart=0;
267
	
267
	
268
	for (i=0;i
268
	for (i=0;i
269
		for (j=0;j
269
		for (j=0;j
270
		{
270
		{
271
			if (color_matrix[i*BLOCKS_NUM+j]<>old_color_id) continue; //åñëè ôèøêà íå íóæíîãî öâåòà èä¸ì äàëüøå
271
			IF (color_matrix[i*BLOCKS_NUM+j]<>old_color_id) continue; //åñëè ôèøêà íå íóæíîãî öâåòà èä¸ì äàëüøå
272
			if (color_matrix[i*BLOCKS_NUM+j]==MARKED) continue; //åñëè ôèøêà óæå îòìå÷åíà, èä¸ì äàëåå
272
			IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) continue; //åñëè ôèøêà óæå îòìå÷åíà, èä¸ì äàëåå
273
			
273
			
274
			if (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì ëåâûé
274
			IF (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì ëåâûé
275
			if (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì âåðõíèé
275
			IF (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì âåðõíèé
276
			if (j
276
			IF (j
277
			if (i
277
			IF (i
278
			
278
			
279
			if (color_matrix[i*BLOCKS_NUM+j]==MARKED) restart=1; //åñëè ôèøêó îòìåòèëè, òî ïîòîì öèêë íóæíî áóäåò ïðîêðóòèòü ñíà÷àëà - ìîæ åù¸ ÷¸ îòìåòèì
279
			IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) restart=1; //åñëè ôèøêó îòìåòèëè, òî ïîòîì öèêë íóæíî áóäåò ïðîêðóòèòü ñíà÷àëà - ìîæ åù¸ ÷¸ îòìåòèì
280
		}
280
		}
281
	if (restart) goto _RESTART_MARK;
281
	IF (restart) goto _RESTART_MARK;
282
 
282
 
283
	for (i=0;i
283
	for (i=0;i
284
		for (j=0;j
284
		for (j=0;j
285
			if (color_matrix[i*BLOCKS_NUM+j]==MARKED)	color_matrix[i*BLOCKS_NUM+j]=new_color_id;
285
			IF (color_matrix[i*BLOCKS_NUM+j]==MARKED)	color_matrix[i*BLOCKS_NUM+j]=new_color_id;
286
}
286
}
287
 
287
 
288
 
288
 
289
int check_for_end()
289
int check_for_end()
290
{
290
{
291
	int i, j, ii, jj;
291
	int i, j, ii, jj;
292
 
292
 
293
	if (CLICKS>=MAX_CLICKS) //åñëè ïðîèãðûø
293
	if (CLICKS>=MAX_CLICKS) //åñëè ïðîèãðûø
294
	{
294
	{
295
		if (CLICKS==MAX_CLICKS) //âûèãðûøü íà ïîñëåäíåì õîäå
295
		IF (CLICKS==MAX_CLICKS) //âûèãðûøü íà ïîñëåäíåì õîäå
296
		{
296
		{
297
			for (i=0;i
297
			for (i=0;i
298
				for (j=0;j
298
				for (j=0;j
299
					if (color_matrix[i*BLOCKS_NUM+j]<>color_matrix[0]) goto _LOOSE_MARK;
299
					IF (color_matrix[i*BLOCKS_NUM+j]<>color_matrix[0]) goto _LOOSE_MARK;
300
			goto _WIN_MARK;
300
			goto _WIN_MARK;
301
		}
301
		}
302
		
302
		
303
		_LOOSE_MARK:
303
		_LOOSE_MARK:
304
		
304
		
305
		for (i=0;i<14;i++)
305
		for (i=0;i<14;i++)
306
			for (j=0;j<14;j++)
306
			for (j=0;j<14;j++)
307
			{
307
			{
308
				if (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0])
308
				IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0])
309
				{
309
				{
310
					ii=i;
310
					ii=i;
311
					jj=j;
311
					jj=j;
312
				}
312
				}
313
				else
313
				else
314
				{
314
				{
315
					ii=i*2;
315
					ii=i*2;
316
					jj=j*2;
316
					jj=j*2;
317
				}
317
				}
318
				color_matrix[ii*BLOCKS_NUM+jj]=loose_matrix[i*14+j];
318
				color_matrix[ii*BLOCKS_NUM+jj]=loose_matrix[i*14+j];
319
				color_matrix[ii+1*BLOCKS_NUM+jj]=loose_matrix[i*14+j];
319
				color_matrix[ii+1*BLOCKS_NUM+jj]=loose_matrix[i*14+j];
320
				color_matrix[ii*BLOCKS_NUM+jj+1]=loose_matrix[i*14+j];
320
				color_matrix[ii*BLOCKS_NUM+jj+1]=loose_matrix[i*14+j];
321
				color_matrix[ii+1*BLOCKS_NUM+jj+1]=loose_matrix[i*14+j];
321
				color_matrix[ii+1*BLOCKS_NUM+jj+1]=loose_matrix[i*14+j];
322
				draw_field();
322
				draw_field();
323
				//Pause(5);				
323
				//Pause(5);				
324
			}	
324
			}	
325
			
325
			
326
		return 1;
326
		return 1;
327
	}
327
	}
328
	
328
	
329
	for (i=0;i
329
	for (i=0;i
330
		for (j=0;j
330
		for (j=0;j
331
			if (color_matrix[i*BLOCKS_NUM+j]<>color_matrix[0]) return 0;
331
			IF (color_matrix[i*BLOCKS_NUM+j]<>color_matrix[0]) return 0;
332
 
332
 
333
	//âñ¸ ïîëå îäíîãî öâåòà è ôèøåê ìåíüøå MAX_CLICKS -> ïîáåäà
333
	//âñ¸ ïîëå îäíîãî öâåòà è ôèøåê ìåíüøå MAX_CLICKS -> ïîáåäà
334
	
334
	
335
	_WIN_MARK:
335
	_WIN_MARK:
336
	
336
	
337
	for (i=0;i<25;i++)
337
	for (i=0;i<25;i++)
338
	{
338
	{
339
		new_game();
339
		new_game();
340
		draw_field();
340
		draw_field();
341
		Pause(7);
341
		Pause(7);
342
	}
342
	}
343
 
343
 
344
	CLICKS=MAX_CLICKS;
344
	CLICKS=MAX_CLICKS;
345
	
345
	
346
	for (i=0;i<14;i++)
346
	for (i=0;i<14;i++)
347
		for (j=0;j<14;j++)
347
		for (j=0;j<14;j++)
348
		{
348
		{
349
			if (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0]) //çàëèâêà äëÿ ïîëåé ðàçíîãî ðàçìåðà ðàçíàÿ
349
			IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0]) //çàëèâêà äëÿ ïîëåé ðàçíîãî ðàçìåðà ðàçíàÿ
350
			{
350
			{
351
				ii=i;
351
				ii=i;
352
				jj=j;
352
				jj=j;
353
			}
353
			}
354
			else
354
			else
355
			{
355
			{
356
				ii=i*2;
356
				ii=i*2;
357
				jj=j*2;
357
				jj=j*2;
358
			}
358
			}
359
			color_matrix[ii*BLOCKS_NUM+jj]=win_matrix[i*14+j];
359
			color_matrix[ii*BLOCKS_NUM+jj]=win_matrix[i*14+j];
360
			color_matrix[ii+1*BLOCKS_NUM+jj]=win_matrix[i*14+j];
360
			color_matrix[ii+1*BLOCKS_NUM+jj]=win_matrix[i*14+j];
361
			color_matrix[ii*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
361
			color_matrix[ii*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
362
			color_matrix[ii+1*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
362
			color_matrix[ii+1*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
363
			draw_field();
363
			draw_field();
364
			//Pause(5);				
364
			//Pause(5);				
365
		}	
365
		}	
366
	return 1;
366
	return 1;
367
}
367
}
368
 
368
 
369
 
369
 
370
void draw_clicks_num()
370
void draw_clicks_num()
371
{
371
{
372
	#define TEXT_X 21
372
	#define TEXT_X 21
373
	#define TEXT_Y 92
373
	#define TEXT_Y 92
374
	
374
	
375
	DrawBar(8*6+TEXT_X, TEXT_Y, 6*2,9, sc.work);
375
	DrawBar(8*6+TEXT_X, TEXT_Y, 6*2,9, sc.work);
376
	
376
	
377
	WriteText(TEXT_X,TEXT_Y,0x80,sc.work_text,#CLICKS_TEXT,0);
377
	WriteText(TEXT_X,TEXT_Y,0x80,sc.work_text,#CLICKS_TEXT,0);
378
 
378
 
379
	if (CLICKS<10) EBX=9*6+TEXT_X;
379
	IF (CLICKS<10) EBX=9*6+TEXT_X;
380
		else EBX=8*6+TEXT_X;
380
		else EBX=8*6+TEXT_X;
381
	
381
	
382
	WriteText(EBX,TEXT_Y,0x80,sc.work_text,IntToStr(CLICKS),0);
382
	WriteText(EBX,TEXT_Y,0x80,sc.work_text,IntToStr(CLICKS),0);
383
	
383
	
384
	WriteText(11*6+TEXT_X,TEXT_Y,0x80,sc.work_text,IntToStr(MAX_CLICKS),0);
384
	WriteText(11*6+TEXT_X,TEXT_Y,0x80,sc.work_text,IntToStr(MAX_CLICKS),0);
385
}
385
}
386
 
386
 
387
 
387
 
388
void draw_field()
388
void draw_field()
389
{
389
{
390
	int i, j;
390
	int i, j;
391
	int color_id;
391
	int color_id;
392
	
392
	
393
	for (i=0;i
393
	for (i=0;i
394
		for (j=0;j
394
		for (j=0;j
395
		{
395
		{
396
			color_id = color_matrix[i*BLOCKS_NUM+j];
396
			color_id = color_matrix[i*BLOCKS_NUM+j];
397
			DrawBar(j*BLOCK_SIZE+USER_PANEL_WIDTH, i*BLOCK_SIZE+5, BLOCK_SIZE,BLOCK_SIZE, FIELD_COLORS[color_id]);
397
			DrawBar(j*BLOCK_SIZE+USER_PANEL_WIDTH, i*BLOCK_SIZE+5, BLOCK_SIZE,BLOCK_SIZE, FIELD_COLORS[color_id]);
398
		}
398
		}
399
}
399
}
400
 
400
 
401
 
401
 
402
void help()
402
void help()
403
{  
403
{  
404
	int i;
404
	int i;
405
	
405
	
406
	loop()
406
	loop()
407
	switch (WaitEvent())
407
	switch (WaitEvent())
408
	{
408
	{
409
		CASE evButton: 
409
		CASE evButton: 
410
				if (GetButtonID()==1) ExitProcess();
410
				IF (GetButtonID()==1) ExitProcess();
411
				break;
411
				break;
412
		CASE evKey:
412
		CASE evKey:
413
				if (GetKey()==27) ExitProcess(); //Esc
413
				IF (GetKey()==27) ExitProcess(); //Esc
414
				break;
414
				break;
415
		CASE evReDraw:
415
		CASE evReDraw:
416
				for (i=0; HELP_TEXT[i]<>0; i++;) {};
416
				for (i=0; HELP_TEXT[i]<>0; i++;) {};
417
				
417
				
418
				DefineAndDrawWindow(500,200,450,i*13+44,0x34,sc.work,0,0,#HELP_WINDOW_CAPTION);
418
				DefineAndDrawWindow(500,200,450,i*13+44,0x34,sc.work,0,0,#HELP_WINDOW_CAPTION);
419
				
419
				
420
				WriteText(6,12,0x80,sc.work_text,HELP_TEXT[0],0); //ýòî äëÿ æèðíîãî øðèôòà
420
				WriteText(6,12,0x80,sc.work_text,HELP_TEXT[0],0); //ýòî äëÿ æèðíîãî øðèôòà
421
				for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(5,i*13+12,0x80,sc.work_text,HELP_TEXT[i],0);
421
				for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(5,i*13+12,0x80,sc.work_text,HELP_TEXT[i],0);
422
	}
422
	}
423
}
423
}
424
 
424
 
425
 
425
 
426
stop:
426
stop:
427
>
427
>
428
>
428
>
429
>
429
>
430
>
430
>
431
>
431
>
432
>
432
>
433
>
433
>
434
>
434
>
435
>
435
>
436
>
436
>
437
>
437
>
438
>
438
>
439
>
439
>
440
>
440
>
441
>
441
>
442
>
442
>
443
>
443
>
444
>
444
>
445
>
445
>
446
>
446
>