(10.2)メモリをかたまりで使う、(10.2.3)全てのマス目がどうなっているか覚える

ハンドへルド・ビュー:
f:id:ti-nspire:20150220145902j:plain

-- 10.2 メモリをかたまりで使う
-- 10.2.3 全てのマス目がどうなっているか覚える
local w = platform.window.width()  -- 画面の幅
local h = platform.window.height() -- 画面の高さ
local lineCount = 20               -- 縦の段数(外側の段数)
local colCount = 10              -- 横の段数(内側の段数)
local sideLen = math.floor(h/(lineCount * 1.25))  -- 四角の 1 辺の長さ(隙間をあけないなら 1 辺の長さは 1 段の高さと同じにすればよい)
local dansa = math.floor(h/lineCount)             -- 1 段の高さ
local marginLeft = sideLen * 1 -- 左端の余白
local marginTop = sideLen/2  -- 上端の余白
local refWallL = {marginLeft, marginTop}                                -- 左壁始点
local refWallR = {marginLeft + dansa + dansa * (colCount), marginTop}   -- 右壁始点
local refBottom = {marginLeft + dansa, marginTop + dansa * (lineCount - 1)}--底始点
local refInnerL = {refWallL[1] + dansa, marginTop} -- 内壁左側始点
local gray = 0xC5C1AA
local red = 0xC67171
local blue = 0x7D9EC0

--- マス目の状態を覚えておくテーブルを作る -----------
--- インデックスは Lua の習慣に従って 1 から始める 
mt = {}                        -- 空のテーブルを作成する
for i = 1, lineCount do       -- 行を作る
   mt[i] = {}
   for j = 1, colCount + 2 do -- 列を作る
      mt[i][j] = 0             -- 初期値を入れる
   end
end


---- 部分プログラム(左壁始点の何マス目から, 1 辺いくつの正方形を, 横に何個, 縦に何個敷き詰める, 何色で, gc)------
---- 始点をゼロ・マス目とする
function drawBlocks(x, y, sideLen, yokoCount, tateCount, color, gc)
   gc:setColorRGB(color)
   for i = 0, tateCount - 1 do
      for j = 0, yokoCount - 1, 1 do
         gc:drawRect(refWallL[1] + dansa * (x + j),
                     refWallR[2] + dansa * (y + i),                       
                     sideLen, sideLen)
         mt[y+(i+1)][x+(j+1)] = 1  -- 四角を描いたらマス目テーブルに 1 を代入する   
      end
   end
end


function on.paint(gc)
---[[
    drawBlocks(3,6,sideLen,3,7,red,gc)  -- 試しにブロックを描いてみる
--]]
     drawBlocks(0,            -- 左壁を描く
                0,
                sideLen,
                1,
                lineCount,
                gray, gc)
     drawBlocks(colCount + 1,  -- 右壁を描く
                0,
                sideLen,
                1,
                lineCount,
                gray, gc)
     drawBlocks(1,              -- 底を描く
                lineCount - 1,
                sideLen,
                colCount,
                1,
                gray, gc)
---[[確認のため、マス目行列の内容を表示する
   for i = 0, lineCount - 1 do
      for j = 0, colCount + 1 do
         gc:setFont("sansserif", "r", 7)
         gc:setColorRGB(blue)
         gc:drawString(mt[i+1][j+1], 
                       1 + refWallL[1] + dansa * (j),
                       4 + refWallL[2] + dansa * (i),
                       "middle")
      end
   end--]]
end


参考文献: