Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 949 → Rev 950

/programs/games/piton/c_code.c
0,0 → 1,381
 
#include "kolibri.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
#include "gblib.h"
#include "az3.h"
#include "az4.h"
 
//=====================================
 
#define scrw (8*32)
#define scrh (16+8*32)
 
//=====================================
 
typedef struct
{
char x;
char y;
} p_point;
 
//=====================================
 
char STR_TITLE[] = {"Piton 0.3"};
 
int mode;
char score[10];
 
char scr[scrw*scrh*3];
GB_BMP screen, az, azr;
 
char M[32][32];
p_point z[32*32];
p_point v;
p_point r;
int len;
 
unsigned color[] = {0xcccccc, 0xaa2222, 0x44bb, 0x7788aa};
 
//=====================================
 
void az_putc(unsigned char c, int x, int y)
{
if (c > 191)
gb_image_set_t(&screen, x, y, &azr, (c-192)*8, 1, 8, 14, 0);
else
gb_image_set_t(&screen, x, y, &az, (c-' ')*8, 1, 8, 14, 0);
}
 
//=====================================
 
void az_puts(unsigned char *s, int x, int y)
{
unsigned i;
i = 0;
while (*(s+i))
{
az_putc(*(s+i), x+i*9, y);
i++;
}
 
}
 
//=====================================
 
az_puti(int n, int x, int y)
{
char c;
int i = 0;
do
{
c = n % 10 + '0';
az_putc(c, x-9*i, y);
i++;
}
while ((n /= 10) > 0);
}
 
//=====================================
 
void clear()
{
 
int x, y;
 
for (y = 0; y < 32; y++)
for (x = 0; x < 32; x++)
M[x][y] = 0;
 
for (y = 0; y < 32; y++)
{
M[0][y] = 1;
M[31][y] = 1;
M[y][0] = 1;
M[y][31] = 1;
}
}
 
//=====================================
 
void put_z()
{
int i;
 
for (i = 0; i < len; i++)
M[z[i].x][z[i].y] = 2;
 
}
 
//=====================================
 
void put_r()
{
M[r.x][r.y] = 3;
}
 
//=====================================
 
void rabbit_new()
{
 
for (;;)
{
r.x = rand()%29+1;
r.y = rand()%29+1;
 
if (0 == M[r.x][r.y])
return;
}
}
//=====================================
 
void game_start()
{
 
clear();
 
v.x = 1;
v.y = 0;
 
len = 2;
 
z[0].x = 16;
z[0].y = 16;
 
z[1].x = 15;
z[1].y = 16;
 
rabbit_new();
put_r();
put_z();
 
kol_sleep(30);
}
 
//=====================================
 
void press_space()
{
az_puts("íàæìèòå Ïðîáåë", 10, 180);
az_puts("÷òîáû ïðîäîëæèòü", 10, 195);
}
 
//=====================================
 
void screen_draw()
{
 
int x, y;
 
switch ( mode)
{
case 0:
gb_bar(&screen, 0, 0, scrw, scrh, 0xbb);
az_puts("Ï È Ò Î Í 0.3", 10, 60);
az_puts("ðåìåéê äëÿ ÎÑ Êîëèáðè", 10, 120);
az_puts("àâòîð: À. Áîãîìàç", 10, 135);
press_space();
break;
 
case 1:
gb_bar(&screen, 0, 0, scrw, 16, 0xbb);
az_puts("Î×ÊÈ:", 10, 0);
az_puti(len-2, 120, 0);
for (y = 0; y < 32; y++)
for (x = 0; x < 32; x++)
gb_bar(&screen, x*8, y*8+16, 8, 8, color[ M[x][y] ]);
 
break;
 
case 2:
gb_bar(&screen, 0, 0, scrw, scrh, 0xbb0000);
az_puts("Ï À Ó Ç À", 10, 60);
press_space();
break;
 
case 3:
gb_bar(&screen, 0, 0, scrw, scrh, 0xee0000);
az_puts("Ê Î Í Å Ö È Ã Ð Û", 10, 60);
kol_screen_wait_rr();
kol_paint_image(0, 0, scrw, scrh, screen.bmp);
kol_sleep(120);
mode = 0;
return;
};
 
kol_screen_wait_rr();
kol_paint_image(0, 0, scrw, scrh, screen.bmp);
 
}
 
//=====================================
 
void wnd_draw()
{
kol_paint_start();
kol_wnd_define(280, 30, scrw+8, scrh+kol_skin_height()+4, 0x34888888);
kol_wnd_caption(STR_TITLE);
screen_draw();
kol_paint_end();
}
 
//=====================================
 
int piton_move()
{
int i;
 
for (i = len-1; i > 0; i--)
{
z[i].x = z[i-1].x;
z[i].y = z[i-1].y;
}
 
z[0].x += v.x;
z[0].y += v.y;
 
if ((1 == M[z[0].x][z[0].y])||(2 == M[z[0].x][z[0].y]))
return -1;
 
if (3 == M[z[0].x][z[0].y])
{
rabbit_new();
return 1;
}
 
 
clear();
put_r();
put_z();
 
return 0;
}
 
//=====================================
 
void kol_main()
{
 
unsigned event, key;
int res;
 
srand(kol_system_time_get()<<8);
 
screen.bmp = scr;
screen.w = scrw;
screen.h = scrh;
 
az.bmp = AZ3;
az.w = 744;
az.h = 15;
 
azr.bmp = AZ4;
azr.w = 512;
azr.h = 15;
 
mode = 0;
 
for (;;)
{
kol_sleep(9);
 
if ( 1 == mode)
{
res = piton_move();
 
if (1 == res)
len++;
 
if (-1 == res)
mode = 3;
 
}
screen_draw();
event = kol_event_check();
 
switch (event)
{
case 1:
wnd_draw();
break;
 
case 2:
key = (kol_key_get() & 0xff00)>>8;
 
switch (mode)
{
 
case 0:
if (32 == key)
{
mode = 1;
game_start();
}
break;
 
case 1:
switch (key)
{
case 27:
mode = 0;
break;
case 32:
mode = 2;
break;
case 178:
if (0 == v.y)
{
v.x = 0;
v.y = -1;
}
break;
case 177:
if (0 == v.y)
{
v.x = 0;
v.y = 1;
}
break;
case 176:
if (0 == v.x)
{
v.x = -1;
v.y = 0;
}
break;
case 179:
if (0 == v.x)
{
v.x = 1;
v.y = 0;
}
break;
};
break;
 
case 2:
if (32 == key)
mode = 1;
break;
 
};
 
break;
 
case 3:
if ( 1 == (kol_btn_get() & 0xff00)>>8 )
kol_exit();
break;
 
};
}
 
}
 
//=====================================