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 | >10)>14;j++) |
428 | >10)>14;j++) |
429 | >14;i++) |
429 | >14;i++) |
430 | >25;i++) |
430 | >25;i++) |
431 | >> |
431 | >> |
432 | >14;j++) |
432 | >14;j++) |
433 | >14;i++) |
433 | >14;i++) |
434 | >> |
434 | >> |
435 | > |
435 | > |
436 | > |
436 | > |
437 | >> |
437 | >> |
438 | > |
438 | > |
439 | > |
439 | > |
440 | > |
440 | > |
441 | >2;j++) |
441 | >2;j++) |
442 | >3;j++) |
442 | >3;j++) |
443 | >3;j++) |
443 | >3;j++) |
444 | >2;i++) |
444 | >2;i++) |
445 | >>=4;i++) |
445 | >>=4;i++) |
446 | > |
446 | > |