ハンドへルド・ビュー:
-- 6.4 ここまでを組み合わせる -- 壁や底を描いた状態で四角が落ちてくるようにする。 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/2 -- 左端の余白 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 = {132, 132, 132} local red = {255, 0, 0} ---- 部分プログラム(どこから, 1 辺いくつの正方形を, どの方向で, 何個描く, 何色で, gc) function drawBlocks(x, y, sideLen, direction, number, color, gc) local a; local b gc:setColorRGB(unpack(color)) if direction == "tate" then a = 0; b = 1 elseif direction == "yoko" then a = 1; b = 0 end for i = 0, number - 1 do gc:fillRect(x + (dansa * i) * a, y + (dansa * i) * b, sideLen, sideLen) end end --------------------------------------------------------------------------------- local dropLen = 0 function on.paint(gc) drawBlocks(refWallL[1] , marginTop , sideLen, "tate", lineCount, gray, gc) -- 左壁を描く drawBlocks(refWallR[1] , marginTop , sideLen, "tate", lineCount, gray, gc) -- 右壁を描く drawBlocks(refBottom[1], refBottom[2], sideLen, "yoko", colCount , gray, gc) -- 底を描く timer.start(0.1) -- 落ちるブロックを描く if marginTop + dropLen + dansa >= refBottom[2] then timer.stop() end drawBlocks(refInnerL[1] + dansa * 4, marginTop + dropLen, sideLen, "yoko", 1 , red, gc) end function on.timer() dropLen = dropLen + dansa -- タイマーが動いたら描画始点の値を 1 段ずつ増やす platform.window:invalidate() -- 画面をリフレッシュ end
参考文献:
プログラムはこうして作られるプログラマの頭の中をのぞいてみよう
- 作者: 平山尚(株式会社セガ)
- 出版社/メーカー: 秀和システム
- 発売日: 2013/09/25
- メディア: 単行本
- この商品を含むブログ (5件) を見る