適当にだらだらと貼っつけます。
-
-
-
- -
-
-
最初のランダムなパターンを生成する関数と、現世代のパターンから次世代のパターンを生成する関数に分けてみる。
(次世代パターン生成関数はまだランダムに生成してるだけ)
val screenW = 400; val screenH = 200; val cellSize = 4; // 縦横のセルの数 val cellNumX = screenW / cellSize val cellNumY = screenH / cellSize size(screenW, screenH) frameRate(4) var count = 0 // true or false がランダムに詰まった cellNumX * cellNumY の二次元配列を生成 def generateRandomMatrix(): Array[Array[Boolean]] = { new Array[Int](cellNumX).map{ x => new Array[Int](cellNumY).map{ y => random(2) > 1 } } } // 現世代のパターンから次世代のパターンを生成 def generateNextMatrix(matrix: Array[Array[Boolean]]): Array[Array[Boolean]] = { generateRandomMatrix } // matrix の内容に従って描画(trueならセルを描画) def drawMatrix(matrix: Array[Array[Boolean]]) = { stroke(0) for (yi <- 0 to cellNumY - 1){ val y = yi * cellSize for (xi <- 0 to cellNumX - 1){ val x = xi * cellSize if( matrix(xi)(yi) ){ rect(x, y, cellSize - 2, cellSize - 2) } } } } var matrix = generateRandomMatrix def draw { fill(255) rect(0, 0, screenW, screenH) drawMatrix(matrix) matrix = generateNextMatrix(matrix) count += 1 if(count > 10){ System.exit(0) } }
-
-
-
- -
-
-
generateNextMatrix の中身を書いてみた。現世代の生死を反転させるだけ。
val screenW = 400; val screenH = 200; val cellSize = 4; // 縦横のセルの数 val cellNumX = screenW / cellSize val cellNumY = screenH / cellSize size(screenW, screenH) frameRate(4) // true or false がランダムに詰まった cellNumX * cellNumY の二次元配列を生成 def generateRandomMatrix(): Array[Array[Boolean]] = { new Array[Int](cellNumX).map{ x => new Array[Int](cellNumY).map{ y => random(2) > 1 } } } // 現世代のパターンから次世代のパターンを生成 def generateNextMatrix(matrix: Array[Array[Boolean]]): Array[Array[Boolean]] = { var x = -1 var y = -1 matrix.map{ row => y = -1 x += 1 row.map{ col => y += 1 ! matrix(x)(y) } } } // matrix の内容に従って描画(trueならセルを描画) def drawMatrix(matrix: Array[Array[Boolean]]) = { stroke(0) for (yi <- 0 to cellNumY - 1){ val y = yi * cellSize for (xi <- 0 to cellNumX - 1){ val x = xi * cellSize if( matrix(xi)(yi) ){ rect(x, y, cellSize - 2, cellSize - 2) } } } } /********************************/ var count = 0 // 最初のランダムなパターンを生成 var matrix = generateRandomMatrix def draw { fill(255) rect(0, 0, screenW, screenH) drawMatrix(matrix) // 現世代のパターンから次世代のパターンを生成 matrix = generateNextMatrix(matrix) count += 1 if(count > 10){ System.exit(0) } }