概要
プロデルが、CLRらしいので、調べて見た。
サンプルにハノイの塔、見つけたのでやってみた。
写真
サンプルコード
円盤数 = 4
解法 = {}
円盤数だけ{1, 2, 3}をハノイする
メイン画面を表示する
待機する
メイン画面とは
+塔群 = {}
+塔位置 = {120, 240, 360}
+移動番号 = 0
ウィンドウを継承する
はじめの手順
初期化する
タイマー1というタイマーを作る
タイマー1の間隔を2500に変える
キャンバス1へ線を描いて棒Aとする
その始点は{塔位置(1),150}
その終点は{塔位置(1),250}
その線色を灰色に変える
その太さを10に変える
キャンバス1へ線を描いて棒Bとする
その始点は{塔位置(2),150}
その終点は{塔位置(2),250}
その線色を灰色に変える
その太さを10に変える
キャンバス1へ線を描いて棒Cとする
その始点は{塔位置(3),150}
その終点は{塔位置(3),250}
その線色を灰色に変える
その太さを10に変える
キャンバス1へ四角形を描いて底板とする
その位置と大きさは{20,250,440,30}
その太さを0に変える
その背景色を灰色に変える
キャンバス1へ文字を描いて回数ラベルとする
その位置は{300,10}
そのフォントを「メイリオ」に変える
その文字色を緑色に変える
その文字サイズを20に変える
スタックを作って塔群(1)とする
スタックを作って塔群(2)とする
スタックを作って塔群(3)とする
長さは、120
円盤数回数にカウントして繰り返す
キャンバス1へ四角形を描いて円盤とする
その位置と大きさは{棒Aの横 - 長さ / 2, 底板の縦 - (塔群(1)の要素数 + 1) * 20, 長さ, 20}
その背景色は、HLS({(数 * 360 / 円盤数) % 360,0.8,0.6})
塔群(1)に円盤を積む
長さは、長さ * 0.7
そして
終わり
初期化する手順
この実質大きさを{796,473}に変える
この内容を「ハノイの塔」に変える
初期化開始する
自動ボタンというボタンを作る
その位置と大きさを{293,23,112,34}に変える
その内容を「自動」に変える
その移動順を4に変える
前ボタンというボタンを作る
その位置と大きさを{33,23,112,34}に変える
その内容を「戻る」に変える
次ボタンというボタンを作る
その位置と大きさを{161,23,112,34}に変える
その内容を「進む」に変える
その移動順を1に変える
キャンバス1というキャンバスを作る
その位置と大きさを{0,0,796,473}に変える
その移動順を2に変える
そのドッキング方向を「全体」に変える
初期化終了する
この設計スケール比率を{144,144}に変える
終わり
次ボタンがクリックされた時の手順
移動番号が解法の個数なら返す
移動番号を増やす
操作は、解法(移動番号)
塔群(操作(2))から取り出して塔群(操作(3))へ積む
反映する
終わり
前ボタンがクリックされた時の手順
移動番号が0なら返す
操作は、解法(移動番号)
塔群(操作(3))から取り出して塔群(操作(2))へ積む
移動番号を減らす
反映する
終わり
反映する手順
回数ラベルの内容は「[移動番号]回目」
塔番号は、1
塔群のすべての塔についてそれぞれ繰り返す
番号は、1
塔の全要素のすべての円盤についてそれぞれ繰り返す
円盤の位置は{塔位置(塔番号) - 円盤の幅 / 2, 底板の縦 - 170}
0.2秒待つ
円盤の位置は{塔位置(塔番号) - 円盤の幅 / 2, 底板の縦 - (塔の要素数 - 番号 + 1) * 20}
番号を増やす
そして
塔番号を増やす
そして
終わり
自動ボタンがクリックされた時の手順
タイマー1が動作中なら
タイマー1を停止する
そうでなければ
移動番号が解法の個数なら
移動番号は、0
塔群は、塔群から1番目と3番目を交換したもの
そして
タイマー1を開始する
そして
終わり
タイマー1が時間になった時の手順
次ボタンがクリックされた
移動番号が解法の個数なら
タイマー1を停止する
そして
終わり
終わり
【値:整数】だけ【塔:整数の配列】をハノイする手順
値>0なら
値-1だけ{塔(1), 塔(3), 塔(2)}をハノイする
解法に{値, 塔(1), 塔(3)}を加える
値-1だけ{塔(2), 塔(1), 塔(3)}をハノイする
そして
終わり
以上。