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

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

2019年6月29日土曜日

外部エディタ Sublime Text

プログラムの編集をマイクラのゲーム内で行うには、かなり無理があります。画面が小さいのでプログラム全体が見えない、日本語のプログラムの説明が記述できない、コピーペーストができないなどとても不便です。一文字違っただけで動かないのがプログラムです。書きやすさと読みやすさ、他の人が作ったプログラムの導入を考えたら外部エディタをお勧めします。

SublimeText サブライムテキスト

ドラッグするだけで Lua 言語モードで読み込んでくれます。エディターを使用すれば日本語入力が可能になります。(マイクラ内では表示できません)自分でも訳が分からなくなってしまうことを避けるためにも日本語の説明は必須だと言えます。

※「--日本語の説明」と文字の先頭にハイフンを2個付ければ Lua 言語では、その行はプログラミングとして認識されません。


プログラム画面は小さいです、日本語は文字化けします



画面の大きさ、コピペが可能、日本語入力可、Lua 言語に対応

行番号の表示や Lua 言語の自動色分けと使用感は抜群です




Sublime Text の使い方

空白のプログラムを作成
コンピュータークラフトで「edit␣プログラム名」で空白のプログラムを作成します
ここでは「PGnoNAMAE」で空白のプログラムを作成しました



Press Ctrl to access menu と画面に表示

Ctrl キーを押します


Save、Run、Exit と表示されます

方向キーで「Save」を選択してエンター


Saved to PGnoNAMAE.lua(プログラム名) と表示

これでセーブできました


Sublime Text でコンピュータークラフトの空白のプログラムを編集


SUBLIME TEXT 開きます

saves > CC > computer > 0 フォルダ内の Lua ファイルを SUBLIME TEXT にドラッグ
します、書き込んでいるプログラムの編集も可能です

「0」はタートルの番号です


セーブは右上の File、Save です、セーブをすれば CC側のセーブデータにも反映されます

※CCのプログラムを開いている場合は、「Eixt」で抜けて再読み込みの必要があります



左下の Lua をクリックすると Text として表示できます


Plain Text


プログラムの構築はエクセルが楽です、セルのカット、コピー、ペーストを利用すれば文字入力を減らせますし、プログラムの流れがつかみやい。


CCでは、マイクラのブロックの設置や破壊、上下左右への移動が主となりますので、プログラムの構築にはエクセルのセルの利用が最強だと思います。

エクセルから Sublime Text へのコピーも可能です


Sublime Text
ダウンロード

Setup でインストールします

関連サイト

日本語化する方法はこのページです
Sublime Text 3 日本語化

豆腐建築プログラム

マイクラのワールドでプログラムを組んでタートルを動かすという一番とっつきにくいMODだといえますが、四角を積み上げていく豆腐建築プログラムは、初心者でも簡単にでき、達成感があるプログラムなので、導入編としては最適です。

使用したバージョンは1.12.2
縦4x横4x高さ6 の豆腐建築をタートルに作ってもらいます


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

turtle.select(1)--スロット1を選択

turtle.up()--一段上昇

turtle.forward()--前に行く
turtle.placeDown()--下にブロック設置
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()

turtle.turnRight()--右を向く

turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()

turtle.turnRight()

turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()

turtle.turnRight()

turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()

turtle.turnRight()

これは、一段目を作るプルーンなプログラムです、これを高さ6段目まで作るとなると6倍弱の長さになります、それはそれでプログラムといえますが、サイズが大きくしたり、高くしていったらプログラムは、とてつもなく長くなってしまいます。

実際に使用している文字はかなり少ないです。

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

turtle.select(1)--スロット1を選択

turtle.up()--一段上昇

turtle.forward()--前に行く
turtle.placeDown()--下にブロック設置

turtle.turnRight()--右を向く


同じ動きは、繰り返しの動作としてループカウンターを定義して簡略化、応用としてコンフィグを設定して縦、横、高さを変更できるプログラムを作成します。


一段目を作るプログラム

※任意の定義文字は、大文字としています



「前に行く、ブロックを設置」の3回の繰り返しの動作をループカウンターで「HEN」を定義して「1、2、3」のブロックを設置します、これが1辺「A」作るループとなります


for HEN=1,3 do--ループ名「HEN」で、1~3のブロックを設置
    turtle.forward()--前に行く
    turtle.placeDown()--下にブロックを設置
end--ループ「HEN」の終わり


右を向く動作とループ「HEN 」をループカウンター「ISSYU」で定義し、辺「A、B、C、D」を作ります、ループ「HEN」の後に右を向きます、右を向く位置は「3、6、9、12」となります


for ISSYUU=1,4 do--ループ名「ISSYUU」で、1~4までの辺の作成
for HEN=1,3 do
turtle.forward()
turtle.placeDown()
end
turtle.turnRight()--右を向く
end--ループ「ISSYUU」の終わり


一段目を作るプログラムはこうなります

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

turtle.select(1)--スロット1を選択

turtle.up()--タートル1段上昇

for ISSYUU=1,4 do
for HEN=1,3 do
turtle.forward()
turtle.placeDown()
end
turtle.turnRight()
end


実際に動かしてみます
タートルのスロット1にブロック、16に燃料を入れてます

edit␣プログラム名、エンター

プログラムの編集

Ctrl キーで「Save」「Run」「Exit」の選択が表示されます

Run でプログラム実行

1周(4x4)ブロックを設置します





六段目まで積み上げるプログラム

一段目を作った後は、12の位置でタートルは正面を向いて止まります、高さ六段目までの動作は、一段上昇、「ISSYUU」を6回繰り返しますので、ループカウンターで「UENI」を定義してしてループさせます、順番は一段上昇してループ「ISSYUU」となります、タートルの上昇位置はすべて12となります


turtle.select(16)
turtle.refuel()

turtle.select(1)

for UENI=1,6 do--ループ名「UENI」で1~6段目まで四角を積み上げます
turtle.up()--タートル一段上昇
for ISSYUU=1,4 do
for HEN=1,3 do
turtle.forward()
turtle.placeDown()
end
turtle.turnRight()
end
end--ループ「UENI」の終わり


動かしてみます
 タートルは、4x4の四角を積み上げていきますが、ブロックが足りなくなります

1段目は、3x4=12
6段積み上げると、12x6=72

※1段目の使用ブロック数は、4x4ではなく、3x4辺となります

スロット1のブロックは、1スタック(64個)なので、使用するブロックの72個より少なくなり足りなくなります

スロットを高さ一段ずつで、スロットNOを 1→2→3→4 と変更していくために高さのループ「UENI」をスロット選択の turtle.select() に当てはめ「UENI」のループに入れます、「ISSYUU」のループの前にスロットが切り替わります


高さのループごとにスロットを変更するプログラムです


turtle.select(16)
turtle.refuel()

for UENI=1,6 do
turtle.up()
turtle.select(UENI)--1回のループで、1ずつ増えていきます
for ISSYUU=1,4 do
for HEN=1,3 do
turtle.forward()
turtle.placeDown()
end
turtle.turnRight()
end
end


動かしてみます
64個のブロックを各スロット1~6 に入れます、16に燃料を入れます



1段ごとにスロット変更してブロックを積み上げていきます


このプログラムで正方形の豆腐建築は完成です。ループカウンターの上限値を変更すればサイズと高さを変えることができます。



高さとサイズを変更できるプログラム

サイズ固定の豆腐建築プログラムはとても簡単ですが、応用としてサイズを自由に変更できるプログラムを試してみましょう。
インベントリの関係で最大サイズは
縦16x横16x高さ16 となります(燃料の補給なし)

local 変数名=数値 で変数を定義します、いわゆるコンフィグです、プログラム内ではなく、変数を定義して高さとサイズを簡単に変更することができるようになります


local TAKASA=15--高さの設定
local SIZE=16--大きさの設定

turtle.select(16)
turtle.refuel()

for UENI=1,TAKASA do--ループ「UENI」は、1~「TAKASA」まで実行
turtle.up()
turtle.select(UENI)
for ISSYUU=1,4 do
for HEN=1,SIZE-1 do--ループ「HEN」は、1~「SIZE-1」まで実行
turtle.forward()
turtle.placeDown()
end
turtle.turnRight()
end
end

※「SIZE-1」は、1辺の長さは4ブロック分ですが、実際は3ブロックの設置となるので「-1」が必要となります


動かしてみます
スロット1~15までにブロックを入れます、スロット16に燃料を入れます

コンフィグ設定
local TAKASA=15
local SIZE=16

16x16x15の正方形の筒ができました



縦横高さを変更できるプログラム

ループ「HEN」でブロックを設置する部分を「縦の動き」と「横の動き」の別々に考えて、local 変数名=数値 を当てはめます

local TATE=4--縦の設定
local YOKO=5--横の設定
local TAKASA=6

turtle.select(16)
turtle.refuel()

for UENI=1,TAKASA do
turtle.up()
turtle.select(UENI)
for ISSYUU=1,4 do
for HEN=1,TATE-1 do--ループ「HEN」は、1~「TATE-1」まで実行
turtle.forward()
turtle.placeDown()
end
turtle.turnRight()
for HEN=1,YOKO-1 do--ループ「HEN」は、1~「YOKO-1」まで実行
turtle.forward()
turtle.placeDown()
end
turtle.turnRight()
end
end


動かしてみます
スロット1~15までブロックを入れます、スロット16に燃料を入れます

コンフィグ設定
local TATE=10
local YOKO=20
local TAKASA=15


10x20x15の長方形の筒ができました



燃料について

Fuel limit reached 燃料限界に達した

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

燃料を補給する項目ですが、タートル内に燃料を10000まで貯めることができます。先に燃料を入れておけばプログラムに加えなくてもタートルは動きます。

燃料に関するコマンド
タートル内の燃料を見る:refuel
タートルに燃料を入れる:refuel␣all
タートルに指定数の燃料を入れる:refuel␣数値

関連サイト

2019年6月25日火曜日

往復移動で床を貼る

床を作るプログラムです。コンフィグで縦と横のサイズを変更できることが特徴です。プログラミング未経験者ですが、コツをつかめば何とかなりそうなMODなのでは、マイクラ経験者はプログラムが好きなのでは・・・


前回の「地面にブロックを敷き詰める」は、渦巻き状に床を貼るプログラムでしたが、今回は折り返しながら床を貼っていきます。利点は終了時のタートルの位置がわかることです。当然この上に豆腐建築をタートルに作ってもらうことを想定したら、終わりがグダグダにならないこのプログラムの方が有利となります。



縦32x横(2x12)=総ブロック数768

タートルの動きは遅いんですが、それがいい!いつまでも眺めていられます。

ビルドクラフトのクアーリーの動きや、工業MODでアイテムの流れていく様子を眺めてニヤニヤするような気分と同じです。



アイテムスロットは1から12までがブロック、16に燃料
全てのスロットをブロックで使うと最大32x32=1024となります


1から12まで12個のブロックを設置します


turtle.select(16)--スロット16を選ぶ(スロット16に燃料を入れています)
turtle.refuel()--燃料を補給

turtle.select(1)--スロット1を選ぶ(スロット1から15にブロックを入れています)

turtle.up()--1段上に上がる

turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く

turtle.turnRight()--右を向く
turtle.forward()--前に行く
turtle.turnRight()--右を向く

turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く

turtle.turnLeft()--左を向く
turtle.forward()--前に行く
turtle.turnLeft()--左を向く

turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く

turtle.turnRight()--右を向く
turtle.forward()--前に行く
turtle.turnRight()--右を向く

turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く
turtle.forward()--前に行く
turtle.placeDown()--下にブロックを置く

これだけの項目が必要となります、さらにブロックを増やすととても長いプログラムになります。そこで繰り返しの処理を簡略化して、さらに関数化することで、プログラムを読みやすくします。

プログラムを考えるときは、専用のエディターよりもエクセルの方が断然やりやすいです。セルのコピー、ペーストがビジュアルエディターのように使えます。


繰り返しの動作を探して for 文で、ループカウンターの定義

for␣変数名=開始値,終了値␣do
  処理内容
end


1の目のブロックを置いた後の「前に行く、2のブロックを置く」この動作をループカウンターを定義して2,3のブロックを置くようにします。変数名は「A」とします。

turtle.placeDown()--1のブロックを置く
turtle.forward()--2に移動
turtle.placeDown()--2のブロックを置く
turtle.forward()--3に移動
turtle.placeDown()--3のブロックを置く

    ↓

turtle.placeDown()--1にブロックを置く
for A=1,2 do--変数「A」は、1から2回まで実行
    turtle.forward()--前に行く
    turtle.placeDown()--下にブロックを置く
end--変数「A」の定義はここまで


1のブロックを置いた後、「A」の処理で2,3のブロックを置きます

プログラム1
turtle.select(16)
turtle.refuel()

turtle.select(1)

turtle.up()

turtle.placeDown()
for A=1,2 do
  turtle.forward()
turtle.placeDown()
end

turtle.turnRight()
turtle.forward()
turtle.turnRight()

turtle.placeDown()
for A=1,2 do
turtle.forward()
turtle.placeDown()
end

turtle.turnLeft()
turtle.forward()
turtle.turnLeft()

turtle.placeDown()
for A=1,2 do
turtle.forward()
turtle.placeDown()
end

turtle.turnRight()
turtle.forward()
turtle.turnRight()

turtle.placeDown()
for A=1,2 do
turtle.forward()
turtle.placeDown()
end
↑ここまで


ブロック設置数を多くしたときに繰り返しの動作をループカウンターを定義することで、プログラムの簡略化ができます。

例:6ブロックの設置

turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()
turtle.forward()
turtle.placeDown()


for 文でループカウンターとする

for A=1,6 do--終了値を「6」とします
    turtle.forward()
    turtle.placeDown()
end




ブロック設置を関数として定義してより分かりやすく


a の列、b の列、 c の列、d の列のブロックを設置する処理を関数で定義します。

function␣定義名()
  処理内容
end


1のブロックを置く動作とループカウンター「A」を関数「OKU()」で定義します

turtle.placeDown()
for A=1,2 do
    turtle.forward()
    turtle.placeDown()
end

   ↓

function OKU()--関数名「OKU()」
    turtle.placeDown()
    for A=1,2 do
        turtle.forward()
        turtle.placeDown()
    end
end--関数「OKU()」の定義はここまで

それぞれの列のブロックを置く処理を関数「OKU()」とすることで簡略化できます

プログラム2
function OKU()
turtle.placeDown()
for A=1,2 do
       turtle.forward()
        turtle.turnRight()
    end
end

turtle.select(16)
turtle.refuel()

turtle.select(1)

turtle.up()

OKU()

turtle.turnRight()
turtle.forward()
turtle.turnRight()

OKU()

turtle.turnLeft()
turtle.forward()
turtle.turnLeft()

OKU()

turtle.turnRight()
turtle.forward()
turtle.turnRight()

OKU()
↑ここまで




列の移動を関数として定義してより分かりやすく


右を向く、前に行く、右を向く、この動作を関数 MIG() で定義します

turtle.turnRight()--右を向く
turtle.forward()--前に行く
turtle.turnRight()--右を向く
   ↓
function MIGI()--関数名「MIGI()」
    turtle.turnRight()
    turtle.forward()
    turtle.turnRight()
end--関数「MIGI()」の定義はここまで



左を向く、前に行く、左を向く、この動作を関数 HIDARI() で定義します

turtle.turnLeft()--左を向く
turtle.forward()--前に行く
turtle.turnLeft()--左を向く
   ↓
function HIDARI()--関数名 HIDARI()
    turtle.turnLeft()
    turtle.forward()
    turtle.turnLeft()
end--関数「HIDARI()」の定義はここまで



プログラム3
function OKU()
turtle.placeDown()
for A=1,2 do
turtle.forward()
turtle.placeDown()
end
end

function MIGI()
turtle.turnRight()
turtle.forward()
turtle.turnRight()
end

function HIDARI()
turtle.turnLeft()
turtle.forward()
turtle.turnLeft()
end

turtle.select(16)
turtle.refuel()

turtle.select(1)

turtle.up()

OKU()
MIGI()
OKU()
HIDARI()

OKU()
MIGI()
OKU()
↑ここまで




列を abcd= (ab)x2
このように考えて横のブロック数のループカウンターを定義します。そのためには、最後に関数 HIDARI() を付け加え、13の位置に移動することが必要となります。余分な動きとなりますが、これがあるのとないのでは、プログラムが大きく変わってきます。


OKU()
MIGI()
OKU()
HIDARI()

OKU()
MIGI()
OKU()
HIDARI()



a 列にブロックを置き、右回りで b 列に移動、b 列にブロック置き、左回りで c 列に移動、この動作をループカウンターを定義して「ab」「cd」のブロックを置くようにします。変数名は「B」とします。


for B=1,2 do--変数「B」は、1から2回まで実行
    OKU()--a 列のブロックを置く
    MIGI()--右回りで b 列に移動
    OKU()--b 列のブロックを置く
    HIDARI()--左回りで c 列に移動
end--変数「B」の定義はここまで



プログラム4
function OKU()
turtle.placeDown()
for A=1,2 do
turtle.forward()
turtle.placeDown()
end
end

function MIGI()
turtle.turnRight()
turtle.forward()
turtle.turnRight()
end

function HIDARI()
turtle.turnLeft()
turtle.forward()
turtle.turnLeft()
end

turtle.select(16)
turtle.refuel()

turtle.select(1)

turtle.up()

for B=1,2 do
  OKU()
MIGI()
OKU()
HIDARI()
end
↑ここまで




アイテムスロットを最大限活用してより大きなサイズに対応


アイテムスロットを a 列と b 列のブロック設置後にスロットを変更します。
for 文の「B」という変数を turtle.select(B) とすることで1回目の処理でスロット1、2回目の処理でスロット2、3回目で3、4回目で4とスロットを切り替えていきます。


for B=1,2 do
    turtle.select(B)--ループの回数で変数「B」の数は増えていきます
    OKU()
    MIGI()
    OKU()
    HIDARI()
end



コンフィグを設置して縦と横のサイズを自由に変更

local 変数=数値


ループカウンター「A」の終了値に「TATE」の定義をいれます

local TATE=3--縦のブロック数をTATEと定義

function OKU()
    turtle.placeDown()--ひとつ目のブロックを置く
    for A=1,TATE-1 do--ひとつ目は置いてあるので縦の列はTATE-1
        turtle.forward()
        turtle.placeDown()
    end
end



ループカウンター「B」の終了値に「YOKO」の定義をいれます


local YOKO=2--横のブロック数をYOKOと定義

for B=1,YOKO/2 do--1回の処理で2列分なのでYOKO/2
turtle.select(B)
    OKU()
    MIGI()
    OKU()
    HIDARI()
end


完成したプログラムでタートルを動かす


スロット1,2にブロックを入れ、スロット16に燃料(溶岩バケツ)を入れます


edit␣プログラム名、エンター
※.lua は拡張子なので入力しなくてOKです



プログラム中の文字化けは、説明文です。「--」で始まる文字は無効となります。


完成したプログラム
コンフィグ(local)の数値を入力することで縦と横のサイズを変更できます

--##コンフィグ##--
local TATE=3--縦方向のブロック数「TATE」を定義
local YOKO=4--横方向のブロック数「YOKO」を定義

--##1列のブロックを置く関数##--
function OKU()--関数名「OKU()」を定義
turtle.placeDown()--先頭のブロックを置く
for A=1,TATE-1 do--変数「A」は、1から終了値「TATE-1」まで実行
turtle.forward()--前に行く
turtle.placeDown()--ブロックを下に置く
end--ループ「A」は、ここまで
end--関数「OKU()」は、ここまで

--##右回りで隣の列に移動する関数##--
function MIGI()--関数名「MIGI()」を定義
turtle.turnRight()--右を向く
turtle.forward()--前に行く
turtle.turnRight()--右を向く
end--関数「MIGI()」は、ここまで

--##左回りで隣の列に移動する関数##--
function HIDARI()--関数名「HIDARI()」を定義
turtle.turnLeft()--左を向く
turtle.forward()--前に行く
turtle.turnLeft()--左を向く
end--関数「HIDARI()」は、ここまで

--##メインの処理##--
turtle.select(16)--スロット16を選択
turtle.refuel()--燃料補給
turtle.select(1)--スロット1を選択
turtle.up()--上に上昇

for B=1,YOKO/2 do--変数「B」は、1から終了値「YUKO/2」まで実行
  turtle.select(B)--スロット「B」を選択、ループ回数毎に1,2,3,4…と増える
OKU()--1列のブロックを置く関数
MIGI()--右回りで隣の列に移動する関数
OKU()--1列のブロックを置く関数
HIDARI()--左回りで隣の列に移動する関数
end--ループ「B」は、ここまで
↑ここまで



タートルを実際に動かしてみます

3x4のブロックを設置、最後に方向転換をして次の列に移動

成功です


説明がグダグダで上手くいってないような気がしますが・・・

考えて実践のループが大事だと思います。

for A=1,∞ do
    考えて
    実践
end

関連サイト

2019年6月21日金曜日

渦巻き状にブロックを敷き詰める

プログラム経験のない初心者が、どれだけのことができるかをやっていきたいと思います。床や天井にブロックを設置することを想定してプログラムしてみました。ただブロックを敷き詰めるだけなら簡単なんですが、コンフィグから縦と横のサイズをそれぞれ設定できるプログラムとなっています。

このMODは「lua 言語」を使用してタートルをプログラミングして働かせようというMODです。ビルドクラフトのロボット類のようなものを自分でプログラムして動かすようなイメージとなります。他にも周辺機器やアドオン、他MODとの連携など、やりこみ要素が高いMODですが、難易度はかなり上のMODです。


タートルに名前を付けます
名前を付けておかないタートルを壊した時に作成したプログラムが消えてしまいますので、必須項目となります。メールアドレスや住所と電話番号は必要ありません。

名前を付けるコマンド
  label set 名前

ここでは「g-g」と名前をつけます
「label set g-g」と入力してエンター

名前を付けたタートルは、アイテム化して再設置したとしても作成したプログラムは消えません。


プログラムの作成と呼び出し
プログラムの作成と呼び出しのコマンド
  edit プログラム名

作成したプログラム「A.lua」を実行します
「edit A」と入力してエンター
※「.lua」は拡張子なので入力の必要はありません


表示されたプログラム
文字化けは日本語の部分です
「--日本語の説明--」のように前後「--」の部分は、プログラムとして認識されません。


スロット1に燃料(溶岩バケツ)
残りのスロットに建材をスタックで入れます

燃料効率
 原木:15
 木材:15
 石炭:80
 木炭:80
 石炭ブロック:800
 溶岩バケツ:1000

タートルの移動は、1ブロック分で1の燃料を消費します
タートルのスロットが圧迫するので溶岩バケツが最強です


「Ctrl」コントロールキーを押します
矢印キーで「Run」に移動してエンターでプログラムを実行します

 Save:プログラムのセーブ
 Run:プログラムの実行
 Exit:このプログラム画面から戻ります


外側からブロックを敷き詰めていきます


ブロックを敷き詰めると中央でタートルは止まります
10x12のブロックの設置が完了しました
処理の内容がわかりやすくなるように色分けをしていますが、丸石や木材の1種類での設置も可能です




プログラムの内容

プログラム名「A」
--#####コンフィグ#####--
--縦と横の値を入力--
--デフォルト TATE:10、YOKO:12--
local TATE=10
local YOKO=12


--#####関数、縦の動き#####--
function TATEHEN()

--前に進んで下にブロックを設置--
for A=1,TATE do
  turtle.forward()
  turtle.placeDown()
end

--右向きに成功したら TATE を「-1」カウント--
if turtle.turnRight() then
TATE=TATE-1
end

--戻り値、TATE に「-1」を反映させる--
return TATE
end


--#####関数、横の動き#####--
function YOKOHEN()

--前に進んで下にブロックを設置--
for B=1,YOKO-1 do
turtle.forward()
turtle.placeDown()
  end

--右向きに成功したら YOKO を「-1」カウント--
if turtle.turnRight() then
YOKO=YOKO-1
end

--戻り値、YOKO に「-1」カウントを反映させる--
return YOKO
end


--#####メイン処理#####--
--スロット1から燃料補給--
turtle.select(1)
turtle.refuel()

--タートル上昇--
turtle.up()

--DODAI は1回の処理で2辺作成--
for DODAI=1,20 do

--スロット2から1度の処理毎にスロットを変更--
turtle.select(DODAI+1)
TATEHEN()
YOKOHEN()
end


プログラムの難しさ
赤文字は任意に設定できる文字や数字です、プログラム作成時には、大文字で設定しています。プログラム初心者のわたしは、設定されているプログラム用語なのか?自分で設定する文字なのか?この判別が原因で「?」の2乗となり全く理解できませんでした。それがクリアできたことで想像力が働くようになりました。


プログラムの注意事項
  「半角スペース」「,」「.」「end」など決まり事は守ります
  先頭にスペースを入れなくても機能します(インデントなし)
  行が空いても機能します
  「--」を文字の前に入れれば認識されません
  専門知識はありませんので自信がありません  


このプログラムで使用したデフォルトの文字と書式

タートルに関するデフォルトの関数

タートルの前進
    turtle.forward()
  
タートルが下にブロックを設置
    turtle.placeDown()
  
タートルが右を向く
    turtle.turnRight()
  
アイテムスロットの選択
    turtle.select()
  
タートルの燃料補給
    turtle.refuel()
  
タートルが上に上がる
    turtle.up()


コンピュータークラフト(lua 言語)の書式

コンフィグ、変数の設定
    local 名称=数字

関数、処理をまとめて定義
    function 名称()
      実行内容
    return 戻り値(必要ない場合もあり)
    end

ループカウンターで繰り返し処理
    for 名称=初期値,上限値 do
       実行内容
    end

分岐、条件文、真の場合
    if 条件 then
      実行内容
    end




地面にブロックを敷き詰めるプログラムの解説


図形で考えるとプログラムを行いやすくなります


1回目の処理
縦は、1~10(10ブロック)
  for A=1,TATE do
横は、11~22(11ブロック)
  for B=1,YOKO-1 do -1ブロックから始めます

2回目の処理
縦は、23~31(9ブロック)
横は、32~41(10ブロック)

3回目の処理
縦は、42~49(8ブロック)
横は。50~58(9ブロック)

4回目の処理
縦は、59~65(7ブロック)
横は、66~73(8ブロック)

5回目以降省略します

2回目以降、縦、横ともに設置する1ブロックずつ減っていきます、そこで「if 文」でタートルが右を向いたら変数のTATEとYOKOが、「-1」になるように定義しました



local TATE=10
local YOKO=12
「local」は、変数の記号のようなもので任意に設定できます、数学のXやYと考えたら理解できると思います、デフォルトで縦に10ブロック、横に12ブロックの広さです


function TATEHEN()

for A=1,TATE do
  turtle.forward()
  turtle.placeDown()
end
if turtle.turnRight() then
TATE=TATE-1
end
return TATE
end
「function」で、TATEHEN()と関数を設定して縦の動きを決めます
「for」で、Aは前に進んで下にブロックを置く作業を「1~TATE回まで」実行します
「if~then」もし曲がり角で右に曲がれたら、「TATEを-1」とします
「return」で戻り値の「TATE」を返すことで「-1」が反映します


function YOKOHEN()

for B=1,YOKO-1 do
turtle.forward()
turtle.placeDown()
  end
if turtle.turnRight() then
YOKO=YOKO-1
end
return YOKO
end
「function」で、TATEHEN()と関数を設定して横の動きを決めます
「for」で、Aは前に進んで下にブロックを置く作業を「1~YOKO-1回まで」実行します
「if~then」で、真の値をもし曲がり角で右に曲がれたら、「YOKOを-1」とします
「return」で、戻り値の「TATE」を返すことで「-1」が反映します


turtle.select(1)
turtle.refuel()
turtle.select(1)で、スロット1を選択して溶岩バケツを燃料として補充


turtle.up()
下にブロックを置いていくのでまず上昇します

for DODAI=1,20 do
turtle.select(DODAI+1)
TATEHEN()
YOKOHEN()
end
メイン処理は、DODAIと名前を付けて1~20回繰り返します、大きめな設定にしています、スロット1は、溶岩バケツが入っているので、スロット2からブロックを使用していきます、DODAIを実行する回数でスロットが2、3、4・・・と数字が上がっていくことで、アイテムの不足を解消しています


このプログラムの問題点は終わりがグダグダで最後のタートルの位置がいまいち特定できない。アイテムの使い方が雑って感じです。初心者なので大目に見てください。

ただタートルが可愛くなってしまったのが事実です。タートルのことが頭から離れない、これは恋かも・・・あ~眠れない。

関連コンテンツ