Visual c++ 康威';生命阵列问题的s博弈

Visual c++ 康威';生命阵列问题的s博弈,visual-c++,conways-game-of-life,Visual C++,Conways Game Of Life,我正在为学校写一个康威的人生游戏。在程序中,我在数组获取我分配给它们的值时遇到问题。在程序中的某一点上,他们打印出分配给他们的值(1),但在程序结束时,当我需要打印数组以显示游戏的迭代次数时,它显示的数值非常低。另一个问题是,我在放入一个循环时遇到了困难,该循环会询问是否希望您运行另一个迭代。所以我删除了它,直到之前的错误被修复。 我用C写这个++ #include <stdio.h> int main (void) { int currentarray [12][12]; in

我正在为学校写一个康威的人生游戏。在程序中,我在数组获取我分配给它们的值时遇到问题。在程序中的某一点上,他们打印出分配给他们的值(1),但在程序结束时,当我需要打印数组以显示游戏的迭代次数时,它显示的数值非常低。另一个问题是,我在放入一个循环时遇到了困难,该循环会询问是否希望您运行另一个迭代。所以我删除了它,直到之前的错误被修复。 我用C写这个++

#include <stdio.h> 

int main (void)
{
int currentarray [12][12];
int futurearray [12][12];

char c;
char check = 'y';
int neighbors = 0;

int x = 0; // row
int y = 0; //column

printf("Birth an organism will be born in each empty location that has exactly  three neighbors.\n");
printf("Death an organism with four or more organisms as neighbors will die from overcrowding.\n"); 
printf("An organism with fewer than two neighbors will die from loneliness.\n");
printf("Survival an organism with two or three neighbors will survive to the next generation.\n");
printf( "To create life input x, y coordinates.\n");

while ( check == 'y' )
{
    printf("Enter x coordinate.\n");
    scanf("%d", &x ); while((c = getchar()) != '\n' && c != EOF);
    printf("Enter y coordinate.\n");
    scanf("%d", &y ); while((c = getchar()) != '\n' && c != EOF);
    currentarray [x][y] = 1;
    printf ("%d\n", currentarray[x][y]);
    printf( "Do you wish to enter more input? y/n.\n");
    scanf("%c", &check); while((c = getchar()) != '\n' && c != EOF);
}

// Note - Need to add a printf statement showing the array before changes are made after input added.

// check for neighbors
while(check == 'y')
{
 for(y = 0; y <= 12; y++)
 {
     for(x = 0; x <= 12; x++)
     {
         //Begin counting number of neighbors:
         if(currentarray[x-1][y-1] == 1) neighbors += 1;
         if(currentarray[x-1][y] == 1) neighbors += 1;
         if(currentarray[x-1][y+1] == 1) neighbors += 1;
         if(currentarray[x][y-1] == 1) neighbors += 1;
         if(currentarray[x][y+1] == 1) neighbors += 1;
         if(currentarray[x+1][y-1] == 1) neighbors += 1;
         if(currentarray[x+1][y] == 1) neighbors += 1;
         if(currentarray[x+1][y+1] == 1) neighbors += 1;

         //Apply rules to the cell:
         if(currentarray[x][y] == 1 && neighbors < 2)
            futurearray[x][y] = 0;
         else if(currentarray[x][y] == 1 && neighbors > 3)
            futurearray[x][y] = 0;
         else if(currentarray[x][y] == 1 && (neighbors == 2 || neighbors == 3))
            futurearray[x][y] = 1;
         else if(currentarray[x][y] == 0 && neighbors == 3)
            futurearray[x][y] = 1;
     }
 }
}

// Set the current array to the future and change the future to 0

{
 for(y = 0; y < 12; y++)
 {
     for(x = 0; x < 12; x++)

     {
    //Begin the process
    currentarray [x][y] = futurearray [x][y];
    futurearray [x][y] = 0;
}
 }
}
{
 for(y = 0; y < 12; y++)
 {
     for(x = 0; x < 12; x++)

     {
//print the current life board
         printf("%d ", currentarray[x][y]);
}
}
}


// Have gone through one iteration of Life
//Ask to do another iteration
printf("Do you wish to continue y/n?\n");
scanf("%c", &check); while((c = getchar()) != '\n' && c != EOF);

return 0;
}
#包括
内部主(空)
{
int currentarray[12][12];
int futurearray[12][12];
字符c;
字符检查='y';
int=0;
int x=0;//行
int y=0;//列
printf(“出生一个生物体将在每个空位置出生,该空位置正好有三个邻居。\n”);
printf(“死亡一个相邻有四个或更多生物体的生物体将因过度拥挤而死亡。\n”);
printf(“一个邻居少于两个的有机体会因孤独而死。\n”);
printf(“生存一个有两个或三个邻居的有机体将生存到下一代。\n”);
printf(“创建生命输入x,y坐标。\n”);
while(检查=='y')
{
printf(“输入x坐标。\n”);
scanf(“%d”和&x);while((c=getchar())!=“\n”和&c!=EOF);
printf(“输入y坐标。\n”);
scanf(“%d”和&y);while((c=getchar())!=“\n”和&c!=EOF);
currentarray[x][y]=1;
printf(“%d\n”,currentarray[x][y]);
printf(“是否要输入更多输入?是/否。\n”);
scanf(“%c”、&check);while((c=getchar())!=“\n”&&c!=EOF);
}
//注意-在添加输入后进行更改之前,需要添加显示数组的printf语句。
//查看邻居
while(检查=='y')
{

对于(y=0;y,您将数组定义为[12][12]


在生成循环中,您从i=0走到i您将数组定义为[12][12]


在生成循环中,你从i=0走到i你忘记了在计算邻居之前将邻居设置为0

因为这是C++(不是C),所以你不妨在循环体中声明<代码>邻居>代码>。这样的问题也容易被发现。


还有,是我,还是循环永远都不会结束的
?你的大括号和你的缩进一样乱七八糟。你可以帮你自己和我们一个忙,把它们清理干净。

你忘了在计算它们之前将
邻居
设置为0

因为这是C++(不是C),所以你不妨在循环体中声明<代码>邻居>代码>。这样的问题也容易被发现。


还有,是我,还是循环永远都不会结束的
?你的大括号和缩进一样都是乱七八糟的。你可以帮你自己和我们一个忙,把它们清理干净。

你还忘了将两个数组的值都设置为零。这将解决你面临的荒谬的数字问题。你可以这样做至少,通过复制此for循环:

for(y = 0; y < 12; y++)
{
    for(x = 0; x < 12; x++)
    {
        //Begin the process
        currentarray [x][y] = futurearray [x][y];
        futurearray [x][y] = 0;
    }
}
为此:

printf ("%d\n", currentarray[x-1][y-1]);

我还建议在打印完每行后放置一个带换行符(\n)的printf,在每项后放置一个制表符(\t),这样格式看起来更清晰。

您还忘记了将两个数组的值都设置为零。这将解决您遇到的荒谬数字问题。您可以通过复制for循环来实现这一点:

for(y = 0; y < 12; y++)
{
    for(x = 0; x < 12; x++)
    {
        //Begin the process
        currentarray [x][y] = futurearray [x][y];
        futurearray [x][y] = 0;
    }
}
为此:

printf ("%d\n", currentarray[x-1][y-1]);

我还建议在打印完每一行后放置一个带有换行符(\n)的printf和一个制表符(\t)在每个项目之后,使格式看起来更清晰。

显然同意上述所有建议。您可能希望在Life中实现的一个好技巧是在您的区域周围创建一个额外的边框。因此,如果用户想要一个12x12网格(并且您应该允许指定宽度/高度并动态分配内存)在内部,您持有一个与实际网格周围的边框相对应的14x14网格。在运行计算之前,将顶行复制到下边框,将底行复制到上边框等。现在您可以在内部12x12网格上运行主算法,而无需担心边缘情况。这将使您的模式在另一侧重新显示,如果ey从边缘掉下来。

显然同意上述所有建议。你可能想用Life实现的一个好技巧是在你的区域周围创建一个额外的边界。因此,如果用户想要一个12x12的网格(并且你应该允许指定宽度/高度并动态分配内存)在内部,您持有一个与实际网格周围的边框相对应的14x14网格。在运行计算之前,将顶行复制到下边框,将底行复制到上边框等。现在您可以在内部12x12网格上运行主算法,而无需担心边缘情况。这将使您的模式在另一侧重新显示,如果ey从边缘脱落。

如果循环遇到问题,请尝试正确缩进代码。这对发现问题非常有帮助。如果您已经了解了函数,我还建议您将问题分解为函数。如果循环遇到问题,请尝试正确缩进代码。这对发现问题非常有帮助。我还建议br如果你已经了解了问题,那么函数就被分解成函数,while循环有了逻辑,如文本中所说的。错过了init的东西。+1谁说它不是C?我在这里没有看到任何C++特性。while循环有一些逻辑被删除,如文中所说。错过了init的东西。+1谁说不是C?我看不到任何C++特性。在这里。比不必要地检查边缘情况更方便。比不必要地检查边缘情况更方便。