2011-12-13 10 views
3

だから、基本的に、私はこのGame of Life PHPスクリプトを書いています。私のアウトプットは間違っていて、私はそれを理解できません! スキーム全体は$ worldと呼ばれる2次元配列で構成され、各値は1または0(生きているか死んでいる)の2状態セルに対応しています。各セルは8つの隣接セルを有する。次のようにシステムの次の状態を計算する 規則は、次のとおりです。Game of Life(PHP) - 私の出力を理解しない

  1. あなたは2-3のライブの隣人(1の)を持っている場合、あなたは次のターン生きています。
  2. あなたが死んでいる。

次のように私の実装は次のとおりです。 (注:$j_minus$i_plusなどが$j-1を指し、などが、考慮にエッジを取る)

for($i=0;$i<$size;$i++) 
{ 
    for($j=0;$j<$size;$j++) 
    { 

      if(($world[$j_minus][$i] + $world[$j_plus][$i] + $world[$j][$i_minus] + $world[$j][$i_plus]+$world[$j_minus][$i_minus]+$world[$j_minus][$i_plus]+$world[$j_plus][$i_minus]+$world[$j_plus][$i_plus]) > 3) 
      { 
       $new_world[$j][$i]=0; 

      } 

      else if(($world[$j_minus][$i] + $world[$j_plus][$i] + $world[$j][$i_minus] + $world[$j][$i_plus]+$world[$j_minus][$i_minus]+$world[$j_minus][$i_plus]+$world[$j_plus][$i_minus]+$world[$j_plus][$i_plus])>= 2) 
      { 
       $new_world[$j][$i]=1; 

      } 
      else {$new_world[$j][$i]=0;} 
     } 

} 

これらのルールは$ new_worldを作り、適用された後システムの新しい状態、私はこの画面で配列を印刷する:

for($i=0;$i<$size;$i++) 
{ 
    for($j=0;$j<$size;$j++) 
    { 

     echo $new_world[$i][$j]." "; 
    } 
     echo "</p>"; 
} 

最初のst $worldの入力は、線と大きなブロックでいっぱいの完全に停滞した状態か、2-3の状態の間の振動です。ルールは正しく適用されていないようです!

答えて

1

コード内に何も表示されていないように見える場合は、ifステートメントを1つにすることはできますが、それでもなお細かいディテールにすることができます。したがって、$ j_minus、$ i_rightなどの値が実際に期待している値であることを確認してください。 newworld = world(それはここのようには見えませんが、あなたが世界を更新する場所でこれが生きるループを見ることはできません。提案されているように、手動で例を試してみて、あなたのプログラムがどこに間違っているのか見てみるべきです。最後にこれが正しい答えではないことを確認してください...生命の中で人生が停滞することが何度かあります。

+0

皆様のアドバイスをいただき、ありがとうございます。とても有難い! – rocketas

3

紙の上を歩き、それがどのようになっているかを見てください。あなたはそれが正しく計算されていないいくつかのループの後に伝えることができるはずです。

3

ビューの純粋な読みやすさの観点から、私はあなたがこのようなより良い書き込み、それをすることだと思う:あなたのコードをスペーシング

for ($i=0; $i < $size; $i++) { 

    for ($j = 0; $j < $size; $j++) { 

     $liveNeighbours = $world[$j_minus][$i] 
         + $world[$j_plus][$i] 
         + $world[$j][$i_minus] 
         + $world[$j][$i_plus] 
         + $world[$j_minus][$i_minus] 
         + $world[$j_minus][$i_plus] 
         + $world[$j_plus][$i_minus] 
         + $world[$j_plus][$i_plus]; 

     if ($liveNeighbours == 2 || $liveNeighbours == 3) { 
      $new_world[$j][$i] = 1; 
     } else { 
      $new_world[$j][$i] = 0; 
     } 

    } 

} 

が正しく非常にあなたがロジックのエラーを発見することができます。 $j_plusなどの変数をどのように作成したのかわからないため、問題の内容を正確に伝えることはできません。

関連する問題