Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <termios.h>
- #define size_x 82
- #define size_y 27
- // WINDOW *win;
- void game();
- int getch();
- void simulate();
- int check(char *core, int y, int x);
- void display(char *core);
- int main() {
- game();
- return 0;
- }
- void game() {
- char horizontal = '-';
- char vertical = '|';
- char space = ' ';
- char core[27][82];
- //TODO сделать миню на свитчкейсах для выбора карты
- FILE *file;
- char input;
- file = freopen("input.txt", "r", stdin);
- if (file == NULL){
- printf("File doesnt exist or is currupted");
- return;
- }
- for (int y = 0; y <= size_y + 1; y++) {
- for (int x = 0; x <= size_x + 1; x++) {
- input = fgetc(file);
- if (input == ' ') {
- core[y][x] = ' ';
- } else if (input == 'x') {
- core[y][x] = 'x';
- } else if (input == '-') {
- core[y][x] = '-';
- }else if (input == '|') {
- core[y][x] = '|';
- }
- }
- }
- fclose(file);
- display(*core);
- char code;
- //TODO сделать такой же цикл чтоб когда он считывал пробел, то выполнял один шаг игры
- // win = initscr();
- // noecho();
- // nodelay(win, true);
- // curs_set(0);
- file = freopen("dev/tty", "r", stdin);
- while (1) {
- code = getch();
- if (code == ' '){
- printf("\33c\e[3J");
- simulate(*core);
- // refresh();
- }
- }
- fclose(file);
- // endwin();
- }
- void display(char *core) {
- printf ("\33c\e[3J");
- char (*p_array)[size_x] = core;
- for (int y = 0; y < size_y; y++) {
- for (int x = 0; x < size_x; x++) {
- printf("%c", p_array[y][x]);
- }
- printf("%c", '\n');
- }
- }
- void simulate(char *core) {
- int support[size_y][size_x];
- char (*array)[size_x] = core;
- for (int y = 1; y < size_y - 1; y++) {
- for (int x = 1; x < size_x - 1; x++) {
- support[y][x] = check(*array, y, x);
- }
- }
- for (int y = 1; y < size_y - 1; y++) {
- for (int x = 1; x < size_x - 1; x++) {
- if (support[y][x] == 3) {
- array[y][x] = 'x';
- } else if (support[y][x] == 2 && array[y][x] == 'x') {
- array[y][x] = 'x';
- } else {
- array[y][x] = ' ';
- }
- }
- }
- display(*array);
- }
- int check(char *core, int y, int x) {
- char (*array)[size_x] = core;
- int count = 0;
- int A, B, C, D;
- //Центр поля
- A = y - 1;
- B = y + 1;
- C = x - 1;
- D = x + 1;
- //Лево центр
- if (x == 1 && y > 1 && y < 25) {
- C = 80;
- }
- //Право центр
- if (x == 80 && y > 1 && y < 25) {
- D = 1;
- }
- //Центр вверх
- if (y == 1 && x > 1 && x < 80) {
- A = 25;
- }
- //Центр низ
- if (y == 25 && x > 1 && x < 80) {
- B = 1;
- }
- //Левый верх угол
- if (y == 1 && x == 1) {
- A = 25;
- C = 80;
- }
- //Правый верх угол
- if (y == 1 && x == 80) {
- A = 25;
- D = 1;
- }
- //Левый низ угол
- if (y == 25 && x == 1) {
- B = 1;
- C = 80;
- }
- //Правй низ угол
- if (y == 25 && x == 80) {
- B = 1;
- D = 1;
- }
- if (array[A][C] == 'x') count++;
- if (array[A][x] == 'x') count++;
- if (array[A][D] == 'x') count++;
- if (array[y][C] == 'x') count++;
- if (array[y][D] == 'x') count++;
- if (array[B][C] == 'x') count++;
- if (array[B][x] == 'x') count++;
- if (array[B][D] == 'x') count++;
- return count;
- }
- int getch() {
- struct termios oldattr, newattr;
- int ch;
- tcgetattr(STDIN_FILENO, &oldattr);
- newattr = oldattr;
- newattr.c_lflag &= ~(ICANON | ECHO);
- tcsetattr(STDIN_FILENO, TCSANOW, &newattr);
- ch = getchar();
- tcsetattr(STDIN_FILENO, TCSANOW, &oldattr);
- return ch;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement