前回のスクリプトを少し変えた。
on.paint() 函数の中身をすっきりさせるため、大部分を drawCell() 函数へ移した。
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