Subversion Repositories Kolibri OS

Rev

Rev 1810 | 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. #include "az3.h"
  9. #include "az4.h"
  10.  
  11. //=====================================
  12.  
  13. #define scrw (8*32)
  14. #define scrh (16+8*32)
  15.  
  16. //=====================================
  17.  
  18. typedef struct
  19. {
  20. char x;
  21. char y;
  22. } p_point;
  23.  
  24. //=====================================
  25.  
  26. char STR_TITLE[] = {"Piton 0.3"};
  27.  
  28. int mode;
  29. char score[10];
  30.  
  31. char scr[scrw*scrh*3];
  32. GB_BMP screen, az, azr;
  33.  
  34. char M[32][32];
  35. p_point z[32*32];
  36. p_point v;
  37. p_point r;
  38. int len;
  39.  
  40. unsigned color[] = {0xcccccc, 0xaa2222, 0x44bb, 0x7788aa};
  41.  
  42.  
  43. //=====================================
  44.  
  45. void az_putc(unsigned char c, int x, int y)
  46. {
  47. if (c > 191)
  48.         gb_image_set_t(&screen, x, y, &azr, (c-192)*8, 1, 8, 14, 0);
  49. else
  50.         gb_image_set_t(&screen, x, y, &az, (c-' ')*8, 1, 8, 14, 0);
  51. }
  52.  
  53. //=====================================
  54.  
  55. void az_puts(unsigned char *s, int x, int y)
  56. {
  57. unsigned i;
  58. i = 0;
  59. while (*(s+i))
  60.         {
  61.         az_putc(*(s+i), x+i*9, y);
  62.         i++;
  63.         }
  64.  
  65. }
  66.  
  67. //=====================================
  68.  
  69. az_puti(int n, int x, int y)
  70. {
  71. char c;
  72. int i = 0;
  73. do
  74.         {
  75.         c = n % 10 + '0';
  76.         az_putc(c, x-9*i, y);
  77.         i++;
  78.         }
  79.         while ((n /= 10) > 0);
  80. }
  81.  
  82. //=====================================
  83.  
  84. void clear()
  85. {
  86.  
  87. int x, y;
  88.  
  89. for (y = 0; y < 32; y++)
  90.         for (x = 0; x < 32; x++)
  91.                 M[x][y] = 0;
  92.  
  93. for (y = 0; y < 32; y++)
  94.         {
  95.         M[0][y] = 1;
  96.         M[31][y] = 1;
  97.         M[y][0] = 1;
  98.         M[y][31] = 1;
  99.         }
  100. }
  101.  
  102. //=====================================
  103.  
  104. void put_z()
  105. {
  106. int i;
  107.  
  108. for (i = 0; i < len; i++)
  109.         M[z[i].x][z[i].y] = 2;
  110.  
  111. }
  112.  
  113. //=====================================
  114.  
  115. void put_r()
  116. {
  117. M[r.x][r.y] = 3;
  118. }
  119.  
  120. //=====================================
  121.  
  122. void rabbit_new()
  123. {
  124.  
  125. for (;;)
  126.         {
  127.         r.x = rand()%29+1;
  128.         r.y = rand()%29+1;
  129.  
  130.         if (0 == M[r.x][r.y])
  131.                 return;
  132.         }
  133. }
  134. //=====================================
  135.  
  136. void game_start()
  137. {
  138.  
  139. clear();
  140.  
  141. v.x = 1;
  142. v.y = 0;
  143.  
  144. len = 2;
  145.  
  146. z[0].x = 16;
  147. z[0].y = 16;
  148.  
  149. z[1].x = 15;
  150. z[1].y = 16;
  151.  
  152. rabbit_new();
  153. put_r();
  154. put_z();
  155.  
  156. kol_sleep(30);
  157. }
  158.  
  159. //=====================================
  160.  
  161. void press_space()
  162. {
  163. az_puts("íàæìèòå Ïðîáåë", 10, 180);
  164. az_puts("÷òîáû ïðîäîëæèòü", 10, 195);
  165. }
  166.  
  167. //=====================================
  168.  
  169. void screen_draw()
  170. {
  171.  
  172. int x, y;
  173.  
  174. switch ( mode)
  175.         {
  176.         case 0:
  177.                 gb_bar(&screen, 0, 0, scrw, scrh, 0xbb);
  178.                 az_puts("Ï È Ò Î Í   0.3", 10, 60);
  179.                 az_puts("ðåìåéê äëÿ ÎÑ Êîëèáðè", 10, 120);
  180.                 az_puts("àâòîð: À. Áîãîìàç", 10, 135);
  181.                 press_space();
  182.                 break;
  183.        
  184.  
  185.         case 1:
  186.                 gb_bar(&screen, 0, 0, scrw, 16, 0xbb);
  187.                 az_puts("Î×ÊÈ:", 10, 0);
  188.                 az_puti(len-2, 120, 0);
  189.                 for (y = 0; y < 32; y++)
  190.                         for (x = 0; x < 32; x++)
  191.                                 gb_bar(&screen, x*8, y*8+16, 8, 8, color[ M[x][y] ]);
  192.  
  193.                 break;
  194.  
  195.         case 2:
  196.                 gb_bar(&screen, 0, 0, scrw, scrh, 0xbb0000);
  197.                 az_puts("Ï À Ó Ç À", 10, 60);
  198.                 press_space();
  199.                 break;
  200.  
  201.         case 3:
  202.                 gb_bar(&screen, 0, 0, scrw, scrh, 0xee0000);
  203.                 az_puts("Ê Î Í Å Ö    È Ã Ð Û", 10, 60);
  204.                 kol_screen_wait_rr();
  205.                 kol_paint_image(0, 0, scrw, scrh, screen.bmp);
  206.                 kol_sleep(120);
  207.                 mode = 0;
  208.                 return;
  209.         };
  210.  
  211. kol_screen_wait_rr();
  212. kol_paint_image(0, 0, scrw, scrh, screen.bmp);
  213.  
  214. }
  215.  
  216. //=====================================
  217.  
  218. void wnd_draw()
  219. {
  220. kol_paint_start();
  221. kol_wnd_define(280, 30, scrw+8, scrh+kol_skin_height()+4, 0x34888888);
  222. kol_wnd_caption(STR_TITLE);
  223. screen_draw();
  224. kol_paint_end();
  225. }
  226.  
  227. //=====================================
  228.  
  229. int piton_move()
  230. {
  231. int i;
  232.  
  233. for (i = len-1; i > 0; i--)
  234.         {
  235.         z[i].x = z[i-1].x;
  236.         z[i].y = z[i-1].y;
  237.         }
  238.  
  239. z[0].x += v.x;
  240. z[0].y += v.y;
  241.  
  242. if ((1 == M[z[0].x][z[0].y])||(2 == M[z[0].x][z[0].y]))
  243.         return -1;
  244.  
  245. if (3 == M[z[0].x][z[0].y])
  246.         {
  247.         rabbit_new();
  248.         return 1;
  249.         }
  250.  
  251.  
  252. clear();
  253. put_r();
  254. put_z();
  255.  
  256. return 0;
  257. }
  258.  
  259. //=====================================
  260.  
  261. void kol_main()
  262. {
  263.  
  264. unsigned event, key;
  265. int res;
  266.  
  267. srand(kol_system_time_get()<<8);
  268.  
  269. screen.bmp = scr;
  270. screen.w = scrw;
  271. screen.h = scrh;
  272.  
  273. az.bmp = AZ3;
  274. az.w = 744;
  275. az.h = 15;
  276.  
  277. azr.bmp = AZ4;
  278. azr.w = 512;
  279. azr.h = 15;
  280.  
  281. mode = 0;
  282.  
  283. for (;;)
  284.         {
  285.         kol_sleep(9);
  286.  
  287.         if ( 1 == mode)
  288.                 {
  289.                 res = piton_move();
  290.  
  291.                 if (1 == res)
  292.                         len++;
  293.  
  294.                 if (-1 == res)
  295.                         mode = 3;
  296.  
  297.                 }
  298.        
  299.         screen_draw();
  300.         event = kol_event_check();
  301.  
  302.         switch (event)
  303.                 {
  304.                 case 1:
  305.                         wnd_draw();
  306.                         break;
  307.  
  308.                 case 2:
  309.                         key = (kol_key_get() & 0xff00)>>8;
  310.  
  311.                         switch (mode)
  312.                                 {
  313.  
  314.                                 case 0:
  315.                                         if (32 == key)
  316.                                                 {
  317.                                                 mode = 1;
  318.                                                 game_start();
  319.                                                 }
  320.                                         break;
  321.  
  322.                                 case 1:
  323.                                         switch (key)
  324.                                                 {
  325.                                                 case 27:
  326.                                                         mode = 0;
  327.                                                         break;
  328.                                                 case 32:
  329.                                                         mode = 2;
  330.                                                         break;
  331.                                                 case 178:
  332.                                                         if (0 == v.y)
  333.                                                                 {
  334.                                                                 v.x = 0;
  335.                                                                 v.y = -1;
  336.                                                                 }
  337.                                                         break;
  338.                                                 case 177:
  339.                                                         if (0 == v.y)
  340.                                                                 {
  341.                                                                 v.x = 0;
  342.                                                                 v.y = 1;
  343.                                                                 }
  344.                                                         break;
  345.                                                 case 176:
  346.                                                         if (0 == v.x)
  347.                                                                 {
  348.                                                                 v.x = -1;
  349.                                                                 v.y = 0;
  350.                                                                 }
  351.                                                         break;
  352.                                                 case 179:
  353.                                                         if (0 == v.x)
  354.                                                                 {
  355.                                                                 v.x = 1;
  356.                                                                 v.y = 0;
  357.                                                                 }
  358.                                                         break;
  359.                                                 };
  360.                                         break;
  361.  
  362.                                 case 2:
  363.                                         if (32 == key)
  364.                                                 mode = 1;
  365.                                         break;
  366.  
  367.                                 };
  368.  
  369.                         break;
  370.  
  371.                 case 3:
  372.                         if ( 1 == (kol_btn_get() & 0xff00)>>8 )
  373.                                 kol_exit();
  374.                         break;
  375.  
  376.                 };
  377.         }
  378.  
  379. }
  380.  
  381. //=====================================
  382.