Subversion Repositories Kolibri OS

Rev

Rev 1808 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. #include "kolibri.h"
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. #include "string.h"
  6.  
  7. #include "gblib.h"
  8.  
  9. #include "car_01.h"
  10. #include "car_02.h"
  11. #include "donkey_01.h"
  12. #include "donkey_02.h"
  13. #include "az.h"
  14.  
  15. char STR_DONKEY[] = {"D O N K E Y  0.7"};
  16.  
  17. int start, paintbg, pause;
  18. int dox, doy;
  19. int drx, dry;
  20.  
  21. int drn, don;
  22.  
  23. int speed;
  24.  
  25.  
  26. GB_BMP screen, font, car01, car02, donkey01, donkey02, az;
  27.  
  28.  
  29. void az_putc(unsigned char c, int x, int y)
  30. {
  31. gb_image_set_t(&screen, x, y, &az, (c-'!')*11, 0, 11, 16, 0);
  32. }
  33.  
  34.  
  35.  
  36. void az_puts(unsigned char *s, int x, int y)
  37. {
  38. unsigned i;
  39. i = 0;
  40. while (*(s+i))
  41.         {
  42.         az_putc(*(s+i), x+i*11, y);
  43.         i++;
  44.         }
  45.  
  46. }
  47.  
  48.  
  49.  
  50. void game_start()
  51. {
  52. drx = -1;
  53. dry = 0;
  54. doy = random(40)+130;
  55.  
  56. dox = random(1);
  57. if (0 == dox)
  58.         dox--;
  59.  
  60. drn = don = 0;
  61. paintbg = 1;
  62.  
  63. speed = 0;
  64.  
  65. kol_sleep(30);
  66. }
  67.  
  68.  
  69. void screen_back()
  70. {
  71.  
  72. gb_bar(&screen, 0, 0, 320, 200, 0x888888);
  73.  
  74. gb_bar(&screen, 6, 6, 97-6, 195-6, 0x488888);
  75. gb_bar(&screen, 183, 6, 305-183, 195-6, 0x488888);
  76.  
  77. az_puts("Donkey", 6, 30);
  78. az_puts("Driver", 189, 30);
  79.  
  80. az_putc (don+'0', 5, 48);
  81. az_putc (drn/10+'0', 189, 48);
  82.  
  83. az_puts("Keys:", 189, 95);
  84. az_puts("Space Bar", 189, 116);
  85. az_puts("Enter", 189, 132);
  86. az_puts("Esc", 189, 148);
  87.  
  88.  
  89. gb_line(&screen, 100, 0, 100, 199, 0xffffff);
  90. gb_line(&screen, 180, 0, 180, 199, 0xffffff);
  91.  
  92. paintbg = 0;
  93. }
  94.  
  95.  
  96.  
  97. void screen_draw()
  98. {
  99.  
  100. int y;
  101.  
  102. if (-1 == pause)
  103.         {
  104.         screen_back();
  105.  
  106.         gb_bar(&screen, 4, 20, 255, 60, 0xee0000);
  107.         az_puts ("P A U S E", 5, 30);
  108.         az_puts ("Press Enter to continue", 5, 60);
  109.  
  110.         kol_screen_wait_rr();
  111.         kol_paint_image( 0, 0, 320, 200, screen.bmp);
  112.  
  113.         paintbg = 1;
  114.         return;
  115.         }
  116.  
  117. if (don > 9)
  118.         {
  119.         gb_bar(&screen, 0, 0, 320, 200, 0x880000);
  120.         az_puts ("G A M E    O V E R", 5, 30);
  121.  
  122.         kol_screen_wait_rr();
  123.         kol_paint_image( 0, 0, 320, 200, screen.bmp);
  124.  
  125.         kol_sleep(150);
  126.         game_start();
  127.         start = 1;
  128.         }
  129.  
  130. if (drn > 99)
  131.         {
  132.         gb_bar(&screen, 0, 0, 320, 200, 0x88);
  133.         az_puts ("CONGRATULATIONS !!!", 5, 30);
  134.  
  135.         kol_screen_wait_rr();
  136.         kol_paint_image( 0, 0, 320, 200, screen.bmp);
  137.  
  138.         kol_sleep(150);
  139.         game_start();
  140.         start = 1;
  141.         }
  142.  
  143. if (drn > 9)
  144.         speed = 1;
  145.  
  146. if (drn > 84)
  147.         speed = 2;
  148.  
  149.  
  150. if (start)
  151.         {
  152.         if (!paintbg)
  153.                 return;
  154.  
  155.         gb_bar(&screen, 0, 0, 320, 200, 0x55);
  156.  
  157.         az_puts ( STR_DONKEY, 5, 30);
  158.         az_puts ("remake for KolibriOS", 5, 78);
  159.         az_puts ("by Albom", 5, 78+16);
  160.  
  161.         az_puts ("Press Space Bar", 5, 140);
  162.         az_puts ("to continue", 5, 156);
  163.  
  164.  
  165.         kol_screen_wait_rr();
  166.         kol_paint_image( 0, 0, 320, 200, screen.bmp);
  167.         paintbg = 0;
  168.         return;
  169.         }
  170.  
  171. if (paintbg)
  172.         screen_back();
  173. else
  174.         gb_bar(&screen, 102, 0, 180-102, 200, 0x888888);
  175.  
  176. for (y=10; y<180; y+=20)
  177.         gb_line(&screen, 140, y-10*(doy%2), 140, y+10-10*(doy%2), 0xffffff);
  178.  
  179. doy-=5;
  180. if (doy < -50)
  181.         {
  182.  
  183.         dox = random(1);
  184.         if (0 == dox)
  185.                 dox--;
  186.  
  187.         doy = random(40)+130;
  188.         dry += 10;
  189.         drn++;
  190.         if (0 == drn%10)
  191.                 dry = 0;
  192.         paintbg = 1;
  193.         }
  194.  
  195. if ((drx == dox)&&(dry > doy-15)&&(dry < doy+15))
  196.         {
  197.         don++;
  198.         dry = 0;
  199.         drn /= 10;
  200.         drn *= 10;
  201.         for (y = 0; y<2; y++)
  202.                 {
  203.                 kol_sleep(8);
  204.                 screen_back();
  205.                 az_puts("BOOM!", 6, 120);
  206.  
  207.                 gb_image_set_t(&screen, 140-13-(y+1)*20, 120-dry+(y+1)*20, &car01, 0, 0, 13, 34, 0x888888);
  208.                 gb_image_set_t(&screen, 120+(y+3)*20, 120-dry+(y+1)*20, &car02, 0, 0, 13, 34, 0x888888);
  209.  
  210.                 gb_image_set_t(&screen, 140-17-(y+1)*20, 120-(y+1)*20, &donkey01, 0, 0, 17, 17, 0x888888);
  211.                 gb_image_set_t(&screen, 140+(y+3)*20, 120-(y+1)*20, &donkey02, 0, 0, 13, 17, 0x888888);
  212.  
  213.                 kol_screen_wait_rr();
  214.                 kol_paint_image(0, 0, 320, 200, screen.bmp);
  215.                 }
  216.  
  217.         dox = random(1);
  218.         if (0 == dox)
  219.                 dox--;
  220.  
  221.         doy = random(40)+130;
  222.         paintbg = 1;
  223.         }
  224.  
  225. gb_image_set_t(&screen, 140-13-drx*20, 130-dry, &car01, 0, 0, 13, 34, 0x888888);
  226. gb_image_set_t(&screen, 140-drx*20, 130-dry, &car02, 0, 0, 13, 34, 0x888888);
  227.  
  228. gb_image_set_t(&screen, 140-17-dox*20, 130-doy, &donkey01, 0, 0, 17, 17, 0x888888);
  229. gb_image_set_t(&screen, 140-dox*20, 130-doy, &donkey02, 0, 0, 13, 17, 0x888888);
  230.  
  231. kol_screen_wait_rr();
  232. kol_paint_image(0, 0, 320, 200, screen.bmp);
  233.  
  234. }
  235.  
  236.  
  237.  
  238. void wnd_draw()
  239. {
  240. kol_paint_start();
  241. kol_wnd_define(280, 200, 328, 204+kol_skin_height(), 0x34888888);
  242. kol_wnd_caption(STR_DONKEY);
  243. screen_draw();
  244. kol_paint_end();
  245. }
  246.  
  247.  
  248.  
  249.  
  250. void kol_main()
  251. {
  252.  
  253. unsigned event;
  254. unsigned key;
  255.  
  256. srand(kol_system_time_get()<<8);
  257. start = 1;
  258. paintbg = 1;
  259.  
  260. pause = 1;
  261.  
  262. speed = 0;
  263.  
  264. screen.bmp = malloc(320*200*3);
  265. screen.w = 320;
  266. screen.h = 200;
  267.  
  268. car01.bmp = CAR_01;
  269. car01.w = 13;
  270. car01.h = 34;
  271.  
  272. car02.bmp = CAR_02;
  273. car02.w = 13;
  274. car02.h = 34;
  275.  
  276. donkey01.bmp = DONKEY_01;
  277. donkey01.w = 17;
  278. donkey01.h = 17;
  279.  
  280. donkey02.bmp = DONKEY_02;
  281. donkey02.w = 13;
  282. donkey02.h = 17;
  283.  
  284. az.bmp = AZ;
  285. az.w = 1012;
  286. az.h = 16;
  287.  
  288.  
  289. wnd_draw();
  290.  
  291. for (;;)
  292.         {
  293.  
  294.         kol_sleep(6-speed);
  295.         screen_draw();
  296.         event = kol_event_check();
  297.  
  298.         switch (event)
  299.                 {
  300.                 case 1:
  301.                         paintbg = 1;
  302.                         wnd_draw();
  303.                         break;
  304.  
  305.                 case 2:
  306.                         key = (kol_key_get() & 0xff00)>>8;
  307.                         if (start && (32==key))
  308.                                 {
  309.                                 start = 0;
  310.                                 game_start();
  311.                                 screen_draw();
  312.                                 break;
  313.                                 }
  314.  
  315.                         if (27 == key)
  316.                                 {
  317.                                 if (-1 == pause)
  318.                                         break;
  319.                                 start = 1;
  320.                                 paintbg = 1;
  321.                                 break;
  322.                                 }
  323.  
  324.                         if (32 == key)
  325.                                 {
  326.                                 if (-1 == pause)
  327.                                         break;
  328.                                 drx *= -1;
  329.                                 screen_draw();
  330.                                 }
  331.  
  332.                         if ((!start) && (13 == key))
  333.                                 {
  334.                                 pause *= -1;
  335.                                 screen_draw();
  336.                                 }
  337.  
  338.  
  339.                         break;
  340.  
  341.                 case 3:
  342.                         if ( 1 == (kol_btn_get() & 0xff00)>>8 )
  343.                                 kol_exit();
  344.                         break;
  345.  
  346.                 };
  347.         }
  348.  
  349. }
  350.