新プログラミング言語?Macaw(マコー)悪戦苦闘開発日記

プログラミンやScratchに触発された私が新しいプログラミング言語を模索中。

B012改めMacaw(コードネーム)始動。

前回書き込みの発想の転換でも書いた通り、

リアルでブロックを組み立ててそれを画像として読み込む事でプログラムを組む、的な企画を進めていきたいと思います。

 

で、今回そのプロジェクトを進める前に近所の某100円均一で実際にブロックを買ってきて組んでみました。

f:id:kairi-sakusaku:20190321051549j:plain

コンゴウインコ

でこの作ったブロックのコンゴウインコ、英語でMacaw(マコー)って言うらしいのですが響きが良いのでそのまま開発コードネームにしちゃいます。

ということで、今後も宜しくお願いします。

ずっと待ってんだけど

はてなキーワード

はてなキーワードとは編集

 

はてなダイヤリーが春終了、はてなブログに移行促進に伴い記事の新規作成・編集機能が現在一時停止中。

なのですがダイヤリー終了時期が未だ未定、そのせいかまだはてなキーワードの記事をいじくれない状態です。

いい加減なんとかしろよー<プログラム言語の進捗がない、おまいう

想定内だが面倒くさい

 というわけでブロックを使ったプログラミング 

現在読み込ませ、になかなか難航しております。

f:id:kairi-sakusaku:20190404172226j:plain

一番の問題はブロックが立体であることですねぇ

光の当たり方と厚みで色むらが出るし四角枠からずれる

枠ズレは置き方工夫するのとスマホのカメラで撮影する際にガイド枠を表示させる等の対策で、あと色むらは取り込んだ色の平均値取るとかの対応かなぁ。

もちっと工夫してみます。

レゴ買ってきた

ブロックでプログラミングするにあたって、マイクロブロックよりレゴのほうが組みやすいのではと思いたち、比較的近所にレゴ専門店あったので足を運びました。

f:id:kairi-sakusaku:20190404170937j:plain

この入れ物に詰め放題で販売。

店員さんにはもっと入りそう、とか言われたんですが

必要な色が揃えばそんなに量もいらなかったので

f:id:kairi-sakusaku:20190404172207j:plain

中身はこんな感じです。

f:id:kairi-sakusaku:20190404172241j:plain

必要だった12X12ブロックエリアを6X4パネルの6枚で実現。

f:id:kairi-sakusaku:20190404172201j:plain

裏側はこんな感じでとめてます

f:id:kairi-sakusaku:20190404170913j:plain

普通にブロックとしても楽しみたかったので、こんな感じに組めるパーツも入手。

f:id:kairi-sakusaku:20190404172411j:plain

回転出来るブロック

何に使えるか分からなかったけど、一応こんなものも

f:id:kairi-sakusaku:20190404172216j:plain

マイクロブロックとの比較。

マイクロだと場所は取らないんだけど小さすぎて組みにくいんですよね。

何より色が揃わないのが辛い。レゴだと今回揃わなかった色はバラ売りもしてるみたいので。

f:id:kairi-sakusaku:20190404172226j:plain

 今回入手したプログラム用ブロックの詳細。

1ドットブロックが緑だけ、水色なし、と結構無いブロックが多かった。

当分は色読み込みテストだと思うので、実際プログラミング出来るようになるまでは

とりあえずはこれでもいいかなーと。

二つの方向性

何かを思いつく時、それは良い場合もあれば、今やってる作業が中断する悪いことも有る。

でもって今回思いついたのは明らかに後者なんだけど自分の中で切り捨てられない部分というかね。

 

ちょっと前までB012というプログラム言語作ってました。

そこから今は別の言語を作り始めてるわけども、もとい訳だけれども

折角キリ良いところまで作ってるんでもったいなく感じてもいるのです。

これを何とか、名前以外にもっと流用できないもんかと。

 

で思いついたのは、例えばこんな感じ

 

f:id:kairi-sakusaku:20181011210923p:plain

B012

今までのブログを御覧になってる方ならご存知のB012画面。

これと

f:id:kairi-sakusaku:20190323045742j:plain

ブロック

似てませんか?

 

つまりクォータービュー画面そのままに、ブロック配置する形でB012で培ったノウハウを生かせないかなーと考えた次第。

一方でMacawでやろうとしてるリアルブロック組んで取り込む方向もそのままに、と。

つまり2パターン同時並行で作ろうかなと考えました。

 

ともすれば共倒れになりそうで怖いのですが、逆にうまくいきそうな方向を伸ばしていくのもアリなのかなーと思う次第。

ちょっとしばらくコレで進めていこうと思います。

ブロック読み込みプログラム Bo12(0)

言語システムと並行して、肝心の読み取りプログラムも作りはじめます。

構想は10*10だが外枠認識に外周1ブロック設置したいので12*12。

おお、くしくも前まで作ってたプログラミング言語B012とかぶる。

 

ということでそちらに敬意を払い仮名称Bo12命名

 

まずはJAVASCRIPTの色習得で出てきたのがコレ

www.petitmonte.com1

 

コレに前回作った

f:id:kairi-sakusaku:20190323045742j:plain

を組み込ませたのがコレ

http://yoseisan.happy.nu/test.html

んー、意外に読んでるようなそうでもないような?

 

まあ最初はリアルブロックでなく、画像で作った四角の読み込みから。

リアルでやろうとすると色揃えるのに時間かかりそうなんで。

サイズはでかくなっても揃えやすいレゴブロックを使うのも手かなと思い始めました。

細かいブロックは意外に組み立てにくい。

 

まぁそれはさておき。

f:id:kairi-sakusaku:20190323105014p:plain

テストブロック

 

を作って張り込んだのがコレ。

http://yoseisan.happy.nu/test2.html

 

コレを解析、改造して各ブロック位置に対応する8進数の表示を表示させるのが第一段階。

それが出来たらプログラムブロックを読み込ませ、ハローワールドを表示させるまでを最初のゴールとしましょうか。

 

 

実際のプログラム組み案(1)

では実際にどういう感じでブロックを組んでプログラミングするのか、

と考えた際に、ちょいと色に数字と役割を定義してみました。

f:id:kairi-sakusaku:20190323070911p:plain

予約語演算子で各2ブロック、8*8=64種類を設定してます。

これだけあったら、当面は足りるかなぁと。

で、よく使う順から同色でまとめたいと思います。

if文と演算子の+なら青2連とか。

 

さて実例として例えばコレを使って、まず文字を設定する場合

f:id:kairi-sakusaku:20190323070908p:plain

こんな感じです。

数字は8色使った8進数表記。7ブロック使えば上記にあるように2017952までの数字が表現できる、はづ。

文字には1文字3ブロックを使用。

 

また変数と関数は「変数名」という概念がなくて全部数字表現。

ですが、実際にプログラム組む時は数字を意識しないで、同色ブロックが何個か繋がった物を優先して使うことになると思います。青3個に赤4個とか。

あとこれ、代入だけなら上下の開始終了はいらないかもですね。

 

あと、実際プログラムする際の案はこんな感じ。

f:id:kairi-sakusaku:20190323070914p:plain

一応開始の横位置を変えてネスト(入れ子)を表現。

数値を右詰め固定、数値の左側に黒(ゼロ)を入れることで数字とそれ以外の区切りを作ることを想定してますが、かなり中央に隙間が生じるのが難点。そのため10×10で組めるプログラム数が減ってます。

まぁ赤ブロック3個(終了)が出るまで複数枚使うというのも最悪アリかなぁとは思ってます。

あと意識して作ったわけではないがDelphiPython足して2で割ったような仕様になってるなぁ。

文字の取り込み案(その3)

前回の記事では文字毎に使用するブロックの数がまちまちで管理しにくい難点が。

ということでキッチリ3マスでまとめた案がこちら。

f:id:kairi-sakusaku:20190323042047p:plain

案3

なおプログラミングといいつつ日本語表記にこだわる理由は、

以前開発していたプログラミング言語B012時代からの流れで子供にも分かりやすい言語を目指してるため。

 

例えばキーボード入力でも、年配の超初心者が覚えるならローマ字打ちよりカナ入力で覚えたほうが入力文字数が減って覚えやすい(アルファベットの入力時に覚え直しで苦労するが)

 

ので、前回の案2で使った「日本語ベースでアルファベット表現」は、そのまま継承する予定。

で、これはあくまでプログラミング言語であった「ブロックの色で文字を表現」ではないので、プログラミング言語で言うところの予約語や変、演算子あたりをどうやって表現するかを考え中。特に文字とそれ以外の分かれ目をどうするか、とか、

 

あとブロックを使うのだから一行ないし一列にいくつまでブロックを置くか制限するかも考えないといけないかなあと。

まぁこれは

f:id:kairi-sakusaku:20190323044430j:image

の台座を取り込む前提で10*10で考えてます。

 

長いプログラムなら行列によって、かなり枚数が必要にもなるわけですが

なら逆に開き直って文字変数代入で一枚使うのもありかなと思ってます

どのみち文字で三ブロック使うとなれば一行3文字(9ブロック)*10行の30文字が限界なので、行冒頭か末尾のブロックに文字種類情報を入れたら丁度良いのかなと