4

セルのグリッドを表すために 2 次元配列を使用しています。エッジまたはコーナーにあるセルが境界外になる隣接セルをチェックすると、永久に死んでいると見なされます。

function getCell(row, column) {
  if(row === -1 || row === cellMatrix.length || column === -1 || column === cellMatrix[0].length)
  {
    return 0;
  }
  else return cellMatrixCopy[row][column];
}

グライダーがグリッドの端に到達したときに停止してブロックに変わるような動作を取り除きたいだけです。配列の端をどのように「取り除く」のですか?

ここで完全な実装をチェックアウトできます。前もって感謝します。

4

3 に答える 3

4

「無限」の 2D 平面を偽造する方法は?

無限次元のゲーム ボードを作成するには、行と列のインデックスが任意精度の整数である疎行列表現を使用します。おおよそ次のとおりです。

map<pair<BigInt,BigInt>, Cell> matrix;

Cell& get_cell(BigInt x, BigInt y)
{
    return matrix[make_pair[x,y]];
}
于 2013-09-02T00:23:17.960 に答える
0

人生のゲームが無限であると偽ることは不可能です。あなたが作成した構造が現在の境界を超えて拡張しようとすると、それが無限に拡張するのを止めます。MitchWheatが言ったように、(より自然に見える動作のために)最善の策であるエッジをラップできますが、チューリングが完了しているため、無限のメモリがなければ、あらゆる状況で無限であると偽ることはできません.

人生のゲームは完全にチューリングされているため、何かが「エッジから外れた」場合、それが一般的なケース (停止問題に関連) で戻ってくるかどうかを判断することは不可能です。端から外れると、ある程度の不正確さが生じます。これが許容できる場合は、そのアプローチを検討する必要がありますが、IMO が人生のゲームを誤ってシミュレートすると、目的が達成できなくなります。

もう1つの方法は、オブジェクトが端から外れるように見えるように、表示するよりも広い領域を意図的にシミュレートすることです

于 2013-09-02T00:10:35.680 に答える