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; |
|
}; |
} |
|
} |
|
//===================================== |