Как в консольной графике при перемещении объекта к границе, сделать чтобы он не останавливался или пропадал, а появлялся с противоположной границы?
Код запускал только на 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] = '@';
}
}
}
}