Subversion Repositories Kolibri OS

Rev

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

Rev 2295 Rev 3933
1
//Leency 06.10.2011, Flood-it! v2.4, GPL
1
//Leency 06.10.2011, Flood-it! v2.4, 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
#elif LANG_EST
-
 
53
	char *BUTTON_CAPTIONS[]={ "Uus mäng [F2]", "Abi      [F1]", "Välju   [Esc]", 0}; 
-
 
54
	char CLICKS_TEXT[]="Klikki:   /";
-
 
55
	char LEVELS_TEXT[]="Väli:";
-
 
56
	
-
 
57
	char HELP_WINDOW_CAPTION[]="Help";
-
 
58
	char *HELP_TEXT[]={	"Kuidas mängida mängu Flood-it?",
-
 
59
	"",
-
 
60
	"Ujuta kogu mänguväli üle ühe värviga lubatud käikude arvuga.",
-
 
61
	"Mängu alustad ülemisest vasakust nurgast ja edened valides ühe värvi",
-
 
62
	"vajutades nuppudele vasakul. Kui sa muudad värvi pragusel alal,",
-
 
63
	"siis iga kokkupuutuv sama värv muutub samaks. Nii saad ujutada",
-
 
64
	"teised alad mänguväljal üle. Valida saad 2 mänguvälja suuruse",
-
 
65
	"vahel. Proovi väli üle ujutada etteandtud käikude arvuga!",
-
 
66
	"Kaasahaarav ja lõbus!",
-
 
67
	"",
-
 
68
	"Mängida saab ka klaviatuuriga:",
-
 
69
	"[Q] [W] [E]",
-
 
70
	"[A] [S] [D]",
-
 
71
	0}; 
52
#else
72
#else
53
	char *BUTTON_CAPTIONS[]={ "New Game [F2]", "Help     [F1]", "Exit    [Esc]", 0}; 
73
	char *BUTTON_CAPTIONS[]={ "New Game [F2]", "Help     [F1]", "Exit    [Esc]", 0}; 
54
	char CLICKS_TEXT[]="Clicks:   /";
74
	char CLICKS_TEXT[]="Clicks:   /";
55
	char LEVELS_TEXT[]="Board:";
75
	char LEVELS_TEXT[]="Board:";
56
	
76
	
57
	char HELP_WINDOW_CAPTION[]="Help";
77
	char HELP_WINDOW_CAPTION[]="Help";
58
	char *HELP_TEXT[]={	"How to play Flood-it?",
78
	char *HELP_TEXT[]={	"How to play Flood-it?",
59
	"",
79
	"",
60
	"Flood the whole board with one color within the allowed steps.",
80
	"Flood the whole board with one color within the allowed steps.",
61
	"You start from the top left corner and progress by selecting one",
81
	"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",
82
	"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",
83
	"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",
84
	"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!",
85
	"the board and try to flood-it in the least amount of steps!",
66
	"Addictive and Fun!",
86
	"Addictive and Fun!",
67
	"",
87
	"",
68
	"You can also play with keyboard:",
88
	"You can also play with keyboard:",
69
	"[Q] [W] [E]",
89
	"[Q] [W] [E]",
70
	"[A] [S] [D]",
90
	"[A] [S] [D]",
71
	0}; 
91
	0}; 
72
#endif
92
#endif
73
 
93
 
74
 
94
 
75
unsigned char color_matrix[28*28]; //öâåòà äëÿ ïîëÿ ñ êâàäðàòèêàìè
95
unsigned char color_matrix[28*28]; //öâåòà äëÿ ïîëÿ ñ êâàäðàòèêàìè
76
 
96
 
77
unsigned char loss_matrix[14*14]={
97
unsigned char loss_matrix[14*14]={
78
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
98
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,
99
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,
100
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,
101
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,
102
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,
103
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,
104
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,
105
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,
106
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,
107
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,
108
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,
109
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,
110
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
111
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
92
};
112
};
93
 
113
 
94
unsigned char win_matrix[14*14]={
114
unsigned char win_matrix[14*14]={
95
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
115
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,
116
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,
117
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,
118
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,
119
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,
120
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,
121
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,
122
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,
123
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,
124
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,
125
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,
126
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,
127
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,
128
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
109
};
129
};
110
 
130
 
111
void main()
131
void main()
112
{   
132
{   
113
	int key, id;
133
	int key, id;
114
	
134
	
115
	new_game();
135
	new_game();
116
   
136
   
117
	loop()
137
	loop()
118
	{
138
	{
119
		switch(WaitEvent()) 
139
		switch(WaitEvent()) 
120
		{
140
		{
121
			case evButton:
141
			case evButton:
122
				id = GetButtonID(); 
142
				id = GetButtonID(); 
123
				IF (id==1) || (id==4) ExitProcess();
143
				IF (id==1) || (id==4) ExitProcess();
124
				IF (id==2) goto _NEW_GAME_MARK;
144
				IF (id==2) goto _NEW_GAME_MARK;
125
				IF (id==3) goto _HELP_MARK;
145
				IF (id==3) goto _HELP_MARK;
126
				IF (id>=100)
146
				IF (id>=100)
127
				{
147
				{
128
					make_turn(id-100);
148
					make_turn(id-100);
129
					break;
149
					break;
130
				}
150
				}
131
				if (id>=10)
151
				if (id>=10)
132
				{
152
				{
133
					id=id-10*3;
153
					id=id-10*3;
134
					
154
					
135
					IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[id]) break; //âûáðàí òîò æå ðàçìåð
155
					IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[id]) break; //âûáðàí òîò æå ðàçìåð
136
					
156
					
137
					BLOCK_SIZE = DIFFICULTY_LEV_PARAMS[id]; //ðàçìåð êâàäðàòèêà
157
					BLOCK_SIZE = DIFFICULTY_LEV_PARAMS[id]; //ðàçìåð êâàäðàòèêà
138
					BLOCKS_NUM = DIFFICULTY_LEV_PARAMS[id+1]; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
158
					BLOCKS_NUM = DIFFICULTY_LEV_PARAMS[id+1]; //êîëè÷åñòâî êâàäðàòèêîâ ïî Õ è ïî Y
139
					MAX_CLICKS = DIFFICULTY_LEV_PARAMS[id+2]; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
159
					MAX_CLICKS = DIFFICULTY_LEV_PARAMS[id+2]; //ìàêñèìàëüíîå êîëè÷åñòâî êëèêîâ äî âûèãðûøà
140
					
160
					
141
					new_game();
161
					new_game();
142
					
162
					
143
					MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14);
163
					MoveSize(-1, -1, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14);
144
				}
164
				}
145
				break;
165
				break;
146
			case evKey:
166
			case evKey:
147
				key = GetKey();
167
				key = GetKey();
148
				IF (key==027) //Escape
168
				IF (key==027) //Escape
149
					 ExitProcess();
169
					 ExitProcess();
150
				IF (key==050) //F1
170
				IF (key==050) //F1
151
				{
171
				{
152
					_HELP_MARK:
172
					_HELP_MARK:
153
						CreateThread(#help,#stak); 
173
						CreateThread(#help,#stak); 
154
				}
174
				}
155
				IF (key==051) //F2
175
				IF (key==051) //F2
156
				{
176
				{
157
					_NEW_GAME_MARK:
177
					_NEW_GAME_MARK:
158
						new_game();
178
						new_game();
159
						draw_clicks_num();
179
						draw_clicks_num();
160
						draw_field();
180
						draw_field();
161
				}
181
				}
162
				IF (key==113) make_turn(0); //Q
182
				IF (key==113) make_turn(0); //Q
163
				IF (key==119) make_turn(1); //W
183
				IF (key==119) make_turn(1); //W
164
				IF (key==101) make_turn(2); //E
184
				IF (key==101) make_turn(2); //E
165
				IF (key==097) make_turn(3); //A
185
				IF (key==097) make_turn(3); //A
166
				IF (key==115) make_turn(4); //S
186
				IF (key==115) make_turn(4); //S
167
				IF (key==100) make_turn(5); //D
187
				IF (key==100) make_turn(5); //D
168
				break;
188
				break;
169
			case evReDraw:
189
			case evReDraw:
170
				draw_window();
190
				draw_window();
171
		}
191
		}
172
	}
192
	}
173
}
193
}
174
 
194
 
175
 
195
 
176
void make_turn(int turn_id)
196
void make_turn(int turn_id)
177
{
197
{
178
	IF (color_matrix[0]==turn_id) return; //åñëè öâåò ïåðâîé ôèøêè òàêîé æå, èãíîðèðóåì áåññìûñëåííûé õîä
198
	IF (color_matrix[0]==turn_id) return; //åñëè öâåò ïåðâîé ôèøêè òàêîé æå, èãíîðèðóåì áåññìûñëåííûé õîä
179
	IF (CLICKS>=MAX_CLICKS) return; //åñëè èãðà çàêîí÷åíà
199
	IF (CLICKS>=MAX_CLICKS) return; //åñëè èãðà çàêîí÷åíà
180
	
200
	
181
	CLICKS++;
201
	CLICKS++;
182
	draw_clicks_num();
202
	draw_clicks_num();
183
	
203
	
184
	fill_field(turn_id);
204
	fill_field(turn_id);
185
	draw_field();
205
	draw_field();
186
	check_for_end(); //åñëè èãðà çàêîí÷åíà	
206
	check_for_end(); //åñëè èãðà çàêîí÷åíà	
187
}
207
}
188
 
208
 
189
 
209
 
190
void draw_window()
210
void draw_window()
191
{
211
{
192
	int i, j;
212
	int i, j;
193
	#define BUTTON_SIZE 28
213
	#define BUTTON_SIZE 28
194
	
214
	
195
	sc.get();
215
	sc.get();
196
		
216
		
197
	DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14, 0x74,sc.work,0,0,"Flood-it!"); 
217
	DefineAndDrawWindow(300,176, BLOCK_SIZE*BLOCKS_NUM +14+USER_PANEL_WIDTH, BLOCK_SIZE*BLOCKS_NUM +GetSkinWidth()+14, 0x74,sc.work,0,0,"Flood-it!"); 
198
	
218
	
199
	//ïðîâåðÿåì íå ñõëîïíóòî ëè îêíî â çàãîëîâîê
219
	//ïðîâåðÿåì íå ñõëîïíóòî ëè îêíî â çàãîëîâîê
200
	GetProcessInfo(#Form, SelfInfo);
220
	GetProcessInfo(#Form, SelfInfo);
201
	IF (Form.status_window==4) return;
221
	IF (Form.status_window==4) return;
202
	
222
	
203
	//çàêðàøèâàåì ôîí -> óìåíüøàåò ïåðåðèñîâêó
223
	//çàêðàøèâàåì ôîí -> óìåíüøàåò ïåðåðèñîâêó
204
	for (i=0;i<=4;i++)
224
	for (i=0;i<=4;i++)
205
	{
225
	{
206
		IF (i<>4)
226
		IF (i<>4)
207
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work);
227
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work);
208
		else
228
		else
209
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work_graph); //îáîäîê
229
			DrawRegion(USER_PANEL_WIDTH+i-5,i, BLOCK_SIZE*BLOCKS_NUM +9-i-i, BLOCK_SIZE*BLOCKS_NUM+9-i-i, sc.work_graph); //îáîäîê
210
	}
230
	}
211
	DrawBar(0,0, USER_PANEL_WIDTH-5, BLOCK_SIZE*BLOCKS_NUM+10, sc.work);
231
	DrawBar(0,0, USER_PANEL_WIDTH-5, BLOCK_SIZE*BLOCKS_NUM+10, sc.work);
212
	
232
	
213
	//êíîïî÷êè çàëèâêè
233
	//êíîïî÷êè çàëèâêè
214
	for (i=0;i<2;i++)
234
	for (i=0;i<2;i++)
215
		for (j=0;j<3;j++)
235
		for (j=0;j<3;j++)
216
			DefineButton(j*BUTTON_SIZE+17,i*BUTTON_SIZE+15,BUTTON_SIZE,BUTTON_SIZE, i*3+j+100,FIELD_COLORS[i*3+j]);
236
			DefineButton(j*BUTTON_SIZE+17,i*BUTTON_SIZE+15,BUTTON_SIZE,BUTTON_SIZE, i*3+j+100,FIELD_COLORS[i*3+j]);
217
 
237
 
218
	//êíîïî÷êè äåéñòâèé
238
	//êíîïî÷êè äåéñòâèé
219
	for (j=0;j<3;j++)
239
	for (j=0;j<3;j++)
220
	{
240
	{
221
		DefineButton(17,j*25+120, 13*6+6, 20, j+2,sc.work_button);
241
		DefineButton(17,j*25+120, 13*6+6, 20, j+2,sc.work_button);
222
		WriteText(17+4,j*25+127,0x80,sc.work_button_text,BUTTON_CAPTIONS[j],0);
242
		WriteText(17+4,j*25+127,0x80,sc.work_button_text,BUTTON_CAPTIONS[j],0);
223
	}
243
	}
224
 
244
 
225
	//êíîïî÷êè âûáîðà óðîâíÿ ñëîæíîñòè
245
	//êíîïî÷êè âûáîðà óðîâíÿ ñëîæíîñòè
226
	WriteText(17,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,sc.work_text,#LEVELS_TEXT,0);
246
	WriteText(17,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,sc.work_text,#LEVELS_TEXT,0);
227
	for (j=0;j<2;j++)
247
	for (j=0;j<2;j++)
228
	{
248
	{
229
		DefineButton(j*25+56,BLOCKS_NUM*BLOCK_SIZE-20, 20,20, j+10,sc.work_button);
249
		DefineButton(j*25+56,BLOCKS_NUM*BLOCK_SIZE-20, 20,20, j+10,sc.work_button);
230
		
250
		
231
		IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[j*3]) EDI=0x800080;
251
		IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[j*3]) EDI=0x800080;
232
			else EDI=sc.work_button_text;
252
			else EDI=sc.work_button_text;
233
		
253
		
234
		WriteText(j*25+56+8,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
254
		WriteText(j*25+56+8,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
235
		WriteText(j*25+56+9,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
255
		WriteText(j*25+56+9,BLOCKS_NUM*BLOCK_SIZE-20+7,0x80,EDI,BOARD_SIZES[j],0);
236
	}
256
	}
237
	
257
	
238
	draw_clicks_num();
258
	draw_clicks_num();
239
	
259
	
240
	draw_field();
260
	draw_field();
241
 
261
 
242
}
262
}
243
 
263
 
244
 
264
 
245
void new_game()
265
void new_game()
246
{
266
{
247
	int i;
267
	int i;
248
	
268
	
249
	CLICKS = 0;
269
	CLICKS = 0;
250
	
270
	
251
	for (i=0;i
271
	for (i=0;i
252
			color_matrix[i] = random(6);
272
			color_matrix[i] = random(6);
253
}
273
}
254
 
274
 
255
 
275
 
256
void fill_field(int new_color_id)
276
void fill_field(int new_color_id)
257
{
277
{
258
	int i, j,
278
	int i, j,
259
	old_color_id=color_matrix[0],
279
	old_color_id=color_matrix[0],
260
	restart;
280
	restart;
261
	#define MARKED 6
281
	#define MARKED 6
262
	
282
	
263
	color_matrix[0]=MARKED;
283
	color_matrix[0]=MARKED;
264
	
284
	
265
	_RESTART_MARK:
285
	_RESTART_MARK:
266
	
286
	
267
	restart=0;
287
	restart=0;
268
	
288
	
269
	for (i=0;i
289
	for (i=0;i
270
		for (j=0;j
290
		for (j=0;j
271
		{
291
		{
272
			IF (color_matrix[i*BLOCKS_NUM+j]<>old_color_id) continue; //åñëè ôèøêà íå íóæíîãî öâåòà èä¸ì äàëüøå
292
			IF (color_matrix[i*BLOCKS_NUM+j]<>old_color_id) continue; //åñëè ôèøêà íå íóæíîãî öâåòà èä¸ì äàëüøå
273
			IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) continue; //åñëè ôèøêà óæå îòìå÷åíà, èä¸ì äàëåå
293
			IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) continue; //åñëè ôèøêà óæå îòìå÷åíà, èä¸ì äàëåå
274
			
294
			
275
			IF (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì ëåâûé
295
			IF (j>0) && (color_matrix[i*BLOCKS_NUM+j-1]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì ëåâûé
276
			IF (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì âåðõíèé
296
			IF (i>0) && (color_matrix[i-1*BLOCKS_NUM+j]==MARKED) color_matrix[i*BLOCKS_NUM+j]=MARKED; //ñìîòðèì âåðõíèé
277
			IF (j
297
			IF (j
278
			IF (i
298
			IF (i
279
			
299
			
280
			IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) restart=1; //åñëè ôèøêó îòìåòèëè, òî ïîòîì öèêë íóæíî áóäåò ïðîêðóòèòü ñíà÷àëà - ìîæ åù¸ ÷¸ îòìåòèì
300
			IF (color_matrix[i*BLOCKS_NUM+j]==MARKED) restart=1; //åñëè ôèøêó îòìåòèëè, òî ïîòîì öèêë íóæíî áóäåò ïðîêðóòèòü ñíà÷àëà - ìîæ åù¸ ÷¸ îòìåòèì
281
		}
301
		}
282
	IF (restart) goto _RESTART_MARK;
302
	IF (restart) goto _RESTART_MARK;
283
 
303
 
284
	for (i=0;i
304
	for (i=0;i
285
			IF (color_matrix[i]==MARKED) color_matrix[i]=new_color_id;
305
			IF (color_matrix[i]==MARKED) color_matrix[i]=new_color_id;
286
}
306
}
287
 
307
 
288
 
308
 
289
int check_for_end()
309
int check_for_end()
290
{
310
{
291
	int i, j, ii, jj;
311
	int i, j, ii, jj;
292
 
312
 
293
	if (CLICKS>=MAX_CLICKS) //åñëè ïðîèãðûø
313
	if (CLICKS>=MAX_CLICKS) //åñëè ïðîèãðûø
294
	{
314
	{
295
		IF (CLICKS==MAX_CLICKS) //âûèãðûøü íà ïîñëåäíåì õîäå
315
		IF (CLICKS==MAX_CLICKS) //âûèãðûøü íà ïîñëåäíåì õîäå
296
		{
316
		{
297
			for (i=0;i
317
			for (i=0;i
298
					IF (color_matrix[i]<>color_matrix[0]) goto _loss_MARK;
318
					IF (color_matrix[i]<>color_matrix[0]) goto _loss_MARK;
299
			goto _WIN_MARK;
319
			goto _WIN_MARK;
300
		}
320
		}
301
		
321
		
302
		_loss_MARK:
322
		_loss_MARK:
303
		
323
		
304
		for (i=0;i<14;i++)
324
		for (i=0;i<14;i++)
305
			for (j=0;j<14;j++)
325
			for (j=0;j<14;j++)
306
			{
326
			{
307
				IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0])
327
				IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0])
308
				{
328
				{
309
					ii=i;
329
					ii=i;
310
					jj=j;
330
					jj=j;
311
				}
331
				}
312
				else
332
				else
313
				{
333
				{
314
					ii=i*2;
334
					ii=i*2;
315
					jj=j*2;
335
					jj=j*2;
316
				}
336
				}
317
				color_matrix[ii*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
337
				color_matrix[ii*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
318
				color_matrix[ii+1*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
338
				color_matrix[ii+1*BLOCKS_NUM+jj]=loss_matrix[i*14+j];
319
				color_matrix[ii*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
339
				color_matrix[ii*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
320
				color_matrix[ii+1*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
340
				color_matrix[ii+1*BLOCKS_NUM+jj+1]=loss_matrix[i*14+j];
321
				draw_field();
341
				draw_field();
322
				//Pause(5);				
342
				//Pause(5);				
323
			}	
343
			}	
324
			
344
			
325
		return 1;
345
		return 1;
326
	}
346
	}
327
	
347
	
328
	for (i=0;i
348
	for (i=0;i
329
			IF (color_matrix[i]<>color_matrix[0]) return 0;
349
			IF (color_matrix[i]<>color_matrix[0]) return 0;
330
 
350
 
331
	//âñ¸ ïîëå îäíîãî öâåòà è ôèøåê ìåíüøå MAX_CLICKS -> ïîáåäà
351
	//âñ¸ ïîëå îäíîãî öâåòà è ôèøåê ìåíüøå MAX_CLICKS -> ïîáåäà
332
	
352
	
333
	_WIN_MARK:
353
	_WIN_MARK:
334
	
354
	
335
	for (i=0;i<25;i++)
355
	for (i=0;i<25;i++)
336
	{
356
	{
337
		new_game();
357
		new_game();
338
		draw_field();
358
		draw_field();
339
		Pause(7);
359
		Pause(7);
340
	}
360
	}
341
 
361
 
342
	CLICKS=MAX_CLICKS;
362
	CLICKS=MAX_CLICKS;
343
	
363
	
344
	for (i=0;i<14;i++)
364
	for (i=0;i<14;i++)
345
		for (j=0;j<14;j++)
365
		for (j=0;j<14;j++)
346
		{
366
		{
347
			IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0]) //çàëèâêà äëÿ ïîëåé ðàçíîãî ðàçìåðà ðàçíàÿ
367
			IF (BLOCK_SIZE == DIFFICULTY_LEV_PARAMS[0]) //çàëèâêà äëÿ ïîëåé ðàçíîãî ðàçìåðà ðàçíàÿ
348
			{
368
			{
349
				ii=i;
369
				ii=i;
350
				jj=j;
370
				jj=j;
351
			}
371
			}
352
			else
372
			else
353
			{
373
			{
354
				ii=i*2;
374
				ii=i*2;
355
				jj=j*2;
375
				jj=j*2;
356
			}
376
			}
357
			color_matrix[ii*BLOCKS_NUM+jj]=win_matrix[i*14+j];
377
			color_matrix[ii*BLOCKS_NUM+jj]=win_matrix[i*14+j];
358
			color_matrix[ii+1*BLOCKS_NUM+jj]=win_matrix[i*14+j];
378
			color_matrix[ii+1*BLOCKS_NUM+jj]=win_matrix[i*14+j];
359
			color_matrix[ii*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
379
			color_matrix[ii*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
360
			color_matrix[ii+1*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
380
			color_matrix[ii+1*BLOCKS_NUM+jj+1]=win_matrix[i*14+j];
361
			draw_field();
381
			draw_field();
362
			//Pause(5);				
382
			//Pause(5);				
363
		}	
383
		}	
364
	return 1;
384
	return 1;
365
}
385
}
366
 
386
 
367
 
387
 
368
void draw_clicks_num()
388
void draw_clicks_num()
369
{
389
{
370
	#define TEXT_X 21
390
	#define TEXT_X 21
371
	#define TEXT_Y 92
391
	#define TEXT_Y 92
372
	
392
	
373
	DrawBar(8*6+TEXT_X, TEXT_Y, 6*2,9, sc.work);
393
	DrawBar(8*6+TEXT_X, TEXT_Y, 6*2,9, sc.work);
374
	
394
	
375
	WriteText(TEXT_X,TEXT_Y,0x80,sc.work_text,#CLICKS_TEXT,0);
395
	WriteText(TEXT_X,TEXT_Y,0x80,sc.work_text,#CLICKS_TEXT,0);
376
 
396
 
377
	IF (CLICKS<10) EBX=9*6+TEXT_X;
397
	IF (CLICKS<10) EBX=9*6+TEXT_X;
378
		else EBX=8*6+TEXT_X;
398
		else EBX=8*6+TEXT_X;
379
	
399
	
380
	WriteText(EBX,TEXT_Y,0x80,sc.work_text,IntToStr(CLICKS),0);
400
	WriteText(EBX,TEXT_Y,0x80,sc.work_text,IntToStr(CLICKS),0);
381
	
401
	
382
	WriteText(11*6+TEXT_X,TEXT_Y,0x80,sc.work_text,IntToStr(MAX_CLICKS),0);
402
	WriteText(11*6+TEXT_X,TEXT_Y,0x80,sc.work_text,IntToStr(MAX_CLICKS),0);
383
}
403
}
384
 
404
 
385
 
405
 
386
void draw_field()
406
void draw_field()
387
{
407
{
388
	int i, j;
408
	int i, j;
389
	int color_id;
409
	int color_id;
390
	
410
	
391
	for (i=0;i
411
	for (i=0;i
392
		for (j=0;j
412
		for (j=0;j
393
		{
413
		{
394
			color_id = color_matrix[i*BLOCKS_NUM+j];
414
			color_id = color_matrix[i*BLOCKS_NUM+j];
395
			DrawBar(j*BLOCK_SIZE+USER_PANEL_WIDTH, i*BLOCK_SIZE+5, BLOCK_SIZE,BLOCK_SIZE, FIELD_COLORS[color_id]);
415
			DrawBar(j*BLOCK_SIZE+USER_PANEL_WIDTH, i*BLOCK_SIZE+5, BLOCK_SIZE,BLOCK_SIZE, FIELD_COLORS[color_id]);
396
		}
416
		}
397
}
417
}
398
 
418
 
399
 
419
 
400
void help()
420
void help()
401
{  
421
{  
402
	int i;
422
	int i;
403
	
423
	
404
	loop()
424
	loop()
405
	switch (WaitEvent())
425
	switch (WaitEvent())
406
	{
426
	{
407
		CASE evButton: 
427
		CASE evButton: 
408
				IF (GetButtonID()==1) ExitProcess();
428
				IF (GetButtonID()==1) ExitProcess();
409
				break;
429
				break;
410
		CASE evKey:
430
		CASE evKey:
411
				IF (GetKey()==27) ExitProcess(); //Esc
431
				IF (GetKey()==27) ExitProcess(); //Esc
412
				break;
432
				break;
413
		CASE evReDraw:
433
		CASE evReDraw:
414
				for (i=0; HELP_TEXT[i]<>0; i++;) {};
434
				for (i=0; HELP_TEXT[i]<>0; i++;) {};
415
				
435
				
416
				DefineAndDrawWindow(500,200,450,i*13+44,0x34,sc.work,0,0,#HELP_WINDOW_CAPTION);
436
				DefineAndDrawWindow(500,200,450,i*13+44,0x34,sc.work,0,0,#HELP_WINDOW_CAPTION);
417
				
437
				
418
				WriteText(6,12,0x80,sc.work_text,HELP_TEXT[0],0); //ýòî äëÿ æèðíîãî øðèôòà
438
				WriteText(6,12,0x80,sc.work_text,HELP_TEXT[0],0); //ýòî äëÿ æèðíîãî øðèôòà
419
				for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(5,i*13+12,0x80,sc.work_text,HELP_TEXT[i],0);
439
				for (i=0; HELP_TEXT[i]<>0; i++;) WriteText(5,i*13+12,0x80,sc.work_text,HELP_TEXT[i],0);
420
	}
440
	}
421
}
441
}
422
 
442
 
423
 
443
 
424
stop:
444
stop:
425
>
445
>
426
>
446
>
427
>
447
>
428
>
448
>
429
>
449
>
430
>
450
>
431
>
451
>
432
>
452
>
433
>
453
>
434
>
454
>
435
>
455
>
436
>
456
>
437
>
457
>
438
>
458
>