나는 Conway의 Game of Life를 쓰려고합니다.Game of Life C++, 이웃 확인하기
불행히도 블록의 이웃을 검사 할 때 항상 배열의 특정 요소에서 오류가 발생합니다. 특히 grid[0][11]
에서 나에게 하나의 이웃을 제공하지만, 주변 블록이 공간이 아니거나, 내 코드에 ' '
인 이웃이라고하는 변수에 값을 추가하도록 설정했습니다.
if 문에서의 조건은 배열 외부로 나오지 않기도합니다.
배열 전체가 ' '
으로 채워져 있는데도 불구하고 이웃에도 여전히 값을 얻습니다.
저는 몇 시간 동안이 문제를 해결해주었습니다. 내 코드는 여전히 테스트 시도로 가득 차 있으며, 나는 그 깔끔함의 부족에 대해 사과드립니다. 제 문제를 해결할 수있는 도움을 주신 모든 분들께 미리 감사드립니다. 당신이 인덱스을 확인 할 할 때
int _tmain(int argc, _TCHAR* argv[])
{
bool infloop = true;
//Create the playing grid.
char grid[HEIGHT][WIDTH];
//Comment out later. Used for testing.
for(int i=0; i<75; i++)
for(int j=0; j<22; j++)
grid[i][j] = ' ';
//Create initial seed here. grid [x coordinate] [y coordinate].
//grid [1][1] = '+'; grid [2][1] = '+'; grid [3][1] = '+';
//Key. * is going to live. + is alive currently.
//- is going to die, and negative space is dead.
//As Conway's Game of Life runs infinitely, create an infinite loop.
while (infloop)
generation(grid);
cout << endl;
system("pause");
return 0;
}
void generation(char grid[][WIDTH]) {
int neighbors;
/*Check each point on the grid for alive or dead. If it is, check the
surrounding neighbors and apply the game's rules.*/
for(int x=0; x<75; x++) {
for(int y=0; y<22; y++)
{
neighbors = 0;
/*check all eight neighbors except for when outside of the
array.*/
if((grid[x+1][y] != ' ') && (grid[x+1][y] < grid[HEIGHT][y])){
neighbors++; cout << "A";
}
if((grid[x-1][y] != ' ') && (grid[x-1][y] > grid[-1][y])){
neighbors++; cout << "E";
}
if((grid[x][y+1] != ' ') && (grid[x][y+1] < grid[x][WIDTH])){
neighbors++; cout << "C";
}
if((grid[x][y-1] != ' ') && (grid[x][y-1] > grid[x][-1])){
neighbors++; cout << "G";
}
if((grid[x+1][y+1] != ' ') && (grid[x+1][y+1] < grid[HEIGHT][WIDTH])){
neighbors++; cout << "B";
}
grid[0][11] = ' '; grid[11][0] = ' ';
if((grid[x-1][y-1] != ' ') && (grid[x-1][y-1] > grid[-1][-1])){
neighbors++; cout << "F";
}
if((grid[x+1][y-1] != ' ') && (grid[x+1][y] < grid[HEIGHT][y]) &&
(grid[x][y-1] > grid[x][-1])){
neighbors++; cout << "H";
}
if((grid[x-1][y+1] != ' ') && (grid[x-1][y] > grid[-1][y])
&& (grid[x][y+1] < grid[x][WIDTH])){
neighbors++; cout << "D";
}
system("pause");
cout << neighbors;
//Set a marker for each point according to neighbor amounts and key.
if(grid[x][y] == '+' && neighbors < 2)
grid[x][y] = '-';
if(grid[x][y] == '+' && (neighbors == 2 || neighbors == 3))
grid[x][y] = '*';
if(grid[x][y] == '+' && neighbors > 3)
grid[x][y] = '-';
if(grid[x][y] == ' ' && (neighbors == 3))
grid[x][y] = '*';
}
}
for(int x=0; x<75; x++){
for(int y=0; y<22; y++)
{
if(grid[x][y] == '*')
grid[x][y] = '+';
if(grid[x][y] == '-')
grid[x][y] = ' ';
}
}
system("pause");
display(grid);
}