福野泰介の一日一創 - create every day

レヴィドラゴンを召喚せよ!プログラミングという魔法

2018/09/04
#KidsIT #minecraft #js #IchigoJam 

IchigoJam開発者としては、示しておきたい、フラクタル(自己相似)の実現!
フラクタルに触れたきっかけ、ドラゴン曲線の一種、レヴィドラゴンの召喚に成功。

複雑とシンプルが入り混じった不思議な雰囲気がフラクタルの魅力。
簡単な手順(アルゴリズム)を、繰り返し(再帰的に)使うことで実現できます。

レヴィドラゴンNを描くアルゴリズム
右向いてレヴィドラゴンN-1を描く、左向いてレヴィドラゴンN-1を描く
(ただし、レヴィドラゴン1は決まった長さの線分)

このアルゴリズムをIchigoJam BASICのプログラムにすると、こんな感じ。

10 CLS:X=23:Y=18:D=0 20 [S]=7:S=S+1:GSB@FRAC 30 END 100 @FRAC 110 IF [S-1]=1 GSB@FWD:GSB@FWD:S=S-1:RTN 120 D=(D+1)%4 130 [S]=[S-1]-1:S=S+1:GSB@FRAC 140 D=(D+3)%4 150 [S]=[S-1]-1:S=S+1:GSB@FRAC 160 S=S-1:RTN 200 @FWD 210 X=X+(D=1)-(D=3):Y=Y+(D=2)-(D=0) 220 LCX,Y:?CHR$(236); 230 RTN

コンピューターサイエンスには欠かせない、データ構造の一種、スタックを使った再帰について詳しくはこちら。
ハノイの塔で遊んで分かる再帰的アルゴリズム(最大公約数、階乗、フィボナッチ)


子供に大人気のマイクラをハックする8x9Craft」を使った、もう一つの建築方法、world.setBlockを使ったレヴィドラゴンを描くJavaScriptのプログラムがこちら。

crab.setCreative(true); var item = Items.BlockofGold; var x = 0; var y = 2; var z = 0; var d = 0; var forward = function() { x += (d == 1 ? 1 : 0) - (d == 3 ? 1 : 0); z += (d == 0 ? 1 : 0) - (d == 2 ? 1 : 0); world.setBlock(item, x, y, z); }; var turnRight = function() { d = (d + 1) % 4; }; var turnLeft = function() { d = (d + 3) % 4; } var frac = function(n) { if (n == 1) { forward(); forward(); } else { turnRight(); frac(n - 1); turnLeft(); frac(n - 1); } }; frac(8);

プログラミングの基本は、コンピューターとのおはなし。
やってほしいこと(アルゴリズム)を、プログラミング言語という言葉で伝えます。
いろんな方言はありますが、ひとつしっかり覚えれば、その応用でどんどん話せる言葉が広がります。

自動建築ロボットは、マイクラの世界だけでなく現実社会にもロボットとして出現する時代。
コンピューターがない時代からすると、チートや魔法にしか見えない、プログラミングの世界。
ワクワクするものからどんどんモノにしていきましょう!


大人も楽しい、プログラミング、興味持った方、9/22に禅の里、永平寺町「四季の森会館」にてイベント!
Amil's Website: 2018年9月22日:禅xシリコンバレーxIchigoJam体験プログラミングワークショップ(初心者向け)
講師は、永平寺エボリューション大使「あみる」と私。
今回は子供にも高専生にも人気なIchigoJamのプログラム、プログラミングの真髄に、手軽に触れてみましょう!

links
- はじめての統計プログラミング with IchigoJam / 神々の里、高千穂エディション神よけゲームで遊び学ぶ統計動画レポート
- 防ごう子供のキーボード離れ!1行短縮かわくだりゲームの入門スライド - 総務省統計局でプログラミング体験!
- ハノイの塔で遊んで分かる再帰的アルゴリズム(最大公約数、階乗、フィボナッチ)
- マシン語で150倍速!フルカラーLED「APA102C」がお土産のゲーム機を作ろう福井高専公開講座
- 地図アプリでふりかえる、センサーとまちあるき!まちをよくするアイデアとIchigoJamプログラミングつぎのいっぽ
- Amil's Website: Beginner's Zen Programming Workshop @Eiheiji
- Amil's Website: Zen Programming - Private Class

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像