ライフ・ゲームのときと同じ手順でスクリプトを作る。
森林を等間隔に分割し、樹木の部分を緑色、空き地を茶色、火災発生箇所を赤色で表現する。
シナリオ(見方はライフ・ゲームのときと同じ):
(下掲参考文献の図 11.24。図中の「近傍にある発火セルの合計数」は、注目セルとムーア近傍と合わせて 9 つのセルを対象としている。)
まずは行列の要素に応じてセルの色を塗り分けてみる。
local color = {0x8B4513, -- 空き地(茶) 0x00CD66, -- 樹木(緑) 0xFFFF00, -- 発火準備(黄) 0xFFFF00, -- 発火準備(黄) 0xFFFF00, -- 発火準備(黄) 0xFF0000, -- 発火(赤) 0xFF0000, -- 発火(赤) 0xFF0000, -- 発火(赤) 0xFF0000, -- 発火(赤) 0xAAAAAA} -- 木炭(灰) local sideLen = 10 local mat = var.recall("mat") function on.paint(gc) for r = 1, #mat do for c = 1, #mat[1] do if mat[r][c] ~= nil then drawCell(c, r, sideLen, color[mat[r][c] + 1], gc) -- 行列の要素の値に応じて色を塗り分ける ---[[ gc:setColorRGB(0,0,0) gc:setFont("sansserif", "r", 7) gc:drawString(mat[r][c], (c - 1) * sideLen, (r - 1) * sideLen, "top") --]] end end end end function drawCell(c, r, sideLen, color, gc) gc:setColorRGB(color) gc:fillRect((c - 1) * sideLen, (r - 1) * sideLen, sideLen, sideLen) end
参考:
新 Excelコンピュータシミュレーション -数学モデルを作って楽しく学ぼう-
- 作者:三井 和男
- 発売日: 2010/03/12
- メディア: 単行本(ソフトカバー)