Subversion Repositories Kolibri OS

Rev

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

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