表示する3Dモデリングとアニメーションジオラマ作り自動車を作る最近のコメントアーカイブ2018年11月2018年3月2017年9月2017年8月2017年7月2017年6月2017年5月2017年4月2017年3月2017年2月2017年1月2016年12月2016年11月2016年10月2016年9月2016年8月2016年7月2016年6月2016年5月クリエイティブまさ工学系の大学を中退し、全く別の職種に就いている日曜プログラマー。三児の父として子どものプログラミング教育に興味を持ち、多くの人が楽しくプログラミングの世界に触れる方法を模索している。プログラミング4窓付きの壁を作る4窓付きの壁を作る窓付きの壁を作ってみましょう。使えば、それほど難しくはありません。今回の目的は、ただ動けばよいだけでなく、「サブルーチン」をうまく使って、プログラムを短くまとめることです。することで、別の人が読んでもプログラムの意図(何がやりたいか)がわかりやすくなるように工夫してみましょう。うまいプログラマーになるために大切なことです。v]を送る10回繰り返し処理をして、次にZ方向に10回処理を繰り返します。Y方向の値をリセットすることを忘れないようにします。平行した壁2面を作る平行した2面の壁を作ります。v]を[9]にするの数値(9)には注意が必要です。10番目は「9」になるのです。違和感がありますが、慣れるしかありません。スタートすることを確認してください。Z方向になっています。10)からスタートします。方向に向けて壁が作られていきます。4面を作る残りの2面を作りましょう。1面目と2面目を作るスクリプトを「複製」して、2段重ねにします。それから3面目と4面目を作るスクリプトの変数をスクリーンショットの通りに変更してください。するend改造のポイントは、各面のスタート地点を正しく指定してやることです。しないと、四角形になってくれません。先ほどの「設計図」を参照して、スタート地点を指定してください。10)からスタートして、X方向に壁を作ります。方向に壁が作られていきます。四隅のブロックが2回ずつ置かれていることに、違和感を持つ人がいるかもしれません。その感覚、素晴らしいです。「なんか変だな」と感じるところに、重要な点が隠されているかもしれませんから。今回の目的は、繰り返し処理をうまく使ってプログラムを短くすることが目的でした。それで、同じ位置に2回ブロックが置かれることは承知で、こういった形に落ち着きました。うまくやれば、2回置く部分をなくせるかもしれませんが、ここはそんなにこだわるところではない、ということで、そのまま次に進めていくことにします。窓付きの壁を完成させるプログラムの途中で、設置するブロックの種類を変えるには、「条件分岐」を使います。そのためにまずカウンター変数「i」,「j」をセットしなくてはなりません。赤枠の部分がカウンター変数「i」「j」を設置した部分です。カウンター変数の初期値の設定、繰り返しごとに1つずつ増やす部分、リセットする部分を間違えないように設定します。Y方向に上がっていくたびにカウントしていきます。X方向)に進むたびにカウントしていきます。青枠の部分が、条件分岐です。20)を使っています。するendスクリプトを実行して、窓付きの壁が作られることを確認してください。スクリプトエリアをはみ出るくらい、長いプログラムになってしまいました。欠点として、複雑なプログラムになってくると、一度に表示できないくらい長くなって、プログラムの可読性が低くなるという問題があります。長いスクリプトを分離することを考えてみましょう。サブルーチンを分離して、プログラムを読みやすくするこれからの作業は新しい機能を追加するのではなく、見た目をよくする作業です。「見た目」は大切で、きれいなプログラムが書けると、書いている本人も気持ちがよいものです。バグを見つけやすくなり、別の人にプログラムの意図を明確に伝えられます。目的の機能が実現できたところでやめないで、プログラムの整形を行いましょう。サブルーチンとはプログラムを書いていると、同じような処理を何度も繰り返すことが多くあります。その「同じような処理」を、主のプログラム(メインルーチン)から切り離してたものを「サブルーチン」と言います。今回の例で言うと、4つの平行した壁をプログラムで作成しましたが、この壁を作る部分は、作り始めの位置が違うだけでほぼ同じ処理でした。この部分を切り離すと「サブルーチン」と呼ばれます。スクリーンショットの赤枠の部分が「Z方向に壁を設置していく処理」です。ここが1枚目の壁と2枚目の壁を建築するスクリプトで、全く同じ処理が2回繰り返されている共通の部分です。変えるendこの部分を切り離して、サブルーチンにしましょう。v]を受け取ったときを重ねます。「getBlock▼」をクリックして、「新規/編集」を選びます。wall)なので、名前は「yz_wall」と名付けました。サブルーチン「yz_wall」の完成です。新しい変数やサブルーチンの名前をつけるときは、そのプログラム言語独自の規則(命名規則)に従わなければなりません。初心者が簡単にプログラミングを楽しんでもらうために、細かい規則はありません。日本語で名前をつけることも可能です。「壁の色を表す変数の名前」を「壁の色」「かべのいろ」「カベノイロ」としてもよいのです。今後、本格的なプログラム言語に進んでいくことを考えると、少なくとも名前は「英数字」で表すべきです。日本語の名前が許されている言語は少ないからです。)でつなぐ方式を使うことにしました。この規則は「スネークケース」と呼ばれます。」と名前を付けることにします。同じように、青枠で囲った「X方向に壁を設置していく処置」の部分も切り離します。v]を受け取ったときを重ねます。「getBlock▼」をクリックして、「新規/編集」を選びます。wall)なので、名前は「xy_wall」と名付けました。サブルーチン「xy_wall」の完成です。変えるendメインルーチンの作成サブルーチンが2つ出来ました。次は、サブルーチンを適切なタイミングで呼び出す側の、主となるプログラム(メインルーチン)を作成します。メインルーチンは同じ形の繰り返しです。壁を作り始める場所の指定とカウンター変数のリセットのために変数の値を決めます。v]を送って待つを重ねて、サブルーチンを呼び出しています。送って待つこのスクリプトを実行して、4面の壁が問題なく建築できることを確認できました。v]を送るの2つの方法があります。「送る」の方は、処理の終了を待たずに、次へ次へと進んでいき、並行処理をするブロックです。今回は、カウンター変数が共通のため、「送る」の方を使うとうまく処理が続きません。処理が終わるまで待って次の処理の進む「送って待つ」の方を使いましょう。こちらは並列処理をしないので、スクリプトの上から順番に1つずつ建築が進んでいくのです。今回の目的は「きれいなプログラムを書こう」でした。その解決法の一つは「サブルーチンとして、何度も登場する処理を切り離す」方法です。きれいな書き方があるかもしれません。見つけたら是非教えてください。【追加ミッション】3階建てのビルを建築する少し手を加えるだけで、3階建てのビルを建築できます。どこに手を加えるか、自分で考えてみてください。メインルーチンは、(3)回繰り返すを使って、「4面の壁を作る処理」を3回繰り返します。値が上がっていくようにしましょう。v]を(-10)ずつ変えるに入れ替えます。してしまうと、Y方向に戻りすぎて、うまく建築ができません。よってレンガを積み上げた分だけ戻る処理に入れ替えました。v]を送るで消せませんから。止めておいたほうがいいでしょう。「ファイル」→「名前をつけて保存」から、名前「mcpi_wall_with_window」をつけて保存しておきましょう。このプロジェクト(mcpi_wall_with_window.sb)はダウンロードして、自分で確かめることがきます。サンプルプログラムのページへ(サンプルプログラムのページに移動します。ダウンロードしたいファイルのリンクをマウスで右クリックして、「対象をファイルに保存」などのメニューを実行してください。)次回は、三角屋根に挑戦します。グラフを使って、「なだらかな屋根」や「とがった屋根」「かまぼこ屋根」など、いろいろな形の屋根を作ってみます。3階」のビルに改造してください。ブロックの構造はそのままで、変数の値を変えればよい)次に、お好きなブロックを使って、床と天井を作ってみましょう。