ConwayのGame of LifeをCで再現する課題があります。次のコードでは、2Dで指定された座標に隣接するものが存在するかどうかを確認しようとしています「canGoUP」または「canGoDown」などは、2Dアレイのエッジ近くにある座標かどうかをチェックすることによりセグメンテーション違反を防止するという名前CのGame of Lifeのレクリエーションにおける隣人の状態を確認
int checkNeighbor(int i, int j, cell field[i][j]) {
int sum=0;
if(canGoUp(i) && canGoLeft(j) && (field[i-1][j-1].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && (field[i-1][j].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && canGoRight(j) && (field[i-1][j+1].current == ALIVE)) {
sum++;
}
if(canGoRight(j) && (field[i][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoRight(j) && (field[i+1][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && (field[i+1][j].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoLeft(j) && (field[i+1][j-1].current == ALIVE)) {
sum++;
}
if(canGoLeft(j) && (field[i][j-1].current == ALIVE)) {
sum++;
}
return sum;
}
機能:-arrayは生死状態を有しています。何らかの理由で、コードがほぼ完璧に動作していません。私は隣人のいくつかの兆候を得るが、それは私に正しい量をほとんど決して伝えることはありません。問題についてもっと良い方法がありますか?または私はちょうどコードで何かを逃したことがありますか?
'cell field [i] [j]'は 'cell field [rows] [cols]'である必要があります。 – user3386109
私は、forループでcheckNeighbor関数が使用されていると述べるべきです。そうすれば、私はすべての座標を調べて、それぞれの座標を調べることができます。そのため、行と列はiとjで表されます。 – Crocus
はい、コンパイラに 'field'配列の大きさを伝える必要があります。 'i'と' j'が0のときは、配列が0x0エントリであることをコンパイラに伝えます。しかし実際には、配列には固定サイズがあります。それが明確でない場合は、関数の署名 'int checkNeighbor(int i、int j、cell field [i] [j])を' 'int checkNeighbor(int i、int j、cellフィールド[行] [列]) '。関数の本体は問題ありません。 – user3386109