1.16.5日本語化リソースパック配布

302個のMODの翻訳が完了したので YouTube にて配布いたします 。翻訳の内容など不備はありますが、無いよりはましだと思って使ってください。翻訳したMODの詳細については、まとめるのが面倒くさいので止めておきます。このリソースパックを導入することがマイクラMOD攻略の近道...

2020年1月25日土曜日

基本となる一列を掘り進むプログラム

ここから露天掘りプログラムを作り上げていきます。まずは一列を掘っていくタートルの基本となる動きを考えていきます。ループカウンターで効率よくプログラムを作ります。


条件
マイニングタートルを使用
燃料は補給済み、またはMODコンフィグにて燃料不要に設定
採掘範囲は、縦8x横8x深さ10(今後変更していきます)
ユーザーの定義文字はわかりやすくするために大文字やローマ字を多用しています
プログラムエディタの Sublime Text を使用
タートルのAPIはこちらで確認できます



基本となる一列を掘るプログラム

A列の「1」から「8」までのブロックを一段掘り下げるプログラムを考えます。まずは、タートルの動作を書き出します。スタート位置は「1」です。

使用するタートルAPI
turtle.digDown()--下を壊す
turtle.down()--下に行く
turtle.dig()--前を掘る
turtle.forward()--前に行く


--1.のプログラム
turtle.digDown()--下のブロック1を掘る
turtle.down()--下に一段下がる
turtle.dig()--2のブロックを掘る
turtle.forward()--2の位置に移動
turtle.dig()--3のブロックを掘る
turtle.forward()--3の位置に移動
turtle.dig()--4のブロックを掘る
turtle.forward()--4の位置に移動
turtle.dig()--5のブロックを掘る
turtle.forward()--5の位置に移動
turtle.dig()--6のブロックを掘る
turtle.forward()--6の位置に移動
turtle.dig()--7のブロックを掘る
turtle.forward()--7の位置に移動
turtle.dig()--8のブロックを掘る
turtle.forward()--8の位置に移動
--1.のプログラムの終わり

このプログラムで繰り返すの動作を考えます
「1」のブロックを壊したあとタートルは一段下がります、そのあとは前のブロックを壊す、前に行くを7回繰り返しています。

--1.のプログラム
turtle.digDown()--下のブロック1を掘る
turtle.down()--下に一段下がる
--1回目
turtle.dig()--2のブロックを掘る
turtle.forward()--2の位置に移動
--2回目
turtle.dig()--3のブロックを掘る
turtle.forward()--3の位置に移動
--3回目
turtle.dig()--4のブロックを掘る
turtle.forward()--4の位置に移動
--4回目
turtle.dig()--5のブロックを掘る
turtle.forward()--5の位置に移動
--5回目
turtle.dig()--6のブロックを掘る
turtle.forward()--6の位置に移動
--6回目
turtle.dig()--7のブロックを掘る
turtle.forward()--7の位置に移動
--7回目
turtle.dig()--8のブロックを掘る
turtle.forward()--8の位置に移動
--1.のプログラムの終わり

ループカウンターを使用して繰り返すの動作をまとめます

 for␣定義=初期値,終わり値␣do
  実行すること(何行でも)
 end

--2.のプログラム
turtle.digDown()--下の1のブロックを壊す
turtle.down()--1のブロックの一段下に行く
for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
turtle.dig()--前を壊す
turtle.forward()--前に行く
end--ループTATEの終わり
--2.のプログラムの終わり


※プログラムのポイント
ループカウンターの書き方
定義の「TATE」は、tate、A、a、などでもよいですが数字や記号は使用できません。
「for TATE=2,8 do」の定義のTATEには、2~8までの数字が入り、2回目、3回目~と処理を進めていきます。
「2,8 do」は、7回繰り返すの意味で「1,7 do」でも同じですが、「2」のブロックの破壊からループが始まるという意味で初期値を「2」としています。




インデントを入れてでプログラムを見やすくします

--2.のプログラム
turtle.digDown()--下の1のブロックを壊す
turtle.down()--1のブロックの一段下に行く
for TATE=2,8 do--前を壊す、前に行くを7回繰り返すループTATE
    turtle.dig()--前を壊す
    turtle.forward()--前に行く
end--ループTATEの終わり
--2.のプログラムの終わり

※プログラムのポイント
インデントで「for」と「end」間をスペースで内側に移動します。これをすることでプログラムが読みやすくなります。

--3.のプログラム
for A=1,7 do--前を壊す、前に行くを7回繰り返すループA
    turtle.dig()--前を壊す
    turtle.forward()--前に行く
end--ループAの終わり
--3.のプログラムの終わり

このようにしても同じ動作となります。定義名や繰り返す回数は、この段階ではあまり重要ではありませんが、複雑なプログラムでは重要になってきます。

※プログラムのポイント
ループカウンターの位置が重要になります。プログラムでは「前を壊して前に行く」ですが、逆に「前に行って前を壊す」では、プログラムは下のようになります。

--4.のプログラム
turtle.digDown()--下の1のブロックを壊す
turtle.down()--1のブロックの一段下に行く
turtle.dig()--前を壊す
for TATE=3,8 do--前に行く、前を壊すを6回繰り返すループTATE
    turtle.forward()--前に行く
    turtle.dig()--前を壊す
end--ループTATEの終わり
turtle.forward()--前に行く
--4.のプログラムの終わり

上記のようにしても同じ動作となりますが、2行ほど長くなってしまいます。プログラムは「短い方がいい」を心掛けていくことが上達するコツです。


次のページ「右回り左回りに列を移動する」
前のページ「Sublime Text で効率よくプログラムを書く」

0 件のコメント:

コメントを投稿

関連コンテンツ