Subversion Repositories Kolibri OS

Rev

Rev 8081 | Rev 8324 | Go to most recent revision | Only display areas with differences | Ignore 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--
-
 
10
*/
-
 
11
 
-
 
12
#define evReDraw 1
-
 
13
#define evKey 2
-
 
-
 
8
 
-
 
9
 
-
 
10
 
-
 
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
14
#define evButton 3
-
 
15
 
18
#define evIPC     7
-
 
19
#define evNetwork 8
-
 
20
#define evDebug   9
-
 
21
 
16
 
22
 
17
 
23
#define RESTART 99
18
#define _size 4
24
 
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");
-
 
72
 
-
 
73
    int32_t read_bytes;
-
 
74
    filedata = load_file_inmem(temp_path, &read_bytes);
-
 
75
    HOR = malloc(icon_rgb_size * 3);
-
 
76
    
-
 
77
    image_data = img_decode(filedata, read_bytes, 0); 
-
 
78
    
-
 
79
    img_to_rgb2(image_data, HOR);
-
 
80
    
-
 
81
    
-
 
82
    strcpy(temp_path, "v.png");
-
 
83
 
-
 
84
    filedata = load_file_inmem(temp_path, &read_bytes);
-
 
85
    VER = malloc(icon_rgb_size * 3);
-
 
86
    
-
 
87
    image_data = img_decode(filedata, read_bytes, 0); 
-
 
88
    
-
 
89
    img_to_rgb2(image_data, VER);
-
 
90
    
-
 
91
    img_destroy(image_data);
-
 
92
    free(filedata);
-
 
93
}
-
 
-
 
81
		strcpy(temp_path, "h.png");
-
 
82
 
-
 
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");
-
 
93
 
-
 
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);
94
 
-
 
95
 
102
		free(filedata);
96
 
103
}
97
 
104
// END OF PICTURES LOAD CODE
98
// END OF PIC LOAD CODE
105
 
99
 
106
 
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();
-
 
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");
117
}
137
}
118
 
138
 
119
void Button() {
139
void SetUp() {
120
	int id = get_os_button();
140
		for (int y = 0; y<_size; y++)
121
	if (id == 1) exit(0); else
141
					for (int x = 0; x<_size; x++)
-
 
142
					{
-
 
143
						field[x][y] = rand() % 2;
-
 
144
					}
-
 
145
}
122
	{
146
 
-
 
147
void draw_victory_window() {
123
		int x = (id/10)-1;
148
		BeginDraw(); 
-
 
149
		DrawWindow(215,100,220, 220,title,b_color,0x34);
124
		int y = (id%10)-1;
150
		
125
		
151
		draw_text_sysNEW("Ну вы, и", 10, 10, strlen("Ну вы, и"), 0xB1, 0x000000);
126
		for (int i = 0; i<_size; i++)
152
		draw_text_sysNEW("медвежатник,", 10, 50, strlen("Ну вы, и медвежатник,"), 0xB1, 0x000000);
-
 
153
		draw_text_sysNEW("Шеф!", 12, 90, strlen("Шеф!"), 0xB1, 0x000000);
127
			if (field[i][x]) field[i][x] = 0; else field[i][x] = 1;
154
		
128
		
-
 
-
 
155
		if (debug_pr) {
-
 
156
			printf("Fridge: Very great!\n");
129
		for (int i = 0; i<_size; i++)
157
			debug_pr = 0;
130
			if (field[y][i]) field[y][i] = 0; else field[y][i] = 1;
-
 
131
			
158
		}
132
		if (field[y][x]) field[y][x] = 0; else field[y][x] = 1;
-
 
133
		
159
		
134
		redraw_buttons();
-
 
135
	}
-
 
136
}
-
 
137
 
-
 
138
int main(int argc, char **argv)
-
 
139
{
160
		define_button(65536 * ((220/2)-(50)) + 140, 65536 * 140 + 25+12, RESTART, 0x9A9A9A);
140
    if (kolibri_libimg_init() == -1) 
161
		draw_text_sysNEW("Заново", 80, 145, strlen("Заново"), 0xB1, 0x000000);
141
    {
-
 
142
		printf("Can not load libimg.obj!\n");
162
		EndDraw();
-
 
163
}
-
 
164
 
143
		exit(1);
165
 
144
	}
166
 
145
    
167
void Button() {
-
 
168
		int id = get_os_button();
146
    load_pict();
169
		if (id == 1) exit(0); else
147
    
170
		if (id == RESTART) {
148
    draw_window();
171
			SetUp();
-
 
172
			vict = 0;
-
 
173
			draw_game_window();
-
 
174
		} else
-
 
175
		{
-
 
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;
-
 
184
				
-
 
185
			if (field[y][x]) field[y][x] = 0; else field[y][x] = 1;
-
 
186
			
-
 
187
			redraw_buttons();
-
 
188
		}
-
 
189
}
-
 
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
			{
149
    while(1)
220
				case evButton:
150
    {
221
					Button();
151
		switch(get_os_event())
222
					if (fridge_opened()) {
152
		{
223
						vict = 1;
153
			case evButton:
224
						debug_pr = 1;
154
				Button();
225
						draw_victory_window();
155
				
226
					}
-
 
227
					break;
156
				break;
228
			  
157
		  
229
				case evKey:
-
 
230
					get_key();
158
			case evKey:
231
					break;
159
				get_key();
-
 
160
				break;
232
				 
161
			 
233
				case evReDraw:
162
			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
>