Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <ctime>
  6. #include <conio.h>
  7. #include <dos.h>
  8. #include <Windows.h>
  9. #include <time.h>
  10.  
  11. using namespace std;
  12.  
  13. int const weight = 20;
  14. int const leight = 20;
  15. int field[weight][leight];
  16. int dir;
  17. int snake_x = weight / 2;
  18. int snake_y = leight / 2;
  19. bool game_over = false;
  20. int tail = 3;
  21. int snake_olx;
  22. int snake_oly;
  23.  
  24. void generate_food()
  25. {
  26.     srand(time(NULL));
  27.     int food_x = rand() % (weight - 2) + 1;
  28.     int food_y = rand() % (leight - 2) + 1;
  29.     field[food_x][food_y] = -2;
  30. }
  31.  
  32. void init_field()
  33. {
  34.     for (int i = 0; i < weight; i++)
  35.     {
  36.         field[0][i] = -1;
  37.         field[leight - 1][i] = -1;
  38.     }
  39.    
  40.     for (int i = 1; i < leight - 1; i++)
  41.     {
  42.         for (int j = 1; j < weight - 1; j++)
  43.         {
  44.             field[i][0] = -1;
  45.             field[i][j] = 0;
  46.             field[i][weight - 1] = -1;
  47.         }
  48.     }
  49.     field[snake_x][snake_y] = 1;
  50.     generate_food();
  51.  
  52. }
  53.  
  54.  
  55.  
  56. char get_field_char(int key) {
  57.     char ch;
  58.     switch (key)
  59.     {
  60.     case -1:
  61.         ch = '#';
  62.         break;
  63.     case 0:
  64.         ch = ' ';
  65.         break;
  66.     case -2:
  67.         ch = '@';
  68.         break;
  69.     /*case 3:
  70.         ch = '^';
  71.         break;
  72.     case 4:
  73.         ch = '|';
  74.         break;
  75.     */
  76.     default:
  77.         break;
  78.     }
  79.     return ch;
  80. }
  81.  
  82. void input()
  83. {
  84.     if (_kbhit())
  85.     {
  86.         int ch = _getch();
  87.         switch (ch)
  88.         {
  89.         //case 'w':
  90.         case 230:
  91.             dir = 1;
  92.             break;
  93.         //case 'a':
  94.         case 228:
  95.             dir = 2;
  96.             break;
  97.         //case 's':
  98.         case 235:
  99.             dir = 3;
  100.             break;
  101.         //case 'd':
  102.         case 162:
  103.             dir = 4;
  104.             break;
  105.         default:
  106.             break;
  107.         }
  108.     }
  109. }
  110.  
  111. void logic()
  112. {
  113.     snake_olx = snake_x;
  114.     snake_oly = snake_y;
  115.     switch (dir)
  116.     {
  117.     case 1:
  118.         snake_x--;
  119.         snake_olx = snake_x;
  120.         break;
  121.     case 2:
  122.         snake_y--;
  123.         break;
  124.     case 3:
  125.         snake_x++;
  126.         break;
  127.     case 4:
  128.         snake_y++;
  129.         break;
  130.     default:
  131.         break;
  132.     }
  133. }
  134.  
  135. void update_field()
  136. {
  137.     if (field[snake_x][snake_y] == -1)
  138.     {
  139.         game_over = true;
  140.     }
  141.     else if (field[snake_x][snake_y] == -2)
  142.     {  
  143.         generate_food();
  144.         tail++;
  145.         field[snake_olx][snake_oly] = tail;
  146.         field[snake_x][snake_y] = tail++;
  147.     }
  148.     /*else if (field[snake_x][snake_y] > 2)
  149.     {
  150.         game_over = true;
  151.     }*/
  152.  
  153.     for (int i = 1; i < leight - 1; i++)
  154.     {
  155.         for (int j = 1; j < weight - 1; j++)
  156.         {
  157.             if (_kbhit())
  158.             {
  159.                 if (field[i][j] > 0)
  160.                 {
  161.                     field[i][j] --;
  162.                 }
  163.             }
  164.         }
  165.     }
  166. }
  167.  
  168. void print_field()
  169. {
  170.     for (int i = 0; i < weight; i++)
  171.     {
  172.         for (int j = 0; j < leight; j++)
  173.         {
  174.             if (field[i][j] > 0)
  175.             {
  176.                 cout << '^';
  177.             }
  178.             else
  179.             cout << get_field_char(field[i][j]);
  180.         }
  181.         cout << endl;
  182.  
  183.     }
  184. }
  185.  
  186. int main()
  187. {
  188.     init_field();
  189.     while (game_over != true)
  190.     {
  191.         input();
  192.         logic();
  193.         print_field();
  194.         update_field();
  195.         system("cls");
  196.         Sleep(10);
  197.     }
  198.     return 0;
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement