森林火災のシミュレーション 2, drawCell()

前回のスクリプトを少し変えた。

on.paint() 函数の中身をすっきりさせるため、大部分を drawCell() 函数へ移した。

f:id:ti-nspire:20160111171157j:plain

require "color"

-- nspire 側で用意した行列 "mat" を lua 側の変数 mat に読み込む。
local mat = var.recall("mat")

----------------- ルール行列と発火レベル範囲とを定義する -------------------
local matRule = {{0,0,0,0,0,0,0,0,0,color.brown},--レベル 0、空き地、茶
                 {1,2,2,2,2,3,3,3,3,color.green},--レベル 1、樹木、緑
                 {2,3,3,4,4,5,5,5,5,color.yellow},--レベル 2、発火準備、黄
                 {3,4,4,5,5,5,5,5,5,color.yellow},--レベル 3、発火準備、黄
                 {4,5,5,5,5,5,5,5,5,color.yellow},--レベル 4、発火準備、黄
                 {6,6,6,6,6,6,6,6,6,6,color.red},--レベル 5、発火、赤
                 {7,7,7,7,7,7,7,7,7,7,color.red},--レベル 6、発火、赤
                 {8,8,8,8,8,8,8,8,8,8,color.red},--レベル 7、発火、赤
                 {9,9,9,9,9,9,9,9,9,9,color.red},--レベル 8、発火、赤
                 {9,9,9,9,9,9,9,9,9,color.gray}}--レベル 9、木炭、灰
local fireRange = {lower = 5, upper = 8}
----------------------------------------------------------------------------

function on.paint(gc)
   drawCell(mat, 50, 5, 9, matRule, true, gc)
end



-- セルを塗り分ける部分函数(行列, 原点座標, 1 辺の長さ, ルール行列, 数字を表示する/しない, gc)
function drawCell(mat, x0, y0, sideLen, matRule, stringOn, gc)
   for r = 1, #mat do
      for c = 1, #mat[r] do
         gc:setColorRGB(matRule[mat[r][c] + 1][#matRule[mat[r][c] + 1]]) --[[ルール行列の各行の末尾に指定した色を読み取る。--]]
         gc:fillRect(x0 + (c - 1) * sideLen, y0 + (r - 1) * sideLen, sideLen, sideLen)
         if stringOn then --[[行列の要素を表示する。--]]
            gc:setFont("serif", "r", 7)
            gc:setColorRGB(color.black)
            gc:drawString(mat[r][c], x0 + (c - 1) * sideLen, y0 + (r - 1) * sideLen, "top")
         end
      end
   end
end