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