Subversion Repositories Kolibri OS

Rev

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
}