Я строю эту программу, используя библиотеку reni2D, найденную на involuunteexercise.com. Я создал сетку, состоящую из двухмерного массива строк и столбцов, в котором каждый квадрат нажимается для включения и выключения.Сейчас я пытаюсь создать несколько работающих алгоритмов, которые соответствуют правилам, но при запуске программы все они исчезают после прохождения программой соответствующих циклов.Я не вижу в этом ничего плохого, поэтому я полагаюсь на опытных программистов, которые направят меня по правильному пути.
[ОБНОВЛЕНИЕ]: Программа теперь работает лучше, за исключением того, что она непо какой-то причине не следует правилам Game of Life.
if(raGetKey(VK_RETURN))
{
//occupied cells
for(int i=0; i<ROWS; i++){ //768/24 = 32
for(int j=0; j<COLS; j++){ //768/32 = 24
//Occupied cells
if(sq[i][j].isOn == true && sq[i][j].neighbors < 4)
{
//UDLR
if((j+1)<COLS && sq[i][j+1].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
if((j-1)>(-1) && sq[i][j-1].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
if((i+1)<ROWS && sq[i+1][j].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
if((i-1)>(-1) && sq[i-1][j].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
if(sq[i][j].neighbors >= 4)
break;
//Diagonal
if((i+1)<ROWS && (j+1)<COLS && sq[i+1][j+1].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
if((i-1)>(-1) && (j-1)> (-1) && sq[i-1][j-1].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
if((i-1)>(-1) && (j+1)<COLS && sq[i-1][j+1].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
if((i+1)<ROWS && (j-1)> (-1) && sq[i+1][j-1].isOn == true){
sq[i][j].neighbors += 1;
printf("The occupied sq[%d][%d] gains a neighbor\n", i, j);
}
}
//Empty cells
if(sq[i][j].isOn == false && sq[i][j].neighbors < 4)
{
//UDLR
/*if((i+1)<ROWS && (j+1)<COLS && (i-1)>0 && (j-1)>0)
{*/
if((j+1)<COLS && sq[i][j+1].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
if((j-1)>0 && sq[i][j-1].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
if((i+1)<ROWS && sq[i+1][j].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
if((i-1)>-1 && sq[i-1][j].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
if(sq[i][j].neighbors >= 4)
break;
//Diagonal
if((i+1)<ROWS && (j+1)<COLS && sq[i+1][j+1].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
if((i-1)>(-1) && (j-1)> (-1) && sq[i-1][j-1].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
if((i-1)>(-1) && (j+1)<COLS && sq[i-1][j+1].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
if((i+1)<ROWS && (j-1)> (-1) && sq[i+1][j-1].isOn == true){
sq[i][j].neighbors += 1;
printf("The empty sq[%d][%d] gains a neighbor\n", i, j);
}
//}
}
}
}
for(int i=0; i<ROWS; i++) //768/24 = 32
{
for(int j=0; j<COLS; j++) //768/32 = 24
{
if(sq[i][j].isOn == true)
{
if(sq[i][j].neighbors <= 1){
sq[i][j].isOn = false;
sq[i][j].neighbors = 0;
printf("sq[%d][%d] is ON and has less than 1 neighbors ... Died from lonliness\n", i, j);
}
if(sq[i][j].neighbors >= 4){
sq[i][j].isOn = false;
sq[i][j].neighbors = 0;
printf("sq[%d][%d] is ON and has neighbors is greater than or equal to 4... Died from overpopulation\n", i, j);
}
if(sq[i][j].neighbors > 1 && sq[i][j].neighbors < 4){
sq[i][j].isOn = true;
printf("sq[%d][%d] is ON has 2 or 3 neighbors... Lives\n", i, j);
sq[i][j].neighbors = 0;
}
}
if(/*sq[i][j].isOn == false && */sq[i][j].neighbors == 3){
printf("sq[%d][%d] is OFF has 3 neighbors... Reproduce\n", i, j);
sq[i][j].isOn = true;
sq[i][j].neighbors = 0;
}
}
}
}