Advertisement
HeroBaga

Untitled

Sep 11th, 2021
1,087
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <termios.h>
  5. #define size_x  82
  6. #define size_y  27
  7.  
  8. // WINDOW *win;
  9.  
  10. void game();
  11.  
  12. int getch();
  13.  
  14. void simulate();
  15.  
  16. int check(char *core, int y, int x);
  17.  
  18. void display(char *core);
  19.  
  20. int main() {
  21.     game();
  22.     return 0;
  23. }
  24.  
  25. void game() {
  26.     char horizontal = '-';
  27.     char vertical = '|';
  28.     char space = ' ';
  29.     char core[27][82];
  30.     //TODO сделать миню на свитчкейсах для выбора карты
  31.     FILE *file;
  32.     char input;
  33.     file = freopen("input.txt", "r", stdin);
  34.     if (file == NULL){
  35.         printf("File doesnt exist or is currupted");
  36.         return;
  37.     }
  38.     for (int y = 0; y <= size_y + 1; y++) {
  39.         for (int x = 0; x <= size_x + 1; x++) {
  40.             input = fgetc(file);
  41.             if (input == ' ') {
  42.                 core[y][x] = ' ';
  43.             } else if (input == 'x') {
  44.                 core[y][x] = 'x';
  45.             } else if (input == '-') {
  46.                 core[y][x] = '-';
  47.             }else if (input == '|') {
  48.                 core[y][x] = '|';
  49.             }
  50.         }
  51.  
  52.     }
  53.     fclose(file);
  54.  
  55.     display(*core);
  56.     char code;
  57.     //TODO  сделать такой же цикл чтоб когда он считывал пробел, то выполнял один шаг игры
  58.  
  59.     // win = initscr();
  60.     // noecho();
  61.     // nodelay(win, true);
  62.     // curs_set(0);
  63.  
  64.     file = freopen("dev/tty", "r", stdin);
  65.     while (1) {
  66.         code = getch();
  67.         if (code == ' '){
  68.             printf("\33c\e[3J");
  69.             simulate(*core);
  70.             // refresh();
  71.         }
  72.     }
  73.     fclose(file);
  74.     // endwin();
  75. }
  76.  
  77. void display(char *core) {
  78.     printf ("\33c\e[3J");
  79.     char (*p_array)[size_x] = core;
  80.     for (int y = 0; y < size_y; y++) {
  81.         for (int x = 0; x < size_x; x++) {
  82.             printf("%c", p_array[y][x]);
  83.         }
  84.         printf("%c", '\n');
  85.     }
  86. }
  87.  
  88. void simulate(char *core) {
  89.     int support[size_y][size_x];
  90.     char (*array)[size_x] = core;
  91.     for (int y = 1; y < size_y - 1; y++) {
  92.         for (int x = 1; x < size_x - 1; x++) {
  93.             support[y][x] = check(*array, y, x);
  94.         }
  95.     }
  96.     for (int y = 1; y < size_y - 1; y++) {
  97.         for (int x = 1; x < size_x - 1; x++) {
  98.             if (support[y][x] == 3) {
  99.                 array[y][x] = 'x';
  100.             } else if (support[y][x] == 2 && array[y][x] == 'x') {
  101.                 array[y][x] = 'x';
  102.             } else {
  103.                 array[y][x] = ' ';
  104.             }
  105.         }
  106.     }
  107.     display(*array);
  108. }
  109.  
  110. int check(char *core, int y, int x) {
  111.     char (*array)[size_x] = core;
  112.     int count = 0;
  113.     int A, B, C, D;
  114.     //Центр поля
  115.     A = y - 1;
  116.     B = y + 1;
  117.     C = x - 1;
  118.     D = x + 1;
  119.     //Лево центр
  120.     if (x == 1 && y > 1 && y < 25) {
  121.         C = 80;
  122.     }
  123.     //Право центр
  124.     if (x == 80 && y > 1 && y < 25) {
  125.         D = 1;
  126.     }
  127.     //Центр вверх
  128.     if (y == 1 && x > 1 && x < 80) {
  129.         A = 25;
  130.     }
  131.     //Центр низ
  132.     if (y == 25 && x > 1 && x < 80) {
  133.         B = 1;
  134.     }
  135.     //Левый верх угол
  136.     if (y == 1 && x == 1) {
  137.         A = 25;
  138.         C = 80;
  139.     }
  140.     //Правый верх угол
  141.     if (y == 1 && x == 80) {
  142.         A = 25;
  143.         D = 1;
  144.     }
  145.     //Левый низ угол
  146.     if (y == 25 && x == 1) {
  147.         B = 1;
  148.         C = 80;
  149.     }
  150.     //Правй низ угол
  151.     if (y == 25 && x == 80) {
  152.         B = 1;
  153.         D = 1;
  154.     }
  155.     if (array[A][C] == 'x') count++;
  156.     if (array[A][x] == 'x') count++;
  157.     if (array[A][D] == 'x') count++;
  158.     if (array[y][C] == 'x') count++;
  159.     if (array[y][D] == 'x') count++;
  160.     if (array[B][C] == 'x') count++;
  161.     if (array[B][x] == 'x') count++;
  162.     if (array[B][D] == 'x') count++;
  163.     return count;
  164. }
  165.  
  166. int getch() {
  167.     struct termios oldattr, newattr;
  168.     int ch;
  169.     tcgetattr(STDIN_FILENO, &oldattr);
  170.     newattr = oldattr;
  171.     newattr.c_lflag &= ~(ICANON | ECHO);
  172.     tcsetattr(STDIN_FILENO, TCSANOW, &newattr);
  173.     ch = getchar();
  174.     tcsetattr(STDIN_FILENO, TCSANOW, &oldattr);
  175.     return ch;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement