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