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 | >10)>14;j++) |
446 | >10)>14;j++) |
427 | >14;i++) |
447 | >14;i++) |
428 | >25;i++) |
448 | >25;i++) |
429 | >>14;j++) |
449 | >>14;j++) |
430 | >14;i++) |
450 | >14;i++) |
431 | >>> |
451 | >>> |
432 | > |
452 | > |
433 | >2;j++) |
453 | >2;j++) |
434 | >3;j++) |
454 | >3;j++) |
435 | >3;j++) |
455 | >3;j++) |
436 | >2;i++) |
456 | >2;i++) |
437 | >>=4;i++) |
457 | >>=4;i++) |
438 | > |
458 | > |