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;}
.blue {color: blue;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]
# 【第46回】 ピラミッドを作ろう(1)
:::success
## ◆ 今回の目標
- ### for文を使いこなそう!
- ### for文のステップを変更してみよう!
- ### 平べったいピラミッドを作ろう!
:::
## ◆ プラミッドを作ろう
今回はピラミッドを作っていくよ!
きれいにピラミッドを作るためにはfor文が大事になるからうまく使いこなせるようになろう!

:::success
## ◆ 課題1:好きな長さのブロックを置こう!
:::
io.read()で長さを入力し、入力した長さだけ前に進んだ後、後ろにさがりながらブロックを置いていくプログラムを書こう!

:::success
## ◆ 課題2:高さもつけてブロックを置こう!
:::
課題1を改良して、このような形にブロックを置けるようにしよう!
高さ5ブロックまで、この形にブロックを置いていくよ!
#### このプログラムではio.read()命令は使わないよ

変な形の建物だけど、これはfor文を使いこなすために重要な形だよ
今回はしっかりとfor文の書き方について考えてみよう!
## ◆ 課題2のfor文の書き方
課題2では<span class="focus">2重のfor文(for文の中にfor文)</span>を使うよ
外側のfor文は高さの回数ループし、内側のfor文は横の長さの回数ループするよ
課題2では、
- 1段目のブロックの長さが 1
- 2段目のブロックの長さが 2
- 3段目のブロックの長さが 3
︙

<span class="focus">高さの数</span>とその高さの<span class="focus">ブロックの長さの数</span>が<span class="focus">同じ</span>になっているよね
だから、外側のfor文のループカウンタの値(「i」など)を、長さの値として2個目のfor文のループ回数に使うことができるんだ!
課題2のプログラムの答えと解説は↓をクリックしてね!
[答えと解説](https://hackmd.io/yqOjxJB3Rvq64BV6VZs3HA?view)
自分で考えてプログラムが書けた人も、自分のプログラムと見比べてみよう!
## ◆ 階段の形にブロックを置こう
次はこのように階段の形にブロックを置いていこう!

実はこのプログラムはfor文の<span class="focus">ステップ</span>を使いこなせば、課題2のプログラムを1行変えるだけでできるよ!
for文の<span class="focus">ステップ</span>について学ぼう
## ◆ これまでのfor文
これまでのfor文はこのように書いていたよね
```lua=
for ループカウンター = 初期値, 最大値 do
繰り返す命令(何行でもOK!)
end
```
ループカウンターの値が初期値に設定されたあと、
くり返すたびに1ずつ増えていき、
ループカウンターが最大値になるまでくり返していたよね

これまでは<span class="blue">くり返すたびに1ずつ増えていく</span>のが当たり前だったけど、実は<span class="focus">くり返すたびにいくら増やすか減らすか</span>を自分で設定することができるよ
くり返すたびにいくら増やすか減らすかの値のことを<span class="focus">ステップ</span>というよ
## ◆ ステップを設定したfor文
ステップを設定したfor文はこのように書くよ
```lua=
for ループカウンター = 初期値, 最終値, ステップ do
繰り返す命令(何行でもOK!)
end
```
初期値,最終値 のあとに、「ステップ」という項目が増えたよね
ここに数字を書くとくり返すたびにその数字だけ増えるんだ
これまではステップの項目は書かずに、省略していたよね
省略すると、これまで通りくり返すたびに1ずつ増えていく設定になるよ
## ◆ ステップを設定したfor文の例
ステップを設定したfor文の例はこのようになるよ

ステップを「2」に設定しているからくり返すたびに2ずつ増えていくよ
右側の実行結果も2ずつ増えていっていることがわかるね
また、このようにステップにマイナスの数を設定するとくり返すたびにループカウンタの値が減っていくよ

## ◆ ステップを設定したfor文の使いみち
- for i = 1, 6 do
- for i = 1, 11, 2 do
上の2つはどちらもくり返し回数は6回だよね…
今回のプログラムのように、くり返すだけじゃなくてfor文の中でループカウンタを使用する場合に、自由に値を変えることができるよ
:::success
## ◆ 課題3:階段の形にブロックを置こう
:::
課題2を改良して、階段の形にブロックを置いていこう!
for文のステップを使うと、課題2のプログラムを1行変えるだけでできるからやってみよう!

:::info
## ヒント
変える1行は、高さの回数ループする外側のfor文の開始部だよ
高さが大きくなるにつれて長さは小さくなるから、ステップとしてマイナスの数を設定するよ
初期値に最大の値を設定し、最終値に最小の値を設定しよう
:::
:::success
## ◆ 課題4:ピラミッドの形にブロックを置こう
:::
最後はピラミッドの形にブロックを置いていこう!

高さが1段上がるごとに長さが何ブロック短くなるか考えてみよう!
上に上がった後に前に進むのを忘れないようにね!
## ◆ できたかな?
今回はピラミッドを作るためにまず平べったいピラミッドを作ったね
難しい部分も多かったけど、できたかな?
次回は奥行きもつけてピラミッドを作るよ!