#include "system/kolibri.h" #include "system/stdlib.h" #include "system/string.h" #include "system/gblib.h" #include "car_01.h" #include "car_02.h" #include "donkey_01.h" #include "donkey_02.h" #include "az.h" char STR_DONKEY[] = {"D O N K E Y 0.8"}; int start, paintbg, pause; int dox, doy; int drx, dry; int drn, don; int speed; char snd_ok[]={0x08, 0x89, 0x0f, 0}; char snd_game_over[]={0x08, 0xa9, 0x0f, 0x09, 0x99, 0x0f, 0x11, 0x59, 0x0f, 0}; GB_BMP screen, font, car01, car02, donkey01, donkey02, az; void az_putc(unsigned char c, int x, int y) { gb_image_set_t(&screen, x, y, &az, (c-'!')*11, 0, 11, 16, 0); } void az_puts(unsigned char *s, int x, int y) { unsigned i; i = 0; while (*(s+i)) { az_putc(*(s+i), x+i*11, y); i++; } } void game_start() { drx = -1; dry = 0; doy = random(40)+130; dox = random(1); if (0 == dox) dox--; drn = don = 0; paintbg = 1; speed = 0; kol_sleep(30); } void screen_back() { gb_bar(&screen, 0, 0, 320, 200, 0x888888); gb_bar(&screen, 6, 6, 97-6, 195-6, 0x488888); gb_bar(&screen, 183, 6, 305-183, 195-6, 0x488888); az_puts("Donkey", 6, 30); az_puts("Driver", 189, 30); az_putc (don+'0', 5, 48); az_putc (drn/10+'0', 189, 48); az_puts("Keys:", 189, 95); az_puts("Space Bar", 189, 116); az_puts("Enter", 189, 132); az_puts("Esc", 189, 148); gb_line(&screen, 100, 0, 100, 199, 0xffffff); gb_line(&screen, 180, 0, 180, 199, 0xffffff); paintbg = 0; } void screen_draw() { int y; if (-1 == pause) { screen_back(); gb_bar(&screen, 4, 20, 255, 60, 0xee0000); az_puts ("P A U S E", 5, 30); az_puts ("Press Enter to continue", 5, 60); kol_screen_wait_rr(); kol_paint_image( 0, 0, 320, 200, screen.bmp); paintbg = 1; return; } if (don > 9) { gb_bar(&screen, 0, 0, 320, 200, 0x880000); az_puts ("G A M E O V E R", 5, 30); kol_screen_wait_rr(); kol_paint_image( 0, 0, 320, 200, screen.bmp); kol_sleep(150); game_start(); start = 1; } if (drn > 99) { gb_bar(&screen, 0, 0, 320, 200, 0x88); az_puts ("CONGRATULATIONS !!!", 5, 30); kol_screen_wait_rr(); kol_paint_image( 0, 0, 320, 200, screen.bmp); kol_sleep(150); game_start(); start = 1; } if (drn > 9) speed = 1; if (drn > 84) speed = 2; if (start) { if (!paintbg) return; gb_bar(&screen, 0, 0, 320, 200, 0x55); az_puts ( STR_DONKEY, 5, 30); az_puts ("remake for KolibriOS", 5, 78); az_puts ("by Albom", 5, 78+16); az_puts ("Press Space Bar", 5, 140); az_puts ("to continue", 5, 156); kol_screen_wait_rr(); kol_paint_image( 0, 0, 320, 200, screen.bmp); paintbg = 0; return; } if (paintbg) screen_back(); else gb_bar(&screen, 102, 0, 180-102, 200, 0x888888); for (y=10; y<180; y+=20) gb_line(&screen, 140, y-10*(doy%2), 140, y+10-10*(doy%2), 0xffffff); doy-=5; if (doy < -50) { dox = random(1); if (0 == dox) dox--; doy = random(40)+130; dry += 10; drn++; if (0 == drn%10) dry = 0; paintbg = 1; } if ((drx == dox)&&(dry > doy-15)&&(dry < doy+15)) { kol_sound_speaker(snd_game_over); don++; dry = 0; drn /= 10; drn *= 10; for (y = 0; y<2; y++) { kol_sleep(8); screen_back(); az_puts("BOOM!", 6, 120); gb_image_set_t(&screen, 140-13-(y+1)*20, 120-dry+(y+1)*20, &car01, 0, 0, 13, 34, 0x888888); gb_image_set_t(&screen, 120+(y+3)*20, 120-dry+(y+1)*20, &car02, 0, 0, 13, 34, 0x888888); gb_image_set_t(&screen, 140-17-(y+1)*20, 120-(y+1)*20, &donkey01, 0, 0, 17, 17, 0x888888); gb_image_set_t(&screen, 140+(y+3)*20, 120-(y+1)*20, &donkey02, 0, 0, 13, 17, 0x888888); kol_screen_wait_rr(); kol_paint_image(0, 0, 320, 200, screen.bmp); } dox = random(1); if (0 == dox) dox--; doy = random(40)+130; paintbg = 1; } gb_image_set_t(&screen, 140-13-drx*20, 130-dry, &car01, 0, 0, 13, 34, 0x888888); gb_image_set_t(&screen, 140-drx*20, 130-dry, &car02, 0, 0, 13, 34, 0x888888); gb_image_set_t(&screen, 140-17-dox*20, 130-doy, &donkey01, 0, 0, 17, 17, 0x888888); gb_image_set_t(&screen, 140-dox*20, 130-doy, &donkey02, 0, 0, 13, 17, 0x888888); kol_screen_wait_rr(); kol_paint_image(0, 0, 320, 200, screen.bmp); } void wnd_draw() { kol_paint_start(); kol_wnd_define(280, 200, 328, 204+kol_skin_height(), 0x34888888); kol_wnd_caption(STR_DONKEY); screen_draw(); kol_paint_end(); } void kol_main() { unsigned event; unsigned key; srand(kol_system_time_get()<<8); start = 1; paintbg = 1; pause = 1; speed = 0; screen.bmp = malloc(320*200*3); screen.w = 320; screen.h = 200; car01.bmp = CAR_01; car01.w = 13; car01.h = 34; car02.bmp = CAR_02; car02.w = 13; car02.h = 34; donkey01.bmp = DONKEY_01; donkey01.w = 17; donkey01.h = 17; donkey02.bmp = DONKEY_02; donkey02.w = 13; donkey02.h = 17; az.bmp = AZ; az.w = 1012; az.h = 16; wnd_draw(); for (;;) { kol_sleep(6-speed); screen_draw(); event = kol_event_check(); switch (event) { case 1: paintbg = 1; wnd_draw(); break; case 2: key = (kol_key_get() & 0xff00)>>8; if (start && (32==key)) { start = 0; game_start(); screen_draw(); break; } if (27 == key) { if (-1 == pause) break; start = 1; paintbg = 1; break; } if (32 == key) { if (-1 == pause) break; kol_sound_speaker(snd_ok); drx *= -1; screen_draw(); } if ((!start) && (13 == key)) { pause *= -1; screen_draw(); } break; case 3: if ( 1 == (kol_btn_get() & 0xff00)>>8 ) kol_exit(); break; }; } }