0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

プロデルが、CLRらしいので、調べて見た。
サンプルにハノイの塔、見つけたのでやってみた。

写真

image.png

サンプルコード


円盤数 = 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)}をハノイする
    	そして
終わり





以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?