プログラミングでマインクラフトの家を作るはじめにみなさま、こんにちは。プログラムから、マインクラフトの家を作る記事を書いたのですが、どうも出来がイマイチで反省点が多かったため、作りを見直してみることにしました。同じ家ですが、プログラムの作り方を変えて、今一度挑戦してみようと思います。前回のプログラムの反省点をまずは書いていきます。最初の記事ではそもそも記述が少し間違っていたのもあり、ご迷惑をおかけしたと反省しておりますが、それに加えて、座標の扱いが場当たり的で、可読性が悪いところが、問題点だと考えています。要するに、パッと関数を見たときに、どの地点の処理をしているのかがわかりにくいため、書いていくとわからなくなってしまいやすい、ということです。今回の改良点そこで、今回の制作では次の改良を加えることにします。ポイントをクラスとして定義。ポイントをひとつの値として扱うことで、どの地点の処理をしているかを明確化します。ポイントのネーミングルールを準備。ポイントは、3次元で扱っていくと多くの点が存在することになるため、数がたくさん必要になってくることから、どのあたりのポイントかが名前から類推できるようにします。クラスとは?先ほどの改良点のところで、「クラスを定義」とさらっと書きましたが、クラスとは、ある物事や事象を抽象化した型のことです。プログラミング言語では、あらかじめ用意された型があります。整数や小数といった数値を表す型や、文字列を表す型などがあります。これらの型はあらかじめ用意されているので、特に定義なしに使用できますが、今回の場合のように、建物を建てる地点(ポイント)を表現する型は存在しません。そのため、それを定義してあげることで、プログラムの中で値として使うことができるようにします。ポイントのクラスポイントのクラスを準備することにします。3つの座標をひとまとめに扱うことです。座標を表すための変数を入れることにします。初期化時の処理として、座標の初期値を与えることにします。いう関数が初期化時の関数です。関数を用意する必要があります。クラスを実際使えるように変数として宣言する場合に、この関数で変数を作る処理を規定します。今回の例では、座標の値を書き込んでいます。:等しくおないかどうかを調べる関数)を定義します。p2が等しいことを調べるためには、次のような形で記述することができます。実際のコードは次の通りになります。次に、ポイントを指定して、ブロックを置くための関数を用意します。ライブラリに元々用意されている関数の場合、ポイントではなく、3点の座標を指定する方法でした。今回は、可読性を上げるためにポイントを指定することでブロックを置くことができる関数を用意します。1ブロックだけ置く場合と、2地点を指定し、その地点で囲まれた中を埋める関数を用意します。blockType)ポイントの名前付けルールそれでは、実際にポイントの名前付けルールを考えます。図に示すように、それぞれのポイントに名前をつけます。柱を置くポイントそれぞれに、p1からp6までの名前をつけています。この名前のつけ方の場合、1階、2階、屋根と高さが違うポイントでその都度名前を変えないといけないことから、名前のルールとしては次のようにします。xとz座標が同じポイントは、下記の図にあるように最初の2文字はpの後に数字で表す。続いてy軸方向の階数をつける。最後にyが小さい順に数字をつけるこのルールによって完全に場所がわかるわけではないですが、名前を見るとおおよその位置が想像できるようになるはずです。今回は、この方針で進めていきます。1階部分の記述では、1階部分の記述からスタートします。前回の記事の内容を見ていただければ分かりますが、次のような流れで準備していきました。最初に基礎部分のブロックを作る柱、梁を作る壁を作る最初の基礎ブロックを作る部分は、それぞれのポイント間にブロックを置くために、下記のような記述をしていました。1それを、ポイントを使ってブロックを置くコードに置き換えます。p21ぱっと見でどのポイント間でのブロックの配置かがよくわかるようになったと思います。柱と梁も先ほどの基礎のブロックと考え方は同じです。2地点をそれぞれ定義して、2地点感を木のブロックで埋めることでできます。エントランスに関しても、同じようにポイントを指定する形に修正をしました。位置から作成して、ドアとゲートを作成しています。block.STONE.id)次に壁です。壁は、2本の柱の位置の間を指定された高さの分だけ全て埋める関数を追加します。p2のx、zの値をそれぞれ比べて、どちらの方向かを見極めます。柱の間に壁が来るようにsetBlocksを使ってブロックを埋めます。errorprint("error")そして、天井を入れます。2点を指定して、その間を埋める形になります。1階部分には以前は床を張っていなかったのですが、床をはるコードを追加しました。基本的には、天井と同じです。block.WOOD_PLANKS_BIRCH.data)2階のコードに関しては、1階部分と基本的に同じです。屋根の部分は、複雑な形状のため、ポイントを指定する場合とそうでない場合で差が出ないので、基本的にはそのままとしました。最後に、部屋の中の明かりを追加します。これは、それぞれの柱があるポイントにて、高さを2ブロック床から上げたところに、設置していきます。例では、1階と2階の部分に置くようにしました。明かりを入れたため、夜でも明るくなりました。改良版の家のコードは以下のようになります。p611)まとめいかがでしたでしょうか。見た目がすっきりしたかと思います。前回の記事がエラーが多い内容でしたので、改めて書きなおしてみました。対象としたプログラミング&ロボット教室を開校しています。コース概要のページで説明しております。創造性や協調性などこれからの時代に必要となる素養を育てるコースです。ご興味ありましたらぜひお問い合わせください。授業運営パッケージ弊社で実施している授業を取り入れたい方々向けに提供しています。