Luaレッスン9.2「グリッド・パターンを変化させる」和訳
原典:
http://compasstech.com.au/TNS_Authoring/Scripting/script_tut9.html
レッスン9.2「グリッド・パターンを変化させる」
正方グリッドのほかに、さらに2種類のグリッドを作ってみましょう。ひとつは、1辺がもう1辺よりも1だけ長い矩形グリッドです。もうひとつは三角形グリッドです。スライダー変数typeでグリッドの種類が選択できるようにします。
まずは矩形数です。基本的には正方数と同じスクリプトですが、1辺をもう1辺よりも1だけ長くします。
drawArray函数の先頭のところで変数typeの値を呼び出し、それを使って次のように条件式の判定を行います。
if type == 1 then
--(ここに正方ルーチンを記述)
elseif type == 2 then
--(ここに矩形ルーチンを記述)
else
--(ここに三角形ルーチンを記述)
end
3つ目の三角ルーチンと前の2つとが大きく異なる点は、ループmが0からスタートするのではなくkの現在の値からスタートすることです。こうすることで、1行ずつインデントして三角形にしているわけです。三角数は、閉じる手段として上辺と右辺とに線を引く必要があります。したがって正方数、矩形数は横線、縦線だけでしたが、三角図はさらに2本の先を引く必要があります。(訳註:よくわからない)
drawArray函数の先頭には、Nspire変数typeを変数typesに取り込むコマンド行と、最初の条件(if types == 1 then)とを追加してください。そうすれば3種類のグリッドが描画できます。
今シリーズの最後のチュートリアルでは、各パターンをダイナミックに構築する手段として、円を使ってこのスクリプトをさらに強化します。また、おなじみの矢印キーによる操作も追加します。
function drawArray(number, x, y, length, height, gc)
types=(var.recall("type") or 1)
if types == 1 then
... (as above)
elseif types == 2 then
for k = 0, number + 1 do
for m = 0, number do
gc:drawLine(
x,
y + height * m,
x + length * (number + 1),
y + height * m)
gc:drawLine(
x + length * k,
y,
x + length * k,
y + height * number)
end
end
end
else
gc:drawLine(x, y, x + length * (number+1) - length, y )
gc:drawLine(x + length * number, y, x + length * number, y + height * number)
for k = 1, number do
for m = k, number do
gc:drawLine(x + length*(m-1), y + height * m, x + length * number, y + height * m)
gc:drawLine(x + length * (k-1), y, x + length * (k-1), y + height * k)
end
end
end
-----------------------------------------------------------------------
(訳註)今回の実行例。原文からかなり変更した。