Subversion Repositories Kolibri OS

Rev

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
}
-
 
240
>
-
 
241
>