この記事は、岩手県八幡平市のプログラミング教室「アクセルキャンプ」の公開教材です。
アクセルキャンプ(フリースペースプラウド)のリンク
教材の作成依頼等も承っております。ご意見等は、リンク先の問い合わせ欄からお願いします。
教材の転用・利用等は自由ですが、コメント等で一声いただけますと幸いです。
Roblox Lua 基礎④ 繰り返し(for / while)
robloxでの繰り返し処理をマスターしよう
🎯 今日の目標
- 同じ処理を何回も実行できるようになる
- for文とwhile文の使い分けを知る
- ゲームでよく使われる「くり返し処理」を理解する
1. 繰り返し処理
コンピュータのいいところは、爆速で処理や計算ができること。プレイヤーの位置の計算や弾道計算を爆速で繰り返しやってくれてるから、そのおかげでみんながゲームできてたりするんだけど、繰り返しの設定をミスると、処理が早いぶん取り返しのつかないエラーやバグが起きたりする。
繰り返しの制御方法をマスターして、適切に使えるようになろう。
繰り返しの種類
プログラミングでの繰り返しは、大きく分けて2種類ある。
例えば、体育の授業とかで腕立て伏せをさせられるときに先生が
「腕立て伏せ10回1!」
て言ったら、チャイムが鳴ろうが昼休みになろうが10回終わるまで繰り返さなくちゃいけない。これは「10回」という回数で繰り返しを制御するパターン。

「チャイムが鳴るまで!」
と言われたら、10回でも20回でも、チャイムが鳴るまでは腕立て伏せをしなくちゃいけない。これは、「チャイムが鳴っているか」という条件で繰り返しを制御するパターン。

プログラミングでは、この2つを、for とwhileで使い分ける
| 繰り返しの種類 | luaの機能 |
|---|---|
| 回数が決まってる繰り返し | for |
| 条件で決まる繰り返し | while |
2. for : 回数が決まった繰り返し
for文は、回数が決まっている繰り返し に向いている。
for i = 1, 5 do
print(i)
end
出力結果:
1
2
3
4
5
-
iはカウンター(数字が1ずつ変わる変数) -
1, 5は「1から5まで」という意味
for文のよくある使い方
① 何回も同じことをする
for i = 1, 3 do
print("こんにちは")
end
② 数を使った計算
local sum = 0
for i = 1, 5 do
sum = sum + i
end
print(sum) -- 15
3. while文(条件が続くあいだ)
while文は、条件がtrueのあいだ繰り返す 処理。
local hp = 100
while hp > 0 do
print("HP: " .. hp)
hp = hp - 30
end
print("ゲームオーバー")
4. 実験コード
まず、これを実行したらどうなるか予想してから実行してみよう
①for文
local number = 3
for i = 1, 10 do
number = number * 4
number = number / 2
end
print(number)
実行結果
3072.0
①while文
local number = 0
while number < 10 do
print(number .. "回目")
number = number + 1
end
実行結果
0回目
1回目
2回目
3回目
4回目
5回目
6回目
7回目
8回目
9回目
余裕があったら、0回目ではなく1回目から10回目になるように変えてみよう
5. 無限ループについて
無限ループとは呼んで字のごとく、無限に終わらないループ(繰り返し)のこと。繰り返しの設定によっては、パソコンが壊れたりしない限りずっと動き続けるプログラムを作ることも可能。
実際、ほとんどのゲームは「終了ボタンが押されない限りずっとゲームが動き続ける」という、無限ループに近い仕組みになっている。
たとえば,さっきのwhile文のコードで、この1行をコメントアウトしてみると
local number = 0
while number < 10 do
print(number .. "回目")
-- number = number + 1 ここをコメントアウト
end
実行結果はこうなる
0回目
0回目
0回目
0回目
0回目
0回目
0回目
0回目
0回目
0回目
0回目
0回目
0回目
0回目
...以下略
これはnumberがずっと0のままだから、whileの終了条件(10以上になる)に永遠に到達しないから無限ループになる。
無限ループにすると、必要以上に繰り返したり、パソコンやサーバーに負担をかけてゲームが重くなったりするので、気をつけなくちゃいけない
繰り返しを実装するときは
- 何回繰り返すか
- どういう条件で繰り返すか
- どういう条件で終了するか
- ちゃんと終了したいときに終了できるか
に気をつけて実装しなくちゃいけない。
6. まとめ
- 繰り返しは同じ処理を何度も行う
- for文は回数が決まっているとき
- while文は条件が続くあいだ
- 無限ループに注意
7. Roblox Studioでやってみよう。
x方向に等間隔でブロックを配置するプログラムを作ってみよう。
今までと比べてちょっと難しいと思うので、じっくり考えてみよう
まず、ブロックを指定の位置に置くコードはだいたいこんな感じ
local part = Instance.new("Part")
part.Size = Vector3.new(4, 1, 4) -- 新しく置くブロックのサイズ
part.Anchored = true
part.Position = basePart.Position + Vector3.new( -- ブロックを置く位置
0, --x方向
0,
0
)
part.Parent = workspace
さて、まずは
①for文を使うべきか、while文を使うべきかを考えよう
②組み込んでみよう
③このままだと、同じ場所に同じブロックが置かれてしまうから、どこを変えたら等間隔になるか考えてみよう
④余裕があったら、階段状になるようにすればどうすればいいか、考えてみよう
local basePart = script.Parent -- 基準になるブロック
local COUNT = 10 -- ブロックを置く数
local INTERVAL = 5 -- ブロック同士の間隔(studs)
-- ここに繰り返し分を追加
???
例1:等間隔
local basePart = script.Parent -- 基準になるブロック
local COUNT = 10 -- ブロックを置く数
local INTERVAL = 5 -- ブロック同士の間隔(studs)
for i = 1, COUNT do
local part = Instance.new("Part")
part.Size = Vector3.new(4, 1, 4)
part.Anchored = true
part.Position = basePart.Position + Vector3.new(
INTERVAL * i,
0,
0
)
part.Parent = workspace
end
例2:階段状
local basePart = script.Parent -- 基準になるブロック
local COUNT = 10 -- ブロックを置く数
local INTERVAL = 5 -- ブロック同士の間隔(studs)
for i = 1, COUNT do
local part = Instance.new("Part")
part.Size = Vector3.new(4, 1, 4)
part.Anchored = true
part.Position = basePart.Position + Vector3.new(
INTERVAL * i,
INTERVAL * i,
0
)
part.Parent = workspace
end
🎮 チャレンジ
- for文を使って「1〜10」を表示しよう
- while文でHPが0になるまで減らしてみよう
- 触れるたびに5ずつ増えるカウンターを作ってみよう