Minecraftとタートルと僕スマートフォン用の表示で見るMinecraftとタートルと僕PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。他のことに熱中していたので連載が止まっていました。別に忘れていたわけではないのでご安心ください。前回までに、奥行き/幅/高さを指定して整地するプログラムを紹介しました。言い換えると、指定した大きさの直方体の空洞を作るプログラムといっても過言ではありません。実際このプログラムは、地上での整地以外にも、地下で本拠地を建設するときの空洞つくりに役立ちます。「地下に農場作るために、奥行き16幅16高さ10の空間を作りたい」などと活躍します。このように役立つ空洞作成プログラムですが、地上で凸凹具合に偏りがある地面を整地すると、少しだけ荒が目立ちます。高さ1から2程度のフラットな1チャンク程度の丘の端に高さ10程度の山が一つあるとしましょう。なると、大部分がフラットであるにも関わらず、高さ10まで無駄に移動することになりますよね。燃料と時間の無駄です。非効率はプログラマの敵ですよね。改善はプログラマの義務ですよ!新しいアルゴリズム高さをあらかじめ指定するのではなく、その場で自動調節するようにしましょう。理想は凹凸のある地面および山の表面を、なめるように移動していくことです。以下のような感じですね。2014ではこれをどうやって実現するのでしょうか。実はこれまでやってきた、「上下1往復で3山崩し」アルゴリズムに少し手を加えるだけで大丈夫です。真下を堀り正面も掘って真下移動、を繰り返す最初の高さまで来たら、1歩前進して、1セット終了これを次のように改造します。正面と真上をチェックしつつ山の一番高いところまで上ったら、正面掘って正面移動もう一度正面と真上をチェックしつつ山の一番高いところまで上る真下を堀り正面も掘って真下移動、を繰り返す最初の高さまで来たら、1歩前進して、1セット終了この、正面と真上をチェックしつつ山の一番高いところまで上るという関数を作ることが今回の目玉です。新しいアルゴリズムを実装コードを示しましょう。endend真上と正面にブロックがあるかをチェックして、どちらかにブロックがあればまだ頂上ではないので、真上に移動するという関数です。真上にも正面にもブロックがなかったらそこは頂上と判断して、Whileループを抜け出します。次に、元の高さまで降りてくる関数(goBottom())も作るのですが、ここで一つ問題が生じます。それは、どれだけの高さ上ったかをどこかに記録しておかないと、元の高さがわからないのです。この変数の名前は、current_heightとしましょう。確実に1歩上昇するsurelyUp()と一歩下降するsurelyDown()。これらの関数の中で、この変数current_heightの値を増減させています。最終的に元の高さまで降りてくるgoBottom()は次のようになります。引数は下降中に実行したい関数。endendこの関数goBottom()は通常、seichiThreeStep()の中でgoBottom(surelyDig)のように使います。降りてくるときに同時に正面も掘ってもらわないといけませんからね。降りてくるときに正面を掘らないseichiTwoStep()の中では、引数を指定せずに使います。一つの関数を二つの場所で使いまわしているのがポイントですね。前回のプログラムよりも少しだけ短くなりました。実際に掘り進めて行くseichiThreeStep()、seichiTwoStep()、seichiOneStep()の3つの関数です。goBottom()とgoTop()を使うことでとても短くシンプルになりました。これらOne、Two、Three関数がどういったことをしているか一目瞭然ですよね。まとめあとはこのプログラムを使って地上を平らに均していきましょう。・・・といいたいところなのですが、このプログラムにも一つだけ欠点があります。次回はこれを解決していきましょう。ええ、迷走しているのは自覚しているんです。はてなブログPro「Minecraft」「ComputerCraft」について知りたいならば「お勧めコンテンツ」の『ComputerCraftとは』をご覧下さい。