Minecraftとタートルと僕スマートフォン用の表示で見るMinecraftとタートルと僕PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。Minecraftさて、少し寄り道したけれど、クラフティタートルのチュートリアルを続けましょう。対応できるレシピを増やそう前回のプログラムは、サトウキビ→砂糖のような1x1レシピに対応するためのプログラムだけど、もっと多くのレシピに対応できるようプログラムを改善しましょう。今回、対応させるのは以下のような3種類のレシピ。強調しておきたいのは、「材料は問わず」「これらの形に並べる」レシピに対応していること。3x3レシピなら、金ナゲットだろうが、鉄ナゲットだろうがなんであろうとこのプログラムで対応できます。「2x2レシピ」(画像は焼石。クラフトすると焼石レンガ4個になる)「3x3レシピ」(画像は金ナゲット。クラフトすると金インゴット1個になる)「3x3ドーナツ型レシピ」(画像はオークの葉。クラフトするとプラントボール1個になる)どうやってこれを実装するのか簡潔に言うならば、「上図のような配置に材料を並べる関数」を作るだけ。あとは前回のプログラム中で、turtle.craft()する直前にこの関数を実行すれば完成です。それでは材料を並べる関数を作るために、一番単純な、2x2レシピの形に並べる手順を考えてみましょう。2x2レシピの形に材料を並べる手順まず、真上のチェストから材料を1スタック取ったとき、タートルのインベントリは以下のように、スロット1にアイテム64個が収まっている。これを以下の図のように振り分ければ良い。スロット番号を重ねたのが以下の図。以上を踏まえて、正確に手順(アルゴリズム)を記述するならば次のようになります。今回は4等分するのだから、64/4=「16」個ずつ振り分ければいい。現在材料があるスロット1から「スロット1」「スロット2」「スロット5」「スロット6」に16個ずつ材料を移動する材料分配終了。あとはクラフトするだけ!これを実装した関数が以下のように。APIについて簡単に説明すると次のとおり。現在の選択スロット(ここではスロット1)にあるアイテムを、「Toスロット」へ、「個数」分だけ移動する。個数部分に小数が入ったら、その整数部分の個数を移動する(n=2.5ならば2個移動)。同じように考えるならば、3x3レシピ、3x3ドーナツ型レシピの形に分配する関数は次のように。turtle.transferTo(11,n)endここで振り返って考えるこれらには、無駄な記述や同じような記述の繰り返しがありませんか?今後、新しいレシピ追加するときにも、このように同じような記述を繰り返さなくてはならないのでしょうか。