Subscribed unsubscribe Subscribe Subscribe

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

-----------------------------------------------------------------------

(訳註)今回の実行例。原文からかなり変更した。 

f:id:ti-nspire:20141016135708j:plain

 f:id:ti-nspire:20141016135855g:plain

Remove all ads