Rev 8081 | Rev 8324 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8071 | maxcodehac | 1 | #include |
2 | #include |
||
3 | #include |
||
8080 | maxcodehac | 4 | #include |
8084 | maxcodehac | 5 | #include |
8071 | maxcodehac | 6 | |
8080 | maxcodehac | 7 | #include "kolibri_libimg.h" |
8 | |||
8071 | maxcodehac | 9 | |
10 | |||
8084 | maxcodehac | 11 | //EVENTS LOOK LIKE IN C-- |
12 | #define evReDraw 1 |
||
13 | #define evKey 2 |
||
14 | #define evButton 3 |
||
15 | #define evExit 4 |
||
16 | #define evDesktop 5 |
||
17 | #define evMouse 6 |
||
18 | #define evIPC 7 |
||
19 | #define evNetwork 8 |
||
20 | #define evDebug 9 |
||
8071 | maxcodehac | 21 | |
22 | |||
8084 | maxcodehac | 23 | #define RESTART 99 |
24 | |||
25 | #define b_color 0xbbbbbb |
||
8071 | maxcodehac | 26 | #define _size 4 |
27 | #define bs 44 |
||
28 | |||
29 | int field[_size][_size] = { |
||
30 | {0, 0, 0, 1}, |
||
31 | {0, 0, 1, 0}, |
||
32 | {0, 0, 0, 1}, |
||
8072 | maxcodehac | 33 | {1, 0, 0, 0} |
8084 | maxcodehac | 34 | /*{0, 0, 0, 0}, |
35 | {0, 0, 0, 0}, |
||
36 | {0, 0, 0, 0}, |
||
37 | {0, 0, 0, 0}*/ |
||
8071 | maxcodehac | 38 | }; |
8084 | maxcodehac | 39 | short vict = 0; |
40 | short debug_pr = 0; |
||
8071 | maxcodehac | 41 | |
8084 | maxcodehac | 42 | char* title = "Fridge"; |
8071 | maxcodehac | 43 | |
8084 | maxcodehac | 44 | |
8080 | maxcodehac | 45 | // PICTURES LOADING CODE |
46 | char temp_path[4096]; |
||
47 | char* HOR; |
||
48 | char* VER; |
||
49 | |||
50 | |||
51 | char* load_file_inmem(char* fname, int32_t* read_sz) |
||
52 | { |
||
8084 | maxcodehac | 53 | FILE *f = fopen(fname, "rb"); |
54 | if (!f) { |
||
55 | exit(1); |
||
56 | } |
||
57 | if (fseek(f, 0, SEEK_END)) { |
||
58 | exit(1); |
||
59 | } |
||
60 | int filesize = ftell(f); |
||
61 | rewind(f); |
||
62 | char* fdata = malloc(filesize); |
||
63 | if(!fdata) { |
||
64 | exit(1); |
||
65 | } |
||
66 | *read_sz = fread(fdata, 1, filesize, f); |
||
67 | if (ferror(f)) { |
||
68 | exit(1); |
||
69 | } |
||
70 | fclose(f); |
||
8080 | maxcodehac | 71 | |
8084 | maxcodehac | 72 | return fdata; |
8080 | maxcodehac | 73 | } |
74 | |||
75 | |||
76 | void load_pict() { |
||
8084 | maxcodehac | 77 | const int icon_rgb_size = bs*bs; |
78 | char *image_data, |
||
79 | *filedata; |
||
80 | |||
81 | strcpy(temp_path, "h.png"); |
||
8080 | maxcodehac | 82 | |
8084 | maxcodehac | 83 | int32_t read_bytes; |
84 | filedata = load_file_inmem(temp_path, &read_bytes); |
||
85 | HOR = malloc(icon_rgb_size * 3); |
||
86 | |||
87 | image_data = img_decode(filedata, read_bytes, 0); |
||
88 | |||
89 | img_to_rgb2(image_data, HOR); |
||
90 | |||
91 | |||
92 | strcpy(temp_path, "v.png"); |
||
8080 | maxcodehac | 93 | |
8084 | maxcodehac | 94 | filedata = load_file_inmem(temp_path, &read_bytes); |
95 | VER = malloc(icon_rgb_size * 3); |
||
96 | |||
97 | image_data = img_decode(filedata, read_bytes, 0); |
||
98 | |||
99 | img_to_rgb2(image_data, VER); |
||
100 | |||
101 | img_destroy(image_data); |
||
102 | free(filedata); |
||
8080 | maxcodehac | 103 | } |
8084 | maxcodehac | 104 | // END OF PICTURES LOAD CODE |
8080 | maxcodehac | 105 | |
106 | |||
107 | |||
8084 | maxcodehac | 108 | void redraw_buttons() { |
109 | for (int j = 5, yy = 0; yy<_size; j+=bs, yy++) |
||
110 | for (int i = 15, xx = 0; xx<_size; i+=bs, xx++) |
||
111 | { |
||
112 | define_button(65536 * i + (bs-1), 65536 * j + (bs-1), ((xx+1)*10)+yy+1, b_color); |
||
113 | |||
114 | if (field[yy][xx]) draw_bitmap(VER, i, j, bs, bs); |
||
115 | else draw_bitmap(HOR, i, j, bs, bs); |
||
116 | } |
||
117 | } |
||
8080 | maxcodehac | 118 | |
8084 | maxcodehac | 119 | void draw_game_window(){ |
120 | BeginDraw(); |
||
121 | DrawWindow(215,100,220, 220,title,b_color,0x34); |
||
122 | redraw_buttons(); |
||
123 | EndDraw(); |
||
124 | } |
||
8080 | maxcodehac | 125 | |
126 | |||
8084 | maxcodehac | 127 | |
128 | static inline |
||
129 | void draw_text_sysNEW(const char *text, int x, int y, int len, int fontType, color_t color) |
||
130 | { |
||
131 | __asm__ __volatile__( |
||
132 | "int $0x40" |
||
133 | ::"a"(4),"d"(text), |
||
134 | "b"((x << 16) | y), |
||
135 | "S"(len),"c"(fontType<<24+color) |
||
136 | :"memory"); |
||
8080 | maxcodehac | 137 | } |
138 | |||
8084 | maxcodehac | 139 | void SetUp() { |
140 | for (int y = 0; y<_size; y++) |
||
141 | for (int x = 0; x<_size; x++) |
||
142 | { |
||
143 | field[x][y] = rand() % 2; |
||
144 | } |
||
8071 | maxcodehac | 145 | } |
146 | |||
8084 | maxcodehac | 147 | void draw_victory_window() { |
148 | BeginDraw(); |
||
149 | DrawWindow(215,100,220, 220,title,b_color,0x34); |
||
8071 | maxcodehac | 150 | |
8084 | maxcodehac | 151 | draw_text_sysNEW("Ну вы, и", 10, 10, strlen("Ну вы, и"), 0xB1, 0x000000); |
152 | draw_text_sysNEW("медвежатник,", 10, 50, strlen("Ну вы, и медвежатник,"), 0xB1, 0x000000); |
||
153 | draw_text_sysNEW("Шеф!", 12, 90, strlen("Шеф!"), 0xB1, 0x000000); |
||
8071 | maxcodehac | 154 | |
8084 | maxcodehac | 155 | if (debug_pr) { |
156 | printf("Fridge: Very great!\n"); |
||
157 | debug_pr = 0; |
||
158 | } |
||
8071 | maxcodehac | 159 | |
8084 | maxcodehac | 160 | define_button(65536 * ((220/2)-(50)) + 140, 65536 * 140 + 25+12, RESTART, 0x9A9A9A); |
161 | draw_text_sysNEW("Заново", 80, 145, strlen("Заново"), 0xB1, 0x000000); |
||
162 | EndDraw(); |
||
8071 | maxcodehac | 163 | } |
164 | |||
8084 | maxcodehac | 165 | |
166 | |||
167 | void Button() { |
||
168 | int id = get_os_button(); |
||
169 | if (id == 1) exit(0); else |
||
170 | if (id == RESTART) { |
||
171 | SetUp(); |
||
172 | vict = 0; |
||
173 | draw_game_window(); |
||
174 | } else |
||
8071 | maxcodehac | 175 | { |
8084 | maxcodehac | 176 | int x = (id/10)-1; |
177 | int y = (id%10)-1; |
||
178 | |||
179 | for (int i = 0; i<_size; i++) |
||
180 | if (field[i][x]) field[i][x] = 0; else field[i][x] = 1; |
||
181 | |||
182 | for (int i = 0; i<_size; i++) |
||
183 | if (field[y][i]) field[y][i] = 0; else field[y][i] = 1; |
||
8081 | maxcodehac | 184 | |
8084 | maxcodehac | 185 | if (field[y][x]) field[y][x] = 0; else field[y][x] = 1; |
186 | |||
187 | redraw_buttons(); |
||
8071 | maxcodehac | 188 | } |
189 | } |
||
8084 | maxcodehac | 190 | |
191 | |||
192 | int fridge_opened() { |
||
193 | int fr_op = 0; |
||
194 | for (int y = 0; y<_size; y++) |
||
195 | for (int x = 0; x<_size; x++) |
||
196 | { |
||
197 | fr_op += field[x][y]; |
||
198 | } |
||
199 | if (fr_op == 0) return 1; |
||
200 | return 0; |
||
201 | } |
||
202 | |||
203 | |||
204 | int main() |
||
205 | { |
||
206 | srand(time(0)); |
||
207 | |||
208 | if (kolibri_libimg_init() == -1) |
||
209 | { |
||
210 | printf("Can not load libimg.obj!\n"); |
||
211 | exit(1); |
||
212 | } |
||
213 | load_pict(); |
||
214 | |||
215 | draw_game_window(); |
||
216 | while(1) |
||
217 | { |
||
218 | switch(get_os_event()) |
||
219 | { |
||
220 | case evButton: |
||
221 | Button(); |
||
222 | if (fridge_opened()) { |
||
223 | vict = 1; |
||
224 | debug_pr = 1; |
||
225 | draw_victory_window(); |
||
226 | } |
||
227 | break; |
||
228 | |||
229 | case evKey: |
||
230 | get_key(); |
||
231 | break; |
||
232 | |||
233 | case evReDraw: |
||
234 | if (!vict) draw_game_window(); |
||
235 | else draw_victory_window(); |
||
236 | break; |
||
237 | } |
||
238 | } |
||
239 | }24+color) |