2011-12-25 14 views
3

Game of Lifeのクローンのためにトロイダルアレイを作りたいと思います。どのようにトロイダルにするのですか?トロイダルアレイの作成方法は?

私は考えることができ、私が考えることができる最高のソリューションは、最初の行と列が最後の行と列に等しいと言っていただけです。

他のアイデアはありますか?

EDIT:Game of Lifeは何人か分からないことがありますか?これは、配列を持った小さな細胞です。これらの細胞は死んでも生きていてもお互いに反応します。セルが現在のソリューションの端に達すると、それはすべての死んだセルの行/列に衝突します。私が今やりたいことは、細胞が端に達すると、もう一方の細胞がポップアップすることです。私が今必要なもの

#region check adjacent squares 
     if (grid[x - 1,y - 1] == true) 
      adjacentsquares++;    
     if (grid[x, y - 1] == true) 
      adjacentsquares++;    
     if (grid[x + 1, y -1] == true) 
      adjacentsquares++;    

     if (grid[x - 1, y] == true) 
      adjacentsquares++; 
     if (grid[x + 1, y] == true) 
      adjacentsquares++; 

     if (grid[x - 1, y + 1] == true) 
      adjacentsquares++; 
     if (grid[x, y + 1] == true) 
      adjacentSquares +=1; 
     if (grid[x + 1, y + 1] == true) 
      adjacentSquares +=1; 
#endregion 

は、私は、隣接するセルを確認したい時はいつでも(それは外のだろう、ということである:私のコードは今のように見える何

enter image description here

(下の画像を参照してください)通常の配列の境界)、もう片方をチェックします。

位置[10,0]を確認します。隣接するセルを確認する必要があります。[9, max][10, max][11, max]

+0

です。あなたは 'maxX == 0'と' maxY == 0'を意味します。そうでない場合、それらの2つの点だけが '== 0'であればトロイダルではありません。 – Oded

+0

私が擬似コードの部分で意味したことは、最初の行と列が最後の行と列に等しいことです。 (これを追加すると、より明確になる可能性があります) –

+0

サンプルを追加 –

答えて

4

は、私は右のあなたのアイデアを得るわからないんだけど、なぜあなたはあなたの配列へのアクセスをカプセル化するメソッドを作成していない、それはxとyが両方ともint型が渡され

array[x % max, y % max] 

にアクセスこの方法に。

もう少し説明してください:
array[sizeX, sizeY]のような配列があるとします。アレイの最初の位置、たとえばarray[0, 0]にアクセスしたい場合は、XとYの両方の次元(トロイダルアレイ)をラップするので、array[0, 0]またはarray[sizeX, sizeY]のようにすることができます。したがって、あなたは、モジュラス演算子を使用することができ、そしていつものようにあなたの配列にアクセス:

array[desiredXPosition % sizeX, desiredYPosition % sizey] 

いっそ、あなたのためにこれを自動的に行いメソッドを作成します。

+0

もう少し詳しいことを教えてください。私はまだプログラミングに新しく、あなたが意味することを本当に理解していません。 –

+0

私はこの権利があるかどうかを見てみましょう。このように設定すると、外側の行/列のセルは同じ値になりますか? –

+0

私はあなたが何を意味するかは分かりませんが、答えはおそらくはいです。たとえば配列[2、2]として実装されたトロイダルでは、配列[0、0]と配列[2、2]は、その値を設定しているか値を読み込んでいるかに関わらず、同じ要素を参照する必要があります。同様に、配列[3,2]と配列[1、0]は同じ要素を参照する必要があります。この場合、「X軸」と「Y軸」の両方でトロイダル回りを回っているからです。お役に立てれば! –

4

配列をインデックスするときはいつでも、モジュラスで配列をインデックスします。

array[ x % size_x, y % size_ y] 

私はsize_xなくmax_xそれらを呼び出すに注意してください。最大許容xインデックスはsize_x - 1

関連する問題