2019年7月17日水曜日

API や基本ルール

タートルに関する基本的なことやタートルの動作などに関するAPIやコマンド、プログラムの書き方などです。サバイバルでプログラムを組む人は、まずいないと思いますので、すべての情報は、クリエイティブで考えてサバイバルで実践となります。タートルは上位版であるアドバンスドタートルを使用します。


タートルに名前を付ける
名前がついてないタートルは、破壊したら作成したプログラムが消えてしまいます。タートルは破壊して回収するのが1番楽ですので、まずは名前を付けます。あとでリネームも可能ですので何でもいいので名前を付けましょう。
label set 名前、エンター(大文字でもOKです)
間に半角スペースが入りますので、label␣set␣名前となります
タートルは破壊しての回収が基本となりますので

lua 言語でプログラミングを始めるにあたっての注意事項

文字入力はすべて半角となります
「.」「,」「スペース」をはっきり区別します
行の中に「--」があれば「--」あとの文字は無視されます
タートルAPIは、大文字小文字を正しく入力しなければなりません


プラグラムの読み書き、実行、保存
edit プログラム名、エンター(.lua は拡張子です入力の必要はありません)


Ctrl キーを押すとメニューが出てきます


Save、Run、Exit を方向キーで選択してエンター


燃料の補給
スロット1に木炭を1スタック入れて refuel all と入力してエンター
refuel 24 など補給したい数値でもOKです

スロット1の1スタックの木炭が燃料としてタートル内に入りました
木炭と石炭の1個で80の燃料が入りますので 64x80=5120 となります

タートルは前後と上下の1ブロックの移動に燃料を 1 消費します(方向転換は不要)

使用できる燃料と効率

木材、原木:15
木炭、石炭:80
石炭ブロック:800
溶岩バケツ:1000

燃料に関するコンフィグ設定

燃料補給をプログラムに組み込むと難易度が上がりますので、燃料をフル満タンにしておくか、コンフィグから不要に設定するのもお勧めです

ノーマルなタートルの燃料のリミット「I:turtleFuelLimit=20000」
アドバンスドタートルの燃料のリミット「I:advancedTurtleFuelLimit=100000」
タートルが燃料を必要とするか「B:turtlesNeedFuel=true」false で不必要


ツールの取り外しコマンド
右手にツールを持たせる
equip スロットNO right

左手にツールを持たせる
equip スロットNO left

右手のアイテムを外す
unequip right

左手のアイテムを外す
unequip left




タートルに関する基本的なこと
インベントリ
タートルのインベントリは右側の16スロット
スロットNOの振り分けは、図のように1番~16番
タートル設置時は常にスロット1を選択スロットです
プログラムで成功させるには、選択スロットの把握が重要となります

適正ツール
適正ツールの考え方はバニラのマイクラと同じになりますが、すべてのブロックを同じスピードで破壊します。なので斧で石の破壊が簡単にできてしまいます。その場合はアイテムが回収されません。注意する点はメインハンドは左ということです。

斧とツルハシのように同じように破壊の適性を持ったツールをタートルに両手持ちさせる場合は、左にメイン処理のツールを持たせます。

剣とツルハシなどの反する適性を持ったツールは、右左関係なく使い分けてくれます。


左に持ったツールが優先されますので左に斧、右にツルハシでは、ブロックの破壊はできますがアイテムは回収されません。


メインハンドとなる左に剣を持たせ右にツルハシを持つと攻撃は剣、採掘はツルハシと適正ツールを使い分けてくれます。

その他
タートルは無敵です、モンスターの攻撃は受けません
水流も溶岩も関係なく突き進みます
移動に失敗してもプログラムは止まりませんので、位置ずれの予防が大切になります
タートルは横移動や横のチェストへのアクセスはできません


タートルAPIとは
turtle.xxxxx() が、あらかじめ登録されているタートルのプログラムです。通常は () の中は空白でも使えますが、スロットNOやアイテム数、変数などを入れることでプログラムの幅が広がります。さらに戻り値を把握することで、高度な分岐プログラムなどを作れるようになります。※以下の画面から抜けるには、exit() 、エンター


タートルの画面に「lua」と入力、次にタートルAPIを入力することで戻り値を見ることができます。上の画像は、turtle.inspectDown() と入力してタートルの下のブロックを調べています。戻り値はこのようになります。

true--下にブロックがある
{
    state = {--ステータス
        variant = "stone",--バリアントは、ストーン(種類は石)
    },
    name = "minecraft:ston",--名前は"minecraft:石"
    metadata = 0,--メタデータ(破壊度)
}

ブロックを調べるタートルAPIの inspect は、かなり詳しく情報が戻ってきますので、使い方が難しくなりますが、高度なプログラムには必須となります。


右を向くAPIである turtle.turnLeft() の戻り値は、true(成功)とシンプルです
選択スロットNOを返す turtle.getSelectedSlot() は、1 これはスロットNOです
指定したスロットのアイテム個数を返す turtle.getItemCount() は、24 と個数
今の燃料レベルを調べる turtle.getFuelLevel() は、86025 と燃料値となります

それぞれのタートルAPIの特性と知ることで、アイテム指定、個数指定、分岐など細かくプログラムを組むことに役立ちます。

タートルのプログラム考えるときは、まずはタートルの動きを日本語で考えていくのが一番手っ取り早いと思います。それにはエクセルでセルのコピーとペーストが最適だと思います。その考えたタートルの動きを lua の方式に当てはめ、英語にする、この手順なら初心者でもプログラムが組めると思います。




タートルAPI
燃料関係

turtle.getFuelLevel()--今の燃料値
戻り値:燃料値

turtle.getFuelLimit()--燃料値の上限
戻り値:燃料値

turtle.refuel()--選択スロットからの燃料の補給
戻り値:true,false、()内は燃料数


例:スロット1にある燃料の5補給します

turtle.select(1)--スロット1を選択
turtle.refuel(5)--燃料を5補給

タートルAPI
スロット関係
turtle.select()--アイテムスロット選択
戻り値:スロットNO、()内はスロットNO

turtle.getSelectedSlot()--選択しているスロットNO
戻り値:スロットNO

turtle.getItemCount()--指定スロットのアイテム数
戻り値:アイテム数、()内はスロットNO

turtle.getItemSpace()--指定スロットのアイテムの入る数
戻り値:アイテム数、()内はスロットNO

turtle.compareTo()--選択スロットと指定スロットとのアイテムの比較
戻り値:true,false、()内はスロットNO

turtle.transferTo()--選択スロットから指定スロットへのアイテムの移動
戻り値:true,false、()内はスロットNO

turtle.getItemDetail()--選択スロットのアイテムを調べ
戻り値:true,false、と name(アイテム名)


例:選択スロットが木炭ならアイテムを落とす

turtle.select(1)--スロット1を選択   
local DATA=turtle.getItemDetail()--DATAを定義してAPIを実行               
if DATA then--定義DATAに成功したら              
    if DATA.name=="minecraft:coal" then--名前が木炭なら         
       turtle.dropDown()--下に落とす        
    end
end

タートルAPI
タートルの動き
turtle.forward()--前に行く
戻り値:true,false

turtle.back()--バックする
戻り値:true,false

turtle.up()--上に行く
戻り値:true,false

turtle.down()--下に行く
戻り値:true,false

turtle.turnLeft()--左を向く
戻り値:常にtrue

turtle.turnRight()--右を向く
戻り値:常にtrue


例:4前進して右を向き1周して元の位置に戻る

for B=1,4 do--Bは4前進、右を向くを4回のループ
    for A=1,4 do--Aは前に行くを4回のループ
        turtle.forward()--前に行く
    end
    turtle.turnRight()--右を向く
end

タートルAPI
ブロックの破壊
turtle.dig()--前を壊す
戻り値:true,false、()内は left か right

turtle.digUp()--上を壊す
戻り値:true,false、()内は left か right

turtle.digDown()--下を壊す
戻り値:true,false、()内は left か right


例:深さ3段を10ブロック掘る

turtle.digDown()--下を壊す
turtle.Down()--下に行く
turtle.digDown()--下を壊す
turtle.Down()--下に行く
for A=1,10 do--ループAは10回実行
    turtle.dig()--前を掘る
    turtle.forward()--前に行く
    turtle.digUp()--上を掘る
    turtle.digDown()--下を掘る
end

タートルAPI
ブロックの設置
turtle.place()--前に設置
戻り値:true,false

turtle.placeUp()--上に設置
戻り値:true,false

turtle.placeDown()--下に設置
戻り値:true,false


例:スロット1のブロックを設置、ブロックが置けなかったらスロット2に変更

local SLOT=1--変数SLOTを定義
turtle.select(1)--スロット1を選択
if turtle.placeDown() then--下にブロックを置く
else SLOT=SLOT+1--もしも置けなかったらSLOT+1
    turtle.select(SLOT)--スロットに変数SLOTを挿入
    turtle.placeDown()--下にブロックを置く
end--もしもの終わり

タートルAPI
タートルの攻撃
turtle.attack()--前を攻撃
戻り値:true,false、()内は left か right

turtle.attackUp()--上を攻撃
戻り値:true,false、()内は left か right

turtle.attackDown()--下を攻撃
戻り値:true,false、()内は left か right


例:1秒おきに無限に正面を攻撃

while true do--無限ループの実行
    turtle.attack()--前を攻撃
    os.sleep(1)--1秒間の停止
end--無限ループの終わり


アイテムをチェストなどに入れる
turtle.drop()--正面に落とす
戻り値:true,false、()内はアイテム数

turtle.dropUp()--上に落とす
戻り値:true,false、()内はアイテム数

turtle.dropDown()--下に落とす
戻り値:true,false、()内はアイテム数


例:スロット1~16までのアイテムを下に落とす

for A=1,16 do--ループAは1~16まで実行               
    turtle.select(A)--スロットは変数Aを選択             
    turtle.dropDown()--下にアイテムを落とす     
end--ループAの終わり                 

タートルAPI
アイテムをチェストなどからの入手
turtle.suck()--正面から入手
戻り値:true,false、()内はアイテム数

turtle.suckUp()--上から入手
戻り値:true,false、()内はアイテム数

turtle.suckDown()--下から入手
戻り値:true,false、()内はアイテム数

例:スロット1~16までのスロットにアイテムを下から入手

for A=1,16 do--ループAは1~16まで実行               
    turtle.select(A)--スロットは変数Aを選択             
    turtle.suckDown()--下からアイテムを入手   
end--ループAの終わり

タートルAPI
ブロックを調べる
turtle.detect()--前にブロックがあるか
戻り値:true,false

turtle.detectUp()--上にブロックがあるか
戻り値:true,false

turtle.detectDown()--下にブロックがあるか
戻り値:true,false

turtle.compare()--指定スロットと前のブロックが同じか
戻り値:true,false、()内はスロットNO

turtle.compareUp()--指定スロットと上のブロックが同じか
戻り値:true,false、()内はスロットNO

turtle.compareDown()--指定スロットと下のブロックが同じか
戻り値:true,false、()内はスロットNO

turtle.inspect()--前のブロックが何か
戻り値:true,false、と name(アイテム名)

turtle.inspectUp()--上のブロックが何か
戻り値:true,false、と name(アイテム名)

turtle.inspectDown()--下のブロックが何か
戻り値:true,false、と name(アイテム名)


例:下のブロックが岩盤ならプログラム終了

local ARU,NANIGA=turtle.inspectDown()
--ARUは、何がある、NANIGAは、ブロック名と定義して実行
if ARU then--もしも下にブロックがあるなら
    if NANIGA.name=="minecraft:bedrock" then
--もしもブロック名が岩盤と同じなら
       break--ブレークする
    end--もしもの終わり
end--もしもの終わり

タートルAPI
ツールの持ち変え
turtle.equipLeft()--選択スロットと左手のツールを持ち変える
戻り値:true,false

turtle.equipRight()--選択スロットと右手のツールを持ち変える
戻り値:true,false


例:前に原木があればスロット1の斧と左に持っているツルハシと持ち変える

local ARU,NANIGA=turtle.inspect()
--ARUは、何がある、NANIGAは、ブロックと定義して実行
if ARU then--もしも前にブロックがあるなら
    if NANIGA.name=="minecraft:log" then
--もしもブロック名が原木と同じなら
       turtle.select(1)--スロット1を選択
       turtle.equipLeft()--左のツールと交換
    end--もしもの終わり
end--もしもの終わり

タートルAPI
クラフト
turtle.craft()--3x3のスロットでクラフト
クラフティングタートルのみ

0 件のコメント:

コメントを投稿