Je crée ce programme en utilisant la bibliothèque reni2D trouvée sur involuntaryexercise.com J'ai créé une grille composée d'un tableau 2D de lignes et de colonnes dans lequel chaque carré est cliqué être allumé et éteint. Maintenant, j'essaie de faire des algorithmes de travail qui respectent les règles, mais lors de l'exécution du programme, ils disparaissent tous après que le programme passe par les boucles liées. Je ne vois rien de fondamentalement mauvais ici, alors je compte sur les yeux des programmeurs qualifiés pour me guider sur le bon chemin. [UPDATE]: Le programme fonctionne maintenant mieux, sauf qu'il ne suit pas les règles de Game Of Life pour quelque raison que ce soit.Problème lors de la tentative de coder le jeu de vie de Conway en C++
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;
}
}
}
}
Avez-vous essayé de passer par un débogueur? –
Je ne sais pas quel est le problème, mais je vois énormément de code pour une fonction, et au moins un bloc entièrement redondant. Je commencerais par le casser en plus petites fonctions. – Ken