1,13 → 1,15 |
// Includes // |
#include <kos32sys.h> |
#include <string.h> |
#include <stdlib.h> |
#include <stdio.h> |
#include <time.h> |
|
#include <kolibri_libimg.h> |
/* |
#include "mp3.h" |
*/ |
//EVENTS LOOK LIKE IN C-- |
// #include "mp3.h" |
|
|
// C-- event defines // |
#define evReDraw 1 |
#define evKey 2 |
#define evButton 3 |
19,30 → 21,29 |
#define evDebug 9 |
|
|
#define RESTART 99 |
// Code // |
#define button_color 0xbbbbbb |
#define button_size 44 |
|
#define b_color 0xbbbbbb |
#define _size 4 |
#define bs 44 |
#define field_size 4 |
|
int field[_size][_size] = { |
int field[field_size][field_size] = { |
{0, 0, 0, 1}, |
{0, 0, 1, 0}, |
{0, 0, 0, 1}, |
{1, 0, 0, 0} |
}; |
short vict = 0; |
short debug_pr = 0; |
|
char* title = "Fridge"; |
#define BUTTON_RESTART 99 |
|
short victory = 0; |
|
// PICTURES LOADING CODE |
// Load pictures // |
char temp_path[4096]; |
char* HOR; |
char* VER; |
char* HORIZONTAL_IMAGE; |
char* VERTICAL_IMAGE; |
|
|
char* load_file_inmem(char* fname, int32_t* read_sz) |
{ |
FILE *f = fopen(fname, "rb"); |
52,13 → 53,13 |
if (fseek(f, 0, SEEK_END)) { |
exit(1); |
} |
int filesize = ftell(f); |
int filefield_size = ftell(f); |
rewind(f); |
char* fdata = malloc(filesize); |
char* fdata = malloc(filefield_size); |
if(!fdata) { |
exit(1); |
} |
*read_sz = fread(fdata, 1, filesize, f); |
*read_sz = fread(fdata, 1, filefield_size, f); |
if (ferror(f)) { |
exit(1); |
} |
67,9 → 68,8 |
return fdata; |
} |
|
|
void load_pict() { |
const int icon_rgb_size = bs*bs; |
void load_pictures() { |
const int icon_rgb_field_size = button_size*button_size; |
char *image_data, |
*filedata; |
|
77,49 → 77,50 |
|
int32_t read_bytes; |
filedata = load_file_inmem(temp_path, &read_bytes); |
HOR = malloc(icon_rgb_size * 3); |
HORIZONTAL_IMAGE = malloc(icon_rgb_field_size * 3); |
|
image_data = img_decode(filedata, read_bytes, 0); |
|
img_to_rgb2(image_data, HOR); |
img_to_rgb2(image_data, HORIZONTAL_IMAGE); |
|
|
strcpy(temp_path, "v.png"); |
|
filedata = load_file_inmem(temp_path, &read_bytes); |
VER = malloc(icon_rgb_size * 3); |
VERTICAL_IMAGE = malloc(icon_rgb_field_size * 3); |
|
image_data = img_decode(filedata, read_bytes, 0); |
|
img_to_rgb2(image_data, VER); |
img_to_rgb2(image_data, VERTICAL_IMAGE); |
|
img_destroy(image_data); |
free(filedata); |
} |
// END OF PICTURES LOAD CODE |
|
|
|
// GUI functions // |
void redraw_buttons() { |
for (int j = 5, yy = 0; yy<_size; j+=bs, yy++) |
for (int i = 15, xx = 0; xx<_size; i+=bs, xx++) |
for (int j = 5, x = 0; x<field_size; j+=button_size, x++) |
for (int i = 15, y = 0; y<field_size; i+=button_size, y++) |
{ |
define_button(65536 * i + (bs-1), 65536 * j + (bs-1), ((xx+1)*10)+yy+1, b_color); |
// 0x50 mean button without drawing, but with border when press |
// ((y+1)*10)+x+1 mean button id |
define_button(65536 * i + (button_size), 65536 * j + (button_size), (0x50 << 24) | ((y+1)*10)+x+1, 0); |
|
if (field[yy][xx]) draw_bitmap(VER, i, j, bs, bs); |
else draw_bitmap(HOR, i, j, bs, bs); |
if (field[x][y]) draw_bitmap(VERTICAL_IMAGE, i, j, button_size, button_size); |
else draw_bitmap(HORIZONTAL_IMAGE, i, j, button_size, button_size); |
} |
} |
|
void draw_game_window(){ |
BeginDraw(); |
DrawWindow(215,100,220, 220,title,b_color,0x34); |
DrawWindow(215, 100, 220, 220, title, button_color, 0x34); |
redraw_buttons(); |
EndDraw(); |
} |
|
|
|
// Need refactoring: |
static inline |
void draw_text_sysNEW(const char *text, int x, int y, int len, int fontType, color_t color) |
{ |
132,27 → 133,23 |
} |
|
void SetUp() { |
for (int y = 0; y<_size; y++) |
for (int x = 0; x<_size; x++) |
for (int y = 0; y<field_size; y++) |
for (int x = 0; x<field_size; x++) |
{ |
field[x][y] = rand() % 2; |
} |
} |
|
// Need refactoring: |
void draw_victory_window() { |
BeginDraw(); |
DrawWindow(215,100,220, 220,title,b_color,0x34); |
DrawWindow(215,100,220, 220,title,button_color,0x34); |
|
draw_text_sysNEW("Ну вы, и", 10, 10, strlen("Ну вы, и"), 0xB1, 0x000000); |
draw_text_sysNEW("медвежатник,", 10, 50, strlen("Ну вы, и медвежатник,"), 0xB1, 0x000000); |
draw_text_sysNEW("Шеф!", 12, 90, strlen("Шеф!"), 0xB1, 0x000000); |
|
if (debug_pr) { |
printf("Fridge: Very great!\n"); |
debug_pr = 0; |
} |
|
define_button(65536 * ((220/2)-(50)) + 140, 65536 * 140 + 25+12, RESTART, 0x9A9A9A); |
define_button(65536 * ((220/2)-(50)) + 140, 65536 * 140 + 25+12, BUTTON_RESTART, 0x9A9A9A); |
draw_text_sysNEW("Заново", 80, 145, strlen("Заново"), 0xB1, 0x000000); |
EndDraw(); |
} |
162,7 → 159,7 |
void Button() { |
int id = get_os_button(); |
if (id == 1) exit(0); else |
if (id == RESTART) { |
if (id == BUTTON_RESTART) { |
SetUp(); |
vict = 0; |
draw_game_window(); |
173,10 → 170,10 |
int x = (id/10)-1; |
int y = (id%10)-1; |
|
for (int i = 0; i<_size; i++) |
for (int i = 0; i<field_size; i++) |
if (field[i][x]) field[i][x] = 0; else field[i][x] = 1; |
|
for (int i = 0; i<_size; i++) |
for (int i = 0; i<field_size; i++) |
if (field[y][i]) field[y][i] = 0; else field[y][i] = 1; |
|
if (field[y][x]) field[y][x] = 0; else field[y][x] = 1; |
188,8 → 185,8 |
|
int fridge_opened() { |
int fr_op = 0; |
for (int y = 0; y<_size; y++) |
for (int x = 0; x<_size; x++) |
for (int y = 0; y<field_size; y++) |
for (int x = 0; x<field_size; x++) |
{ |
fr_op += field[x][y]; |
} |
207,8 → 204,9 |
printf("Can not load libimg.obj!\n"); |
exit(1); |
} |
load_pict(); |
|
load_pictures(); |
|
draw_game_window(); |
while(1) |
{ |
217,8 → 215,7 |
case evButton: |
Button(); |
if (fridge_opened()) { |
vict = 1; |
debug_pr = 1; |
victory = 1; |
draw_victory_window(); |
} |
break; |
228,7 → 225,7 |
break; |
|
case evReDraw: |
if (!vict) draw_game_window(); |
if (!victory) draw_game_window(); |
else draw_victory_window(); |
break; |
} |