Subversion Repositories Kolibri OS

Rev

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

  1. /*      ------- ÊÎÑÈËÊÀ ÄËß ÊÎËÈÁÐÈ -------
  2. Èãðà ïèøåòñÿ íà C++ (èñïîëüçóåòñÿ MS Visual C++ 6.0+).
  3. Ýòî - èñõîäíèê âåðñèè 1.15.
  4.  
  5.                                          Andrey Mihaylovich aka Dron2004
  6. */
  7.  
  8.  
  9.  
  10. #include "kosSyst.h"
  11. #include "kosFile.h"
  12. #include "images.cpp"
  13.  
  14.  
  15.  
  16. //ÂÍÅØÍÈÅ ÓÐÎÂÍÈ
  17. bool external_levels_available=false;
  18. bool external_levels = false;
  19. int level_read_result;
  20. Byte * externallevels;
  21. Byte external_levels_count[1] = {0};
  22. /////////////////
  23.  
  24. int lastkosilkadirection=1;
  25. int laststep=0; //Ïîñëåäíèé õîä. 0-íåáûëî, 1-âíèç, 2-ââåðõ, 3-âëåâî, 4-âïðàâî
  26.  
  27.  
  28. Byte skindata[13824];
  29. int read_result=0;
  30. bool skin_available=false;
  31. bool w_redraw=true;
  32.  
  33. const char windowTitle[]="Š®á¨«ª  ¤«ï Š®«¨¡à¨";
  34. const char version[]="‚¥àá¨ï 1.15";
  35. int levelcount=7; //×èñëî óðîâíåé
  36.  
  37. char gamearea[20][20]; //Êàðòà
  38.  
  39.  
  40. short int kosilkax; // Ïîëîæåíèå êîñèëêè
  41. short int kosilkay;
  42. short int kosilkadirection=1; //Íàïðàâëåíèå ïðîøëîãî øàãà. 1-âíèç, 2-ââåðõ, 3-âëåâî, 4-âïðàâî
  43. short int lives=2; // Æèçíè
  44. short int level=1; //Óðîâåíü
  45. short int status=0; //Ãäå 0 - ïðèâåòñòâèå
  46.                                         // 1 - èãðà
  47.                                         // 2 - èãðà ïðîéäåíà
  48.                                         // 3 - âû ïðîèãðàëè
  49.                                         // 4 - âûáîð íàáîðà óðîâíåé (âñòðîåííûé èëè âíåøíèé)
  50.                                         // -1 - î ïðîãðàììå
  51. bool gamestarted=false; //Áëîêèðîâêà èãðîâûõ êëàâèø. Åñëè false - èãðàòü íåëüçÿ
  52.  
  53. bool drawgraphics=true; //Ðèñîâàòü ëè äåòàëüíóþ ãðàôèêó (èëè îãðàíè÷èòüñÿ àñêåòè÷íîé)
  54. bool drawanimation=true; //Àíèìèðîâàòü ëè
  55. int grassLeft();  //Ñîîáùèì î íàëè÷èè ôóíêöèè Grass Left
  56.  
  57. RGB kosilka_d[576];
  58. RGB kosilka_l[576];
  59. RGB kosilka_r[576];
  60. RGB kosilka_u[576];
  61. RGB grass[576];
  62. RGB stone[576];
  63. RGB tree[576];
  64. RGB skos[576];
  65.  
  66. //Ïàëèòðà öâåòîâ. Äåêîäèðóåì â 0xRRGGBB
  67. char * apppath;
  68. char * levpath;
  69.  
  70.  
  71. char * getLevelsPathName(){
  72.  
  73.         int lastslashindex=0;
  74.         static char levfilename[]="koslevel.pak";
  75.         int tempslfnd=0;
  76.  
  77.         for (tempslfnd=0; tempslfnd < strlen(kosExePath); tempslfnd++){
  78.                         if (kosExePath[tempslfnd]=='/'){lastslashindex=tempslfnd;}
  79.         }
  80.  
  81.         levpath = new char[lastslashindex+strlen(levfilename)+1];
  82.  
  83.         for (tempslfnd=0; tempslfnd <= lastslashindex; tempslfnd++){
  84.                 levpath[tempslfnd]=kosExePath[tempslfnd];
  85.         }
  86.         for (tempslfnd=0; tempslfnd < strlen(levfilename); tempslfnd++){
  87.                 levpath[tempslfnd+lastslashindex+1]=levfilename[tempslfnd];
  88.         }
  89.  
  90.         return levpath;
  91. }
  92.  
  93.  
  94. void interlevelpause(){ //Ïàóçà ìåæäó óðîâíÿìè
  95.         Byte tempCode;
  96.         RGB tmprgb;
  97.         int tmpa=0;
  98.         laststep=0;
  99.         static int yellow_pal[] = {0xA8A93D,0xBEBF4C,0xD6D856,0xDFE15A,0xECEE5B,
  100.                                                     0xECEE5B,0xDFE15A,0xD6D856,0xBEBF4C,0xA8A93D};
  101.                 for (int iic=0;iic<240;iic++){
  102.                         kos_WaitForEvent(1); //Pause()?
  103.                         kos_GetKey(tempCode);
  104.  
  105.                         kos_DrawBar(iic*2,0,2,480,yellow_pal[tmpa]);
  106.  
  107.                         tmpa++;
  108.                         if (tmpa>9) tmpa=0;
  109.                 }
  110. }
  111.  
  112. void draw_element(int elx, int ely){ //Îòðèñîâêà ýëåìåíòà êàðòû
  113. switch (gamearea[elx][ely]){
  114.                         case 'g':
  115.                                 if (drawgraphics==true){
  116.                                         kos_PutImage((RGB*)grass,24,24,elx*24,ely*24);
  117.                                 }
  118.                                 else
  119.                                 {
  120.                                         kos_DrawBar(elx*24,ely*24,24,24,0xAAAA00);
  121.                                 }
  122.                        
  123.                                 break;
  124.                         case 'k':
  125.                                 if (drawgraphics==true){
  126.                                         switch(kosilkadirection){
  127.                                         case 1:
  128.                                                 kos_PutImage((RGB*)kosilka_d,24,24,elx*24,ely*24);
  129.                                                 break;
  130.                                         case 2:
  131.                                                 kos_PutImage((RGB*)kosilka_u,24,24,elx*24,ely*24);
  132.                                                 break;
  133.                                         case 3:
  134.                                                 kos_PutImage((RGB*)kosilka_l,24,24,elx*24,ely*24);
  135.                                                 break;
  136.                                         case 4:
  137.                                                 kos_PutImage((RGB*)kosilka_r,24,24,elx*24,ely*24);
  138.                                                 break;
  139.                                         }
  140.                                 }
  141.                                 else
  142.                                 {
  143.                                         kos_DrawBar(elx*24,ely*24,24,24,0x00AAAA);
  144.                                 }
  145.  
  146.  
  147.                                 break;
  148.                         case 'n':
  149.                                 if (drawgraphics==true){
  150.                                         kos_PutImage((RGB*)skos,24,24,elx*24,ely*24);
  151.                                 }
  152.                                 else
  153.                                 {
  154.                                         kos_DrawBar(elx*24,ely*24,24,24,0xAAAAAA);
  155.                                 }
  156.  
  157.  
  158.                                 break;
  159.                         case 's':
  160.                                 if (drawgraphics==true){
  161.                                         kos_PutImage((RGB*)stone,24,24,elx*24,ely*24);
  162.                                 }
  163.                                 else
  164.                                 {
  165.                                         kos_DrawBar(elx*24,ely*24,24,24,0x555555);
  166.                                 }
  167.  
  168.  
  169.                                 break;
  170.  
  171.                         case 't':
  172.                                 if (drawgraphics==true){
  173.                                         kos_PutImage((RGB*)tree,24,24,elx*24,ely*24);
  174.                                 }
  175.                                 else
  176.                                 {
  177.                                         kos_DrawBar(elx*24,ely*24,24,24,0x005500);
  178.                                 }
  179.  
  180.  
  181.                                 break;
  182.                         }
  183.  
  184. }
  185.  
  186.  
  187. void display_grass_left(){ //Âûâîäèì íà ýêðàí êîëè÷åñòâî îñòàâøåéñÿ òðàâû
  188.         kos_DrawBar(605,120,20,10,0xEEEEEE);
  189.         kos_DisplayNumberToWindow(grassLeft(),3,605,120,0x0000FF,nbDecimal,false);
  190. }
  191.  
  192.  
  193. void animate(int initcellx, int initcelly, int direction){ //àíèìàöèÿ äâèæåíèÿ êîñèëêè
  194.         int tmpp=0;
  195.        
  196.         switch (direction){
  197.                 case 1:
  198.                         for (tmpp=0; tmpp<23;tmpp++){
  199.                                 if (drawgraphics==true){
  200.                                         kos_PutImage((RGB*)skos,24,24,initcellx*24,initcelly*24);
  201.                                         kos_PutImage((RGB*)kosilka_d,24,24,initcellx*24,initcelly*24+tmpp);
  202.                                 } else {
  203.                                         kos_DrawBar(initcellx*24,initcelly*24,24,24,0xAAAAAA);
  204.                                         kos_DrawBar(initcellx*24,initcelly*24+tmpp,24,24,0x00AAAA);
  205.  
  206.                                 }
  207.                                 kos_Pause(1);
  208.                         }
  209.                         break;
  210.                 case 2:
  211.                         for (tmpp=0; tmpp<23;tmpp++){
  212.                                 if (drawgraphics==true){
  213.                                         kos_PutImage((RGB*)skos,24,24,initcellx*24,initcelly*24);
  214.                                         kos_PutImage((RGB*)kosilka_u,24,24,initcellx*24,initcelly*24-tmpp);
  215.                                 } else {
  216.                                         kos_DrawBar(initcellx*24,initcelly*24,24,24,0xAAAAAA);
  217.                                         kos_DrawBar(initcellx*24,initcelly*24-tmpp,24,24,0x00AAAA);
  218.                                 }
  219.                                 kos_Pause(1);
  220.                         }
  221.                         break;
  222.                 case 3:
  223.                         for (tmpp=0; tmpp<23;tmpp++){
  224.                                 if (drawgraphics==true){
  225.                                         kos_PutImage((RGB*)skos,24,24,initcellx*24,initcelly*24);
  226.                                         kos_PutImage((RGB*)kosilka_r,24,24,initcellx*24+tmpp,initcelly*24);
  227.                                 } else {
  228.                                         kos_DrawBar(initcellx*24,initcelly*24,24,24,0xAAAAAA);
  229.                                         kos_DrawBar(initcellx*24+tmpp,initcelly*24,24,24,0x00AAAA);
  230.  
  231.                                 }
  232.                                 kos_Pause(1);
  233.                         }
  234.                         break;
  235.                 case 4:
  236.                         for (tmpp=0; tmpp<23;tmpp++){
  237.                                 if (drawgraphics==true){
  238.                                         kos_PutImage((RGB*)skos,24,24,initcellx*24,initcelly*24);
  239.                                         kos_PutImage((RGB*)kosilka_l,24,24,initcellx*24-tmpp,initcelly*24);
  240.                                 } else {
  241.                                         kos_DrawBar(initcellx*24,initcelly*24,24,24,0xAAAAAA);
  242.                                         kos_DrawBar(initcellx*24-tmpp,initcelly*24,24,24,0x00AAAA);
  243.  
  244.                                 }
  245.                                 kos_Pause(1);
  246.                         }
  247.                         break;
  248.         }
  249. }
  250.  
  251.  
  252. void draw_window(void){ //Ïåðåðèñîâêà îêíà
  253.         sProcessInfo sPI;
  254.        
  255.         if (w_redraw)
  256.         {
  257.                 kos_WindowRedrawStatus(1); //Íà÷àëî ïåðåðèñîâêè
  258.                 kos_DefineAndDrawWindow(50,50,640,506-22+kos_GetSkinHeight(),0x74,0xEEEEEE,0,0,(Dword)windowTitle);
  259.                 kos_WindowRedrawStatus(2); //Êîíåö ïåðåðèñîâêè
  260.         }
  261.         w_redraw=false;
  262.  
  263.         kos_ProcessInfo( &sPI );
  264.         if (sPI.rawData[70]&0x04) return; //íè÷åãî íå äåëàòü åñëè îêíî ñõëîïíóòî â çàãîëîâîê
  265.  
  266.         //Ïåðåðèñîâêà êàðòû
  267.         if ((status!=0)&&(status!=-1)&&(status!=4))
  268.         {
  269.                 kos_DrawBar(631-151,0,151,480,0xEEEEEE);
  270.  
  271.                 kos_WriteTextToWindow(500,30,0x80, 0 ,"Š  Ž  ‘  ˆ  ‹  Š  €",19);
  272.                 kos_WriteTextToWindow(517,40,0x80, 0 ,"¤«ï Š®«¨¡à¨ Ž‘",14);
  273.  
  274.                 kos_WriteTextToWindow(495,80,0x80, 0 ,"“஢¥­ì:",6);
  275.                 kos_DisplayNumberToWindow(level,3,605,80,0x0000FF,nbDecimal,false);
  276.  
  277.                 kos_WriteTextToWindow(495,95,0x80, 0 ,"Žáâ «®áì ¯®¯ë⮪:",11);
  278.                 kos_DisplayNumberToWindow(lives,1,605,95,0x0000FF,nbDecimal,false);
  279.  
  280.                 kos_WriteTextToWindow(495,120,0x80, 0 ,"Žáâ «®áì âà ¢ë:",11);
  281.                 display_grass_left();
  282.  
  283.                 kos_WriteTextToWindow(526,450,0x80, 0 ,(char*)version,12);
  284.  
  285.                 for (int cy=0;cy<20;cy++) for (int cx=0;cx<20;cx++)     draw_element(cx,cy);
  286.         }
  287.  
  288.         if (status==0){
  289.                 kos_DrawBar(0,0,4,480,0x000000);
  290.                 kos_DrawBar(628,0,3,480,0x000000);
  291.                 //Leency----
  292.                
  293.  
  294.                 for (int tmpppy=0;tmpppy<20;tmpppy++){
  295.                         for (int tmpppx=0;tmpppx<26;tmpppx++){
  296.                                 if ((tmpppx==0) || (tmpppx==25) || (tmpppy==0) || (tmpppy==19)){
  297.                                         kos_PutImage((RGB*)stone,24,24,4+tmpppx*24,tmpppy*24);
  298.                                 }
  299.                                 else
  300.                                 {
  301.                                         kos_PutImage((RGB*)skos,24,24,4+tmpppx*24,tmpppy*24);
  302.                                 }
  303.                         }
  304.                 }
  305.  
  306.                 if (drawgraphics==true){
  307.                         kos_PutImage((RGB*)kosilka_d,24,24,305,150);
  308.                 }
  309.                 else
  310.                 {
  311.                         kos_DrawBar(305,150,24,24,0x00AAAA);
  312.                 }
  313.  
  314.  
  315.                 if (drawanimation==true){
  316.                         kos_DrawBar(335,150,24,24,0x00AA00);
  317.                 }
  318.                 else
  319.                 {
  320.                         kos_DrawBar(335,150,24,24,0xAA0000);
  321.                 }
  322.  
  323.                 kos_WriteTextToWindow(255,200,0x80, 0xFFFFFF ,"Š   Ž   ‘   ˆ   ‹   Š   €",19);
  324.                 kos_WriteTextToWindow(290, 220,0x80, 0xFFFFFF ,"¤«ï Š®«¨¡à¨ Ž‘",14);
  325.                 kos_WriteTextToWindow(239, 240,0x80, 0xFFFFFF ,"<¤«ï ­ ç «  ¨£àë ­ ¦¬¨â¥ ENTER>",30);
  326.                 kos_WriteTextToWindow(30, 380,0x80, 0xFFFFFF ,"<­ ¦¬¨â¥ <g> ¤«ï ¯¥à¥ª«î祭¨ï ०¨¬  £à ä¨ª¨>",53);
  327.                 kos_WriteTextToWindow(30, 400,0x80, 0xFFFFFF ,"<­ ¦¬¨â¥ <a> ¤«ï ¢ª«î祭¨ï/¢ëª«î祭¨ï  ­¨¬ æ¨¨>",41);
  328.                 kos_WriteTextToWindow(30, 420,0x80, 0xFFFFFF ,"<­ ¦¬¨â¥ <h> ¤«ï ¯à®á¬®âà  á¢¥¤¥­¨© ® ¯à®£à ¬¬¥>",32);
  329.                 if (skin_available==true) {kos_WriteTextToWindow(30, 440,0x80, 0xFFFFFF ,"<­ ¦¬¨â¥ <s> çâ®¡ë ¢ëª«îç¨âì/¢ª«îç¨âì ᪨­>",27);}
  330.  
  331.  
  332.         //      kos_WriteTextToWindow(470, 440,0x80, 0xFFFFFF ,"­ ¦¬¨â¥ <ESC> ¤«ï ¢ë室 ",27);
  333.         //      kos_DisplayNumberToWindow(external_levels_count[0],3,200,340,0x0000FF,nbDecimal,false);
  334.  
  335.  
  336.  
  337.                 kos_WriteTextToWindow(533, 440,0x80, 0xFFFFFF ,(char*)version,0);
  338.         }
  339.         if (status==2){
  340.            kos_DrawBar(10,150,610,200,0x528B4C);       
  341.            kos_DrawBar(15,155,601,190,0x3BCF46);       
  342.            kos_WriteTextToWindow(240,230,0x80, 0xFFFFFF ,"‚ë ¢ë¨£à «¨!",13);
  343.            kos_WriteTextToWindow(240,250,0x80, 0xFFFFFF ,"<­ ¦¬¨â¥ q ¤«ï ¢®§¢à â  ¢ ¬¥­î>",17);
  344.         }
  345.         if (status==3){
  346.            kos_DrawBar(10,150,610,200,0x8B4C4C);       
  347.            kos_DrawBar(15,155,601,190,0xCF3B3B);       
  348.            kos_WriteTextToWindow(220,220,0x80, 0xFFFFFF ,"ˆ£à  ®ª®­ç¥­ ...",13);
  349.            kos_WriteTextToWindow(220,240,0x80, 0xFFFFFF ,"<­ ¦¬¨â¥ r ¤«ï ⮣®, ç⮡ë áë£à âì ¥éñ à §>",23);
  350.            kos_WriteTextToWindow(220,260,0x80, 0xFFFFFF ,"<­ ¦¬¨â¥ q ¤«ï ¢®§¢à â  ¢ ¬¥­î>",17);
  351.         }
  352.         if (status==-1){
  353.  
  354.                 kos_DrawBar(0,0,4,480,0x000000);
  355.                 kos_DrawBar(631-3,0,3,480,0x000000);
  356.  
  357.            for (int tmpppy=0;tmpppy<20;tmpppy++){
  358.                         for (int tmpppx=0;tmpppx<26;tmpppx++){
  359.                                 if ((tmpppx==0) || (tmpppx==25) || (tmpppy==0) || (tmpppy==19)){
  360.                                         kos_PutImage((RGB*)stone,24,24,4+tmpppx*24,tmpppy*24);
  361.                                 }
  362.                                 else
  363.                                 {
  364.                                         kos_PutImage((RGB*)skos,24,24,4+tmpppx*24,tmpppy*24);
  365.                                 }
  366.                         }
  367.                 }
  368.  
  369.            kos_WriteTextToWindow(40,40,0x80, 0xFFFFFF ,"Š®á¨«ª  ¤«ï Ž‘ Š®«¨¡à¨",22);
  370.            kos_WriteTextToWindow(40,60,0x80, 0xFFFFFF ,(char*)version,12);
  371.            kos_WriteTextToWindow(40,75,0x80, 0xFFFFFF ,"________________________________________",40);
  372.            
  373.            kos_WriteTextToWindow(40,120,0x80, 0xFFFFFF ,"Š®««¥ªâ¨¢ ࠧࠡ®â稪®¢:",18);
  374.            kos_WriteTextToWindow(40,150,0x80, 0xEEFFEE ,"€­¤à¥© Œ¨å ©«®¢¨ç aka Dron2004 - ¯à®£à ¬¬¨à®¢ ­¨¥, ¢áâ஥­­ ï £à ä¨ª  (¡¥§ ᪨­ )",32);
  375.            kos_WriteTextToWindow(40,170,0x80, 0xDDFFDD ,"Mario79 - â¥áâ¨à®¢ ­¨¥, ¯®¬®éì ¢ ࠧࠡ®âª¥, ¢ ¦­ë¥ ¨¤¥¨",35);
  376.            kos_WriteTextToWindow(40,190,0x80, 0xCCFFCC ,"Ataualpa - â¥áâ¨à®¢ ­¨¥, ¯®¬®éì ¢ ࠧࠡ®âª¥",36);
  377.            kos_WriteTextToWindow(40,210,0x80, 0xBBFFBB ,"Leency - â¥áâ¨à®¢ ­¨¥, ¯®¬®éì ¢ ࠧࠡ®âª¥, § ¬¥ç â¥«ì­ë¥ ᪨­ë, ¢ ¦­ë¥ ¨¤¥¨",62);
  378.            kos_WriteTextToWindow(40,230,0x80, 0xAAFFAA ,"Mike - â¥áâ¨à®¢ ­¨¥, ¯®¬®éì ¢ ࠧࠡ®âª¥",34);
  379.            kos_WriteTextToWindow(40,250,0x80, 0x99FF99 ,"bw - â¥áâ¨à®¢ ­¨¥, ¯®¬®éì ¢ ࠧࠡ®âª¥, ¢ ¦­ë¥ ¨¤¥¨",49);
  380.                         kos_WriteTextToWindow(40,270,0x80, 0x99FF99 ,"diamond - ¨¤¥ï ®â¬¥­ë 室 , â¥áâ¨à®¢ ­¨¥",49);
  381.  
  382.            kos_WriteTextToWindow(40,300,0x80, 0x88FF88 ,"Žâ¤¥«ì­®¥ ᯠᨡ®:",16);
  383.            kos_WriteTextToWindow(40,330,0x80, 0x77FF77 ,"‚ᥬ, ªâ® ¨£à ¥â ¢ íâã ¨£àã :-) !",50);
  384.  
  385.  
  386.            kos_WriteTextToWindow(40,430,0x80, 0x66FF66 ,"­ ¦¬¨â¥ <BACKSPACE> ¤«ï ¢®§¢à â  ¢ ¬¥­î",35);
  387.         }
  388.  
  389.  
  390.         if (status==4){
  391.                 kos_DrawBar(0,0,631,480,0x000000);     
  392.                
  393.  
  394.                 for (int tmpppy=0;tmpppy<20;tmpppy++){
  395.                         for (int tmpppx=0;tmpppx<26;tmpppx++){
  396.                                 if ((tmpppx==0) || (tmpppx==25) || (tmpppy==0) || (tmpppy==19)){
  397.                                         kos_PutImage((RGB*)stone,24,24,4+tmpppx*24,tmpppy*24);
  398.                                 }
  399.                                 else
  400.                                 {
  401.                                         kos_PutImage((RGB*)skos,24,24,4+tmpppx*24,tmpppy*24);
  402.                                 }
  403.                         }
  404.                 }
  405.  
  406.                 kos_WriteTextToWindow(215, 200,0x80, 0xFFFFFF ,"‚ë¡¥à¨â¥ ­ ¡®à ã஢­¥© (­ ¦¬¨â¥ <1> ¨«¨ <2>):",0);
  407.                 kos_WriteTextToWindow(215, 220,0x80, 0xFFFFFF ,"1. ‚áâ஥­­ë¥ ã஢­¨",0);
  408.                 kos_WriteTextToWindow(215, 240,0x80, 0xFFFFFF ,"2. ‚­¥è­¨© ­ ¡®à ã஢­¥©",0);
  409.  
  410.         }
  411.  
  412. }
  413.  
  414.  
  415.  
  416. //Îïèñàíèå óðîâíåé èãðû
  417. //, ãäå k - êîñèëêà
  418. //              g - òðàâà
  419. //              n - ñêîøåííàÿ òðàâà
  420. //              s - êàìåíü
  421. //              t - äåðåâî
  422. void initializeLevel(int levnum){
  423.         laststep=0;
  424.         if (external_levels==false){
  425.  
  426.         kosilkadirection=1;
  427.         if (levnum==1){
  428.                 static char tmparea[20][20]={{'k','t','g','g','g','g','g','s','g','g','g','g','g','g','g','g','g','g','g','g'},
  429.                                                                 {'g','s','g','s','g','g','g','s','g','s','g','g','s','g','g','g','g','g','g','g'},
  430.                                                                 {'g','t','g','s','g','g','g','s','g','s','g','g','s','g','g','g','g','g','g','g'},
  431.                                                                 {'g','s','g','s','g','g','g','s','g','s','g','g','s','g','g','g','g','g','g','g'},
  432.                                                                 {'g','t','g','s','g','g','g','s','g','s','g','g','s','g','g','g','g','g','g','g'},
  433.                                                                 {'g','s','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  434.                                                                 {'g','t','g','s','g','g','g','s','g','g','g','g','s','g','g','s','s','s','g','g'},
  435.                                                                 {'g','s','g','s','g','g','g','s','g','g','g','g','s','g','g','s','s','s','g','g'},
  436.                                                                 {'g','t','g','s','g','g','g','s','g','g','g','g','s','g','g','s','s','s','g','g'},
  437.                                                                 {'g','s','g','s','g','g','g','s','g','g','g','g','s','g','g','s','g','g','g','g'},
  438.                                                                 {'g','t','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  439.                                                                 {'g','s','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  440.                                                                 {'g','t','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  441.                                                                 {'g','s','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  442.                                                                 {'g','t','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  443.                                                                 {'g','s','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  444.                                                                 {'g','t','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  445.                                                                 {'g','s','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  446.                                                                 {'g','t','g','s','g','g','g','s','g','g','g','g','s','g','g','g','g','g','g','g'},
  447.                                                                 {'g','g','g','s','g','g','g','g','g','s','g','g','s','g','g','g','g','g','g','g'}};
  448.                         for (int tyy=0;tyy<20;tyy++){
  449.                                 for (int txx=0;txx<20;txx++){
  450.                                
  451.                                         if (tmparea[txx][tyy]=='k'){
  452.                                                 kosilkax=tyy;
  453.                                                 kosilkay=txx;
  454.                                         }
  455.  
  456.                                         gamearea[txx][tyy]=tmparea[tyy][txx];
  457.                                 }
  458.                         }
  459.         }
  460.         if (levnum==2){
  461.                 static char tmparea[20][20]={{'s','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  462.                                                                 {'s','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','s','g'},
  463.                                                                 {'g','k','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','s','g'},
  464.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','s','s','g','g','g','g','g','g'},
  465.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','s','s','g','g','g','g','g','g'},
  466.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  467.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  468.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  469.                                                                 {'s','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  470.                                                                 {'s','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  471.                                                                 {'g','g','g','g','g','g','g','g','s','s','g','g','g','g','g','g','g','s','s','g'},
  472.                                                                 {'g','g','g','g','g','g','g','g','s','s','g','g','g','g','g','g','g','s','s','g'},
  473.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  474.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  475.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','s','s','g','g','g','g','g'},
  476.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','s','s','g','g','g','g','g'},
  477.                                                                 {'g','g','g','s','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  478.                                                                 {'g','g','g','s','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  479.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'},
  480.                                                                 {'g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g'}};
  481.                         for (int tyy=0;tyy<20;tyy++){
  482.                                 for (int txx=0;txx<20;txx++){
  483.                                
  484.                                         if (tmparea[txx][tyy]=='k'){
  485.                                                 kosilkax=tyy;
  486.                                                 kosilkay=txx;
  487.                                         }
  488.  
  489.                                         gamearea[txx][tyy]=tmparea[tyy][txx];
  490.                                 }
  491.                         }
  492.         }
  493.  
  494.         if (levnum==3){
  495.                 static char tmparea[20][20]={{'t','n','t','n','t','n','t','n','t','n','t','n','t','n','t','n','t','n','t','k'},
  496.                                                                 {'n','t','g','g','g','g','g','g','g','g','g','g','s','n','n','s','n','s','t','g'},
  497.                                                                 {'t','n','g','g','g','g','g','g','g','g','g','g','n','t','n','n','n','t','t','g'},
  498.                                                                 {'n','t','g','g','g','g','g','g','g','g','g','g','n','s','n','s','n','s','t','g'},
  499.                                                                 {'t','n','g','g','g','g','g','s','s','g','g','g','n','n','n','n','n','t','t','g'},
  500.                                                                 {'n','t','g','g','g','g','g','g','g','g','g','g','t','n','s','n','n','s','t','g'},
  501.                                                                 {'t','n','g','g','g','g','g','g','g','g','g','g','n','n','n','n','n','t','t','g'},
  502.                                                                 {'n','t','g','g','g','g','g','g','g','g','g','g','n','n','s','n','n','s','t','g'},
  503.                                                                 {'t','n','g','g','g','g','g','g','g','g','g','g','n','s','n','n','n','t','t','g'},
  504.                                                                 {'n','t','g','g','g','g','g','g','g','g','g','g','s','n','n','n','n','t','g','g'},
  505.                                                                 {'t','n','g','g','g','s','g','g','g','g','g','g','t','t','t','t','t','t','g','g'},
  506.                                                                 {'n','t','g','g','g','s','g','g','g','g','g','g','g','g','g','g','g','t','g','g'},
  507.                                                                 {'t','n','g','g','g','g','g','g','g','g','g','g','t','t','g','g','g','t','g','g'},
  508.                                                                 {'n','t','g','g','g','g','g','g','t','t','g','g','g','t','g','g','g','t','g','g'},
  509.                                                                 {'t','n','g','g','g','g','g','g','t','t','g','g','g','t','g','g','g','t','g','g'},
  510.                                                                 {'n','t','g','g','g','g','g','g','g','g','g','g','g','t','g','g','g','t','g','g'},
  511.                                                                 {'t','n','g','g','g','g','g','g','g','g','g','g','g','t','t','g','g','t','g','g'},
  512.                                                                 {'n','t','g','g','g','g','g','g','g','g','g','g','g','g','t','g','g','t','g','g'},
  513.                                                                 {'t','n','g','g','g','g','g','g','g','g','g','g','g','g','t','g','g','t','g','g'},
  514.                                                                 {'n','t','s','s','s','s','s','s','s','s','s','s','s','s','t','g','g','g','g','g'}};
  515.                         for (int tyy=0;tyy<20;tyy++){
  516.                                 for (int txx=0;txx<20;txx++){
  517.                                
  518.                                         if (tmparea[txx][tyy]=='k'){
  519.                                                 kosilkax=tyy;
  520.                                                 kosilkay=txx;
  521.                                         }
  522.  
  523.                                         gamearea[txx][tyy]=tmparea[tyy][txx];
  524.                                 }
  525.                         }
  526.         }
  527.  
  528.                 if (levnum==4){
  529.                 static char tmparea[20][20]={{'t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t'},
  530.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','n','t'},
  531.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','n','t'},
  532.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','n','t'},
  533.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','s','n','t'},
  534.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','s','n','t'},
  535.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','s','n','t'},
  536.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','s','n','t'},
  537.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','s','s','t'},
  538.                                                                 {'t','g','g','g','g','t','t','t','t','t','t','t','t','g','g','g','g','g','g','t'},
  539.                                                                 {'t','g','g','g','g','t','t','t','t','t','t','t','t','g','g','g','g','g','g','t'},
  540.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','g','g','t'},
  541.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','g','g','t'},
  542.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','g','g','t'},
  543.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','g','g','t'},
  544.                                                                 {'t','g','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','g','g','t'},
  545.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  546.                                                                 {'t','k','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  547.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  548.                                                                 {'t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t'}};
  549.                         for (int tyy=0;tyy<20;tyy++){
  550.                                 for (int txx=0;txx<20;txx++){
  551.                                
  552.                                         if (tmparea[txx][tyy]=='k'){
  553.                                                 kosilkax=tyy;
  554.                                                 kosilkay=txx;
  555.                                         }
  556.  
  557.                                         gamearea[txx][tyy]=tmparea[tyy][txx];
  558.                                 }
  559.                         }
  560.         }
  561.  
  562.                         if (levnum==5){
  563.                 static char tmparea[20][20]={{'t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t'},
  564.                                                                 {'t','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  565.                                                                 {'t','t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  566.                                                                 {'t','s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  567.                                                                 {'t','s','g','g','g','g','g','t','g','g','t','g','g','g','g','g','g','g','g','t'},
  568.                                                                 {'t','t','g','g','g','g','t','n','t','t','t','g','g','g','g','g','g','g','g','t'},
  569.                                                                 {'t','s','g','g','g','g','t','n','n','n','t','g','g','g','g','g','g','g','g','t'},
  570.                                                                 {'t','k','g','g','g','g','t','n','n','n','t','g','g','g','g','g','g','g','g','t'},
  571.                                                                 {'t','g','g','g','g','g','t','n','n','n','t','g','g','g','g','g','g','g','g','t'},
  572.                                                                 {'t','g','g','g','g','g','t','n','n','t','g','g','g','g','g','g','g','g','g','t'},
  573.                                                                 {'t','g','g','g','g','g','t','n','n','t','g','g','g','g','g','g','g','g','g','t'},
  574.                                                                 {'t','g','g','g','g','g','t','n','n','n','t','g','g','g','g','g','g','g','g','t'},
  575.                                                                 {'t','g','g','g','g','g','t','n','n','n','t','g','g','g','g','g','g','g','g','t'},
  576.                                                                 {'t','g','g','g','g','g','g','t','n','t','t','g','g','g','g','g','g','g','g','t'},
  577.                                                                 {'t','g','g','g','g','g','g','t','t','g','g','g','g','g','g','g','g','g','g','t'},
  578.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  579.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  580.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  581.                                                                 {'t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','t'},
  582.                                                                 {'t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t','t'}};
  583.                         for (int tyy=0;tyy<20;tyy++){
  584.                                 for (int txx=0;txx<20;txx++){
  585.                                
  586.                                         if (tmparea[txx][tyy]=='k'){
  587.                                                 kosilkax=tyy;
  588.                                                 kosilkay=txx;
  589.                                         }
  590.  
  591.                                         gamearea[txx][tyy]=tmparea[tyy][txx];
  592.                                 }
  593.                         }
  594.                         }
  595.  
  596.                 if (levnum==6){
  597.                 static char tmparea[20][20]={{'s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s'},
  598.                                                                 {'s','k','t','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  599.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  600.                                                                 {'s','g','g','s','s','s','s','s','s','s','s','s','s','s','s','s','s','g','g','s'},
  601.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','t','t','s','g','g','s'},
  602.                                                                 {'s','g','g','s','g','g','g','g','g','g','g','g','g','g','t','t','s','g','g','s'},
  603.                                                                 {'s','g','g','s','g','g','g','g','g','g','g','g','g','g','t','t','s','g','g','s'},
  604.                                                                 {'s','g','g','s','g','g','g','g','g','t','t','g','g','g','g','g','s','g','g','s'},
  605.                                                                 {'s','g','g','s','g','g','g','g','g','t','t','t','g','g','g','g','s','g','g','s'},
  606.                                                                 {'s','g','g','s','g','g','g','t','t','t','t','t','t','g','g','g','s','g','g','s'},
  607.                                                                 {'s','g','g','s','g','g','g','t','t','t','t','t','t','g','g','g','s','g','g','s'},
  608.                                                                 {'s','g','g','s','g','g','g','g','g','t','t','g','g','g','g','g','s','g','g','s'},
  609.                                                                 {'s','g','g','s','g','g','g','g','g','t','t','g','g','g','g','g','s','g','g','s'},
  610.                                                                 {'s','g','g','s','g','g','g','g','g','g','g','g','g','g','g','g','s','g','g','s'},
  611.                                                                 {'s','g','g','s','g','g','g','g','g','g','g','g','g','g','g','g','s','g','g','s'},
  612.                                                                 {'s','g','g','s','g','g','g','g','g','g','g','g','g','g','g','g','s','g','g','s'},
  613.                                                                 {'s','g','g','s','s','s','s','s','s','s','s','s','s','s','s','s','s','g','g','s'},
  614.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  615.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  616.                                                                 {'s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s'}};
  617.                         for (int tyy=0;tyy<20;tyy++){
  618.                                 for (int txx=0;txx<20;txx++){
  619.                                
  620.                                         if (tmparea[txx][tyy]=='k'){
  621.                                                 kosilkax=tyy;
  622.                                                 kosilkay=txx;
  623.                                         }
  624.  
  625.                                         gamearea[txx][tyy]=tmparea[tyy][txx];
  626.                                 }
  627.                         }
  628.                 }              
  629.  
  630.  
  631.                         if (levnum==7){
  632.                 static char tmparea[20][20]={{'s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s'},
  633.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','t','t','s'},
  634.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','t','t','s'},
  635.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','t','t','s'},
  636.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s','t','t','s'},
  637.                                                                 {'s','g','g','g','g','g','t','t','t','t','t','t','g','g','g','g','s','t','t','s'},
  638.                                                                 {'s','g','g','g','g','g','t','k','g','g','g','t','g','g','g','g','s','t','t','s'},
  639.                                                                 {'s','g','g','g','g','g','t','g','g','g','g','t','g','g','g','g','s','t','t','s'},
  640.                                                                 {'s','g','g','g','g','g','t','g','g','g','g','t','g','g','g','g','s','t','t','s'},
  641.                                                                 {'s','g','g','g','g','g','t','g','g','g','g','t','g','g','g','g','s','s','s','s'},
  642.                                                                 {'s','g','g','g','g','g','t','g','g','g','g','t','g','g','g','g','g','g','g','s'},
  643.                                                                 {'s','g','g','g','g','g','t','t','t','t','g','t','g','g','g','g','g','g','g','s'},
  644.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  645.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  646.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  647.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  648.                                                                 {'s','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','g','s'},
  649.                                                                 {'s','g','g','g','g','g','g','g','g','t','g','g','t','g','g','g','g','g','g','s'},
  650.                                                                 {'s','g','g','g','g','g','g','g','g','t','g','g','t','g','g','g','g','g','g','s'},
  651.                                                                 {'s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s','s'}};
  652.                         for (int tyy=0;tyy<20;tyy++){
  653.                                 for (int txx=0;txx<20;txx++){
  654.                                
  655.                                         if (tmparea[txx][tyy]=='k'){
  656.                                                 kosilkax=tyy;
  657.                                                 kosilkay=txx;
  658.                                         }
  659.  
  660.                                         gamearea[txx][tyy]=tmparea[tyy][txx];
  661.                                 }
  662.                         }
  663.                 }              
  664.                 }
  665.                 else
  666.                 {
  667.                         //ÂÍÅØÍÈÅ ÓÐÎÂÍÈ
  668.                         kosilkadirection=1;
  669.  
  670.                         int currentrow=0;
  671.                         int currentcol=0;
  672.  
  673.                         for (int tmpcntr=0;tmpcntr<400;tmpcntr++){
  674.                                
  675.                                 currentcol=(int)(tmpcntr/20);
  676.                                 currentrow=tmpcntr-(((int)(tmpcntr/20))*20);
  677.                                 switch(externallevels[tmpcntr+(400*(levnum-1))]){
  678.  
  679.                                 case 0:
  680.                                         gamearea[currentrow][currentcol]='n';
  681.                                         break;
  682.                                 case 1:
  683.                                         gamearea[currentrow][currentcol]='g';
  684.                                         break;
  685.                                 case 2:
  686.                                         gamearea[currentrow][currentcol]='k';
  687.                                         kosilkax=currentrow;
  688.                                         kosilkay=currentcol;
  689.                                         break;
  690.                                 case 3:
  691.                                         gamearea[currentrow][currentcol]='s';
  692.                                         break;
  693.                                 case 4:
  694.                                         gamearea[currentrow][currentcol]='t';
  695.                                         break;
  696.  
  697.                                 }
  698.                         }
  699.                        
  700.  
  701.                 }
  702.  
  703.         draw_window();
  704.  
  705. }
  706.  
  707. //Ïðåîâåðÿåì îñòàòîê òðàâû
  708. int grassLeft(){
  709.         int leftgrass=0;
  710.         for (int chky=0;chky<20;chky++){
  711.                 for (int chkx=0;chkx<20;chkx++){
  712.                         if (gamearea[chkx][chky]=='g') {
  713.                                 leftgrass++;
  714.                         }
  715.                 }
  716.         }
  717.         return leftgrass;
  718. }
  719.  
  720.  
  721. //Ìåíÿåì óðîâåíü èëè âûâîäèì ñîîáùåíèå î òîì, ÷òî âñå óðîâíè ïðîéäåíû
  722. void updateStatus(){
  723.  
  724.         if (grassLeft()==0) {
  725.                 if (level==levelcount){
  726.                         gamestarted=false;
  727.                         status=2;
  728.                         draw_window();
  729.                 } else {
  730.                         gamestarted=false;
  731.                         interlevelpause();
  732.                         level++;
  733.                         initializeLevel(level);
  734.                         gamestarted=true;
  735.                 }
  736.         }
  737.        
  738. }
  739.  
  740.  
  741.  
  742. void load_external_levels(){
  743.  
  744.         CKosFile lev(getLevelsPathName());
  745.  
  746.         level_read_result=lev.Read (external_levels_count,1);
  747.  
  748.         if (level_read_result == 1)
  749.                         external_levels_available=true;
  750.         else
  751.                         external_levels_available=false;
  752.  
  753.         if (external_levels_count[0]==0)
  754.                         external_levels_available=false;
  755.         else
  756.         {
  757.                 externallevels = new Byte[400*external_levels_count[0]];
  758.                 lev.Read (externallevels,400*external_levels_count[0]);
  759.         }
  760. }
  761.  
  762. void app_halt(){
  763.  
  764.         delete apppath;
  765.         delete levpath;
  766.         if (external_levels_available==true) {delete externallevels;}
  767.         kos_ExitApp();
  768. }
  769.  
  770.  
  771.  
  772. void kos_Main(){
  773.  
  774.         load_external_levels();
  775.        
  776.         decode_graphics(576*0 + kosilka_gfx,kosilka_d);
  777.         decode_graphics(576*1 + kosilka_gfx,kosilka_u);
  778.         decode_graphics(576*2 + kosilka_gfx,kosilka_l);
  779.         decode_graphics(576*3 + kosilka_gfx,kosilka_r);
  780.         decode_graphics(576*4 + kosilka_gfx,skos);
  781.         decode_graphics(576*5 + kosilka_gfx,stone);
  782.         decode_graphics(576*6 + kosilka_gfx,tree);
  783.         decode_graphics(576*7 + kosilka_gfx,grass);
  784.  
  785.         for (;;){
  786.  
  787.                 switch (kos_WaitForEvent()){
  788.                 case 1:
  789.                         w_redraw=true;
  790.                         draw_window();
  791.                         break;
  792.                 case 2:
  793.                         Byte keyCode;
  794.                         kos_GetKey(keyCode);
  795.                         if (status==1){
  796.                         if (gamestarted==true){
  797.                                 switch (keyCode){
  798.                                 case 177:
  799.                                         if (kosilkay<19){
  800.                                                 if (gamearea[kosilkax][kosilkay+1]=='g'){
  801.                                                         gamearea[kosilkax][kosilkay]='n';
  802.                                                         gamearea[kosilkax][kosilkay+1]='k';
  803.                                                        
  804.                                                         if (drawanimation==true) {animate(kosilkax,kosilkay,1);}
  805.  
  806.  
  807.                                                         lastkosilkadirection=kosilkadirection;
  808.                                                         laststep=1;
  809.  
  810.                                                         kosilkay++;
  811.                                                         kosilkadirection=1;
  812.                                                         draw_element(kosilkax,kosilkay);
  813.                                                         draw_element(kosilkax,kosilkay-1);
  814.                                                         display_grass_left();
  815.                                                         updateStatus();
  816.                                                 }
  817.                                         }
  818.                                         break;
  819.                                 case 178:
  820.                                         if (kosilkay>0){
  821.                                                 if (gamearea[kosilkax][kosilkay-1]=='g'){
  822.                                                         gamearea[kosilkax][kosilkay]='n';
  823.                                                         gamearea[kosilkax][kosilkay-1]='k';
  824.  
  825.                                                         if (drawanimation==true) {animate(kosilkax,kosilkay,2);}
  826.  
  827.                                                         lastkosilkadirection=kosilkadirection;
  828.                                                         laststep=2;
  829.  
  830.                                                         kosilkay--;
  831.                                                         kosilkadirection=2;
  832.                                        
  833.                                                         draw_element(kosilkax,kosilkay);
  834.                                                         draw_element(kosilkax,kosilkay+1);
  835.                                                         display_grass_left();
  836.                                                         updateStatus();
  837.                                                 }
  838.                                         }
  839.                                         break; 
  840.        
  841.                                 case 179:
  842.                                         if (kosilkax<19){
  843.                                                 if (gamearea[kosilkax+1][kosilkay]=='g'){
  844.                                                         gamearea[kosilkax][kosilkay]='n';
  845.                                                         gamearea[kosilkax+1][kosilkay]='k';
  846.  
  847.                                                         if (drawanimation==true) {animate(kosilkax,kosilkay,3);}
  848.  
  849.  
  850.                                                         lastkosilkadirection=kosilkadirection;
  851.                                                         laststep=3;
  852.  
  853.                                                         kosilkax++;
  854.                                                         kosilkadirection=4;
  855.  
  856.                                                         draw_element(kosilkax,kosilkay);
  857.                                                         draw_element(kosilkax-1,kosilkay);
  858.                                                         display_grass_left();
  859.                                                         updateStatus();
  860.                                                 }
  861.                                         }
  862.                                         break;
  863.                        
  864.                                 case 176:
  865.                                         if (kosilkax>0){
  866.                                                 if (gamearea[kosilkax-1][kosilkay]=='g'){
  867.                                                         gamearea[kosilkax][kosilkay]='n';
  868.                                                         gamearea[kosilkax-1][kosilkay]='k';
  869.  
  870.                                                         if (drawanimation==true) {animate(kosilkax,kosilkay,4);}
  871.  
  872.                                                         lastkosilkadirection=kosilkadirection;
  873.                                                         laststep=4;
  874.  
  875.                                                         kosilkax--;
  876.                                                         kosilkadirection=3;
  877.  
  878.                                                         draw_element(kosilkax,kosilkay);
  879.                                                         draw_element(kosilkax+1,kosilkay);
  880.                                                         display_grass_left();
  881.                                                         updateStatus();
  882.                                                 }
  883.                                         }
  884.                                         break;
  885.  
  886.                                 case 27:
  887.                                         if (lives>0){
  888.                                                 lives--;
  889.                                                 initializeLevel(level);
  890.  
  891.                                         } else {
  892.                                                 gamestarted=false;
  893.                                                 status=3;
  894.                                                 draw_window();
  895.                                         }
  896.                                         break;
  897.  
  898.                                 case 8:
  899.                                         if (laststep!=0){
  900.                                                 kosilkadirection=lastkosilkadirection;
  901.                                                 if (laststep==1){
  902.                                                         gamearea[kosilkax][kosilkay]='g';
  903.                                                         gamearea[kosilkax][kosilkay-1]='k';
  904.                                                         draw_element(kosilkax,kosilkay);
  905.                                                         draw_element(kosilkax,kosilkay-1);
  906.                                                         kosilkay--;
  907.                                                 }
  908.                                         if (laststep==2){
  909.                                                         gamearea[kosilkax][kosilkay]='g';
  910.                                                         gamearea[kosilkax][kosilkay+1]='k';
  911.                                                         draw_element(kosilkax,kosilkay);
  912.                                                         draw_element(kosilkax,kosilkay+1);
  913.                                                         kosilkay++;
  914.                                                 }
  915.  
  916.                                         if (laststep==3){
  917.                                                         gamearea[kosilkax][kosilkay]='g';
  918.                                                         gamearea[kosilkax-1][kosilkay]='k';
  919.                                                         draw_element(kosilkax,kosilkay);
  920.                                                         draw_element(kosilkax-1,kosilkay);
  921.                                                         kosilkax--;
  922.                                                 }
  923.  
  924.                                         if (laststep==4){
  925.                                                         gamearea[kosilkax][kosilkay]='g';
  926.                                                         gamearea[kosilkax+1][kosilkay]='k';
  927.                                                         draw_element(kosilkax,kosilkay);
  928.                                                         draw_element(kosilkax+1,kosilkay);
  929.                                                         kosilkax++;
  930.                                                 }
  931.  
  932.  
  933.                                                 laststep=0;
  934.                                         }
  935.                                         break;
  936.                
  937.                                 }
  938.  
  939.                         }
  940.                         }
  941.                         if (status==0){
  942.                                 if (keyCode==13){ //enter
  943.                                         if (external_levels_available==true){
  944.                                                 status=4;
  945.                                                 draw_window();
  946.                                         }
  947.                                         else
  948.                                         {
  949.                                                 status=1;
  950.                                                 initializeLevel(1);
  951.                                                 gamestarted=true;
  952.                                         }
  953.                                                                        
  954.                                 }
  955.  
  956.                                 if (keyCode==103){
  957.                                         if (drawgraphics==true){
  958.                                                 drawgraphics=false;
  959.                                         } else {
  960.                                                 drawgraphics=true;
  961.                                         }
  962.                                        
  963.                                         if (drawgraphics==true){
  964.                                                 kos_PutImage((RGB*)kosilka_d,24,24,305,150);
  965.                                         }
  966.                                         else
  967.                                         {
  968.                                         kos_DrawBar(305,150,24,24,0x00AAAA);
  969.                                         }
  970.                                 }
  971.                                
  972.                                 if (keyCode==97){
  973.                                         if (drawanimation==true){
  974.                                                 drawanimation=false;
  975.                                         } else {
  976.                                                 drawanimation=true;
  977.                                         }
  978.                                        
  979.                                         if (drawanimation==true){
  980.                                                 kos_DrawBar(335,150,24,24,0x00AA00);
  981.                                         }
  982.                                         else
  983.                                         {
  984.                                                 kos_DrawBar(335,150,24,24,0xAA0000);
  985.                                         }
  986.                                 }
  987.                                 if (keyCode==104){
  988.                                                 status=-1;
  989.                                                 draw_window();
  990.                                 }
  991.  
  992.                                 if (keyCode==27){
  993.                                         app_halt();
  994.                                 }
  995.                                
  996.                         }
  997.  
  998.                         if (status==4){
  999.                                 if (keyCode==49){ //1
  1000.                                                 external_levels=false;
  1001.                                                 status=1;
  1002.                                                 initializeLevel(1);
  1003.                                                 gamestarted=true;
  1004.                                                                        
  1005.                                 }
  1006.                                
  1007.                                 if (keyCode==50){ //2
  1008.                                                 external_levels=true;
  1009.                                                 levelcount=external_levels_count[0];
  1010.                                                 status=1;
  1011.                                                 initializeLevel(1);
  1012.                                                 gamestarted=true;
  1013.                                                                        
  1014.                                 }
  1015.                         }
  1016.  
  1017.                         if (status==2){
  1018.                                 if (keyCode==113){
  1019.                                                 lives=2;
  1020.                                                 status=0;
  1021.                                                 level=1;
  1022.                                                 draw_window();
  1023.                                                 gamestarted=true;
  1024.                                 }
  1025.                         }
  1026.                        
  1027.                         if (status==3){
  1028.                                 if (keyCode==113){
  1029.                                                 lives=2;
  1030.                                                 status=0;
  1031.                                                 level=1;
  1032.                                                 draw_window();
  1033.                                                 gamestarted=true;      
  1034.  
  1035.                                 }
  1036.                                 if (keyCode==114){
  1037.                                                 lives=2;
  1038.                                                 status=1;
  1039.                                                 level=1;
  1040.                                                 initializeLevel(1);
  1041.                                                 gamestarted=true;
  1042.                                 }
  1043.  
  1044.                         }
  1045.  
  1046.                         if (status==-1){
  1047.                                 if (keyCode==8){
  1048.                                         status=0;
  1049.                                         draw_window();
  1050.                                 }
  1051.                         }
  1052.  
  1053.                         break;
  1054.                 case 3:
  1055.                        
  1056.                         app_halt();
  1057.                         break;
  1058.                 }
  1059.         }
  1060. }
  1061.  
  1062. // Êîíåö èñõîäíèêà