Как в консольной графике при перемещении объекта к границе, сделать чтобы он не останавливался или пропадал, а появлялся с противоположной границы?

Код запускал только на macOS.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define spaceX 80
#define spaceY 25

void space(char a[spaceY][spaceX]);
void output(char a[][spaceX]);
void change(char a[spaceY][spaceX]);
void generate(char a[spaceY][spaceX]);

int main() {
    char a[spaceY][spaceX], control = '0';
    space(a);
    // generate(a);
    a[6][6] = '@';
    a[7][7] = '@';
    a[7][8] = '@';
    a[8][6] = '@';
    a[8][7] = '@';
    output(a);
    while (control != 'q') {
        scanf("%c", &control);
        change(a);
        output(a);
    }
}


void space(char a[spaceY][spaceX]) {
    for (int i = 0; i < spaceY; i++) {
        for (int j = 0; j < spaceX; j++) {
            if (i == 0 || i == spaceY-1 || j == 0 || j == spaceX-1) {
                a[i][j] = '#';
            } else {
                a[i][j] = ' ';
            }
        }
    }
}


void output(char a[][spaceX]) {
    for (int i = 0; i < spaceY; i++) {
        for (int j = 0; j < spaceX; j++) {
            printf("%c", a[i][j]);
        }
        printf("\n");
    }
}


 void change(char a[][spaceX]) {
    char a1[spaceY][spaceX];
    for (int i = 1; i < spaceY-1; i++) {
        for (int j = 1; j < spaceX-1; j++) {
            a1[i][j] = a[i][j];
        }
    }
    int neighbors = 0;
    char cell = '@';
    for (int i = 1; i < spaceY-1; i++) {
        for (int j = 1; j < spaceX-1; j++) {
            if (a[i][j] == '@') {
                if (a[i+1][j] == cell) {
                    neighbors++;
                }
                if (a[i-1][j] == cell) {
                    neighbors++;
                }
                if (a[i][j+1] == cell) {
                    neighbors++;
                }
                if (a[i][j-1] == cell) {
                    neighbors++;
                }
                if (a[i+1][j+1] == cell) {
                    neighbors++;
                }
                if (a[i-1][j+1] == cell) {
                    neighbors++;
                }
                if (a[i+1][j-1] == cell) {
                    neighbors++;
                }
                if (a[i-1][j-1] == cell) {
                    neighbors++;
                }
            }
            if (neighbors > 3 || neighbors < 2) {
                a1[i][j] = ' ';
            }
            neighbors = 0;
            if (a[i][j] == ' ') {
                if (a[i+1][j] == cell) {
                    neighbors++;
                }
                if (a[i-1][j] == cell) {
                    neighbors++;
                }
                if (a[i][j+1] == cell) {
                    neighbors++;
                }
                if (a[i][j-1] == cell) {
                    neighbors++;
                }
                if (a[i+1][j+1] == cell) {
                    neighbors++;
                }
                if (a[i-1][j+1] == cell) {
                    neighbors++;
                }
                if (a[i+1][j-1] == cell) {
                    neighbors++;
                }
                if (a[i-1][j-1] == cell) {
                    neighbors++;
                }
            }
            if (neighbors == 3) {
                a1[i][j] = '@';
            }
            neighbors = 0;
        }
    }
    for (int i = 1; i < spaceY-1; i++) {
        for (int j = 1; j < spaceX-1; j++) {
            a[i][j] = a1[i][j];
        }
    }
}


void generate(char a[spaceY][spaceX]) {
    int gerc = 10;
    srand(time(NULL));
    int numberX, numberY;
    for (int i = 0; i < spaceY; i++) {
        for (int j = 0; j < spaceX; j++) {
            if (rand()%100 < gerc) {
                numberX = 1 + rand()%(spaceX-2);
                numberY = 1 + rand()%(spaceY-2);
                a[numberY][numberX] = '@';
            }
        }
    }
}

Ответы (0 шт):