Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8377 → Rev 8378

/programs/games/fridge/Tupfile.lua
9,5 → 9,8
table.insert(LIBDEPS, "../../../contrib/C_Layer/OBJ/<C_Layer>")
LIBS = LIBS .. " ../../../contrib/C_Layer/OBJ/loadlibimg.o"
 
-- Subsystem native
LDFLAGS = LDFLAGS .. " --subsystem native"
 
compile_gcc{"fridge.c"}
link_gcc("fridge")
/programs/games/fridge/fridge.c
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;
}