owned this note
owned this note
Published
Linked with GitHub
###### tags: `minecraft`
<style>
* {font-family: 'Terminal','ヒラギノ丸ゴ ProN','Hiragino Maru Gothic ProN',YuGothic,'Yu Gothic','Hiragino Kaku Gothic ProN','ヒラギノ角ゴ ProN W3','Verdana','Arial',sans-serif;}
.markdown-body {font-family: 'Terminal','ヒラギノ丸ゴ ProN','Hiragino Maru Gothic ProN',YuGothic,'Yu Gothic','Hiragino Kaku Gothic ProN','ヒラギノ角ゴ ProN W3','Verdana','Arial',sans-serif;}
h2 {padding-top: 50px;}
img {margin: 20px auto;}
.alert-success {margin-top: 50px;}
.alert h2 {padding-top: 0px;}
.part {letter-spacing: .1rem;}
.markdown-body h3 {margin-top: 12px;margin-bottom: 12px;}
.markdown-body p {font-size: 1.25em;margin-top: 12px; margin-bottom: 16px;}
.markdown-body li {font-size: 1.25em;}
.markdown-body pre {font-size: 20px;}
.focus {color: red;font-weight: bold;}
.link-box {display: flex;justify-content: space-between; margin-top: 50px;margin-bottom: 50px;}
a.link {display: block; width: 50%; padding: 10px 15px; text-align: center; color: #fff; font-weight: bold; font-size: 20px; letter-spacing: .1em; text-decoration: none;}
a.link:hover {opacity: 0.85;}
a.prev {background: linear-gradient(to bottom, #1A7BBD 0%, #1A7BBD 50%, #125684 51%, #125684 100%); border-radius: 10px 0 0 10px;}
a.next {background: linear-gradient(to bottom, #D76820 0%, #D76820 50%, #964816 51%, #964816 100%); border-radius: 0 10px 10px 0;}
</style>
> [name=wataru yamamoto]
# 【第48回】 クラフトのレシピを作ってみよう!(1)
:::success
## ◆ 今回の目標
- ### Table型を使いこなそう!
- ### レシピ通りにクラフトしよう!
:::
## ◆ これまでのクラフト
第33回からの資料でタートルに<span class="focus">クラフト</span>をさせたね
<img src="https://i.imgur.com/oSj9Lwv.png" width=50%>
でも、新しいアイテムをクラフトするためにはプログラムを変えてあげないといけなかったから不便だったよね…
今回と次回で、1つのプログラムでたくさんのアイテムのクラフトができるようなプログラムを作ろう!
:::success
## ◆ 課題1 : チェストを準備しよう
:::
チェストA、タートル、チェストBを次のように横並びで設置しよう
チェストAには木材を入れておこう

## ◆ 木材を使ったクラフト
今回は木材からクラフトできるアイテムだけのクラフトをしていくよ
1つのプログラムで、木材からクラフトできるたくさんのアイテムをクラフトできることを目指そう!
1つのプログラムでたくさんのアイテムをクラフトするためにはTable型が必要になるよ
## ◆ Table型の復習
Table型とはいくつかの変数を入れることができる変数だったよね


Table型を作るには次のように値を「,」で区切って入れていたね

また、Table型の中身を読んだり書きかえるときには<span class="focus">変数名</span>[<span class="focus">番号</span>]でできたね!
## ◆ Table型のレシピを使ったクラフト
1つのプログラムでたくさんのアイテムをクラフトするためにクラフトの並べ方を書いたレシピを変数に保存しておく必要があるよ
クラフトのレシピは11個の値を持つTable型の変数を使って作成する
例えばドアのレシピは次のように表すよ

Table型の値の順番とスロット番号が対応していて、木材があるスロットは「1」、木材がないスロットには「0」を入れるよ
:::success
## ◆ 課題2 : レシピを使ってクラフトしてみよう
:::
Table型のレシピを使ってドアをクラフトするプログラムを作ろう
Table型のレシピ通りにチェストAから木材を取り、クラフトしてできたドアをチェストBに入れよう
:::info
## ヒント
まずTable型の変数にドアのレシピとなる値を保存しよう(上の方の図にあるよ)
### for文を使ってTable型の変数を1から11番目まで順番に調べ、その値が「1」なら対応するスロット番号に木材を1個取る、値が「0」なら何もしない
これで、レシピ通りに木材が並べられるはずだよ!
:::
## ◆ 2つ以上のレシピを保存する
2つ以上のレシピを保存するためには、たくさんあるレシピを1つのTable型変数にまとめたほうが便利だよ
今回は次のようにrecipeというTable型変数の中に、それぞれのレシピを持つTable型変数を入れておくよ


このようにすると、ドアのレシピを使いたい場合は、
<span class="focus">**recipe["doa"][数字]**</span>
となるね
:::success
## ◆ 課題3 : レシピを追加してみよう!
:::
たくさんのレシピを保存するrecipe変数を作って、その中に
- ドアのレシピ
- 作業台のレシピ
- 階段のレシピ
を書いてみよう
上の方の図にあるように、recipe変数の中に「,」で区切って3つのTable変数を入れよう
階段のレシピはこれだよ

:::success
## ◆ 課題4 : 3つのレシピの中から階段をクラフトしよう!
:::
課題3で作ったrecipe変数を使って、階段をクラフトしてみよう!
:::success
## ◆ 課題5:3つのレシピの中から自由にクラフトしよう!
:::
クラフトしたいアイテムをio.read()命令で入力できるようにしよう!
io.read()命令で入力した文字の変数が、recipe変数の中にあったらそのレシピ通りにクラフトできるようにしよう

:::info
## ヒント
io.read()命令で入力した文字は、<span class="focus">"入力した文字"</span> という形で変数に入るよね
recipe変数の中にあるレシピを呼び出すためには、<span class="focus">recipe["アイテム名"]</span> という書き方を使うよね
この<span class="focus">"入力した文字"</span>と<span class="focus">"アイテム名"</span>が同じ時そのアイテムをクラフトするようにしたいから、recipe変数を呼び出すときの<span class="focus">[ ]の中にio.read()の変数の名前をそのまま</span>書いてあげればできるよ
:::