【9】Forループ(タスクを繰り返す)

コードを繰り返し実行する方法はいくつかあります。コードを特定の回数だけ実行したい場合は、forループ を使用します。1秒ずつカウントダウンするタイマーなどが良い例です。コードを繰り返す回数が分からないときは、ループで説明したようにwhileループを使用します。

forループの仕組み

forループでは、制御変数終了値増加値の3つの値を用いて、実行される回数をコントロールします。まず、制御変数の値から開始され、終了値に到達するまでカウントアップ、またはカウントダウンします。増加値がプラスならカウントアップ、増加値がマイナスならカウントダウンになります。

forループのステップ

まず、forループでは、制御変数と終了値を比較します。

コードを実行した後、制御変数に増加値が加算されます。

次に、制御変数が確認され、最初から繰り返されます。

制御変数が終了値を超えると、ループは停止します。

例えば、ループの終了値が10であれば、制御変数が10を超えた時点でループは停止します。

forループをコーディングする

forループの仕組みを理解するために、10からスタートし、0まで1ずつカウントダウンされるforループを作成します。ループが実行されるたびに、制御変数の現在の値を表示します。

  1. ServerScriptServiceに、PracticeLoop という名前の新しいスクリプトを作成します。
  2. forループを開始させるには、キーワード for を入力します。
for

LUAのキーワード
コードにおけるキーワードとは、その目的以外に使用されない特定の目的を持つワードのことを指します。例えば、while と入力するとwhileループの作成が始まります。キーワードを変数名として使用することはできません。つまり、for while といった名称を変数名として使用するとエラーになるということになります。

  1. count という名前の制御変数を作成し、開始値を10とします。
for count = 10

制御変数の名前を付ける
制御変数は変数として適切な名称であれば、どんな名前でもかまいません。他の変数名と同じように、制御変数の名前はforループの機能を明確で分かりやすく説明するものが良いでしょう。

  1. , 0」と入力して、終了値0 に設定します。必ずカンマを使用して値を区切るようにしてください。
for count = 10, 0
  1. , -1」と入力して、増加値-1 に設定します。ループの動作が終わると制御変数に増加値が加算され、カウントされます。ここでは増加値がマイナスなので、count+ (-1) という式になり、制御変数countが1つ少なくなるという結果になります。
for count = 10, 0, -1

増加値はオプション
forループの増加値は必ずしも指定する必要はありません。増加値が指定されていないと、forループはデフォルトでループ1回ごとに1が加算されます。3つ目の数字はないので、制御変数と終了値を区切るカンマも1つになります。例:for count = 0, 10
ただし、増加値を減算させたい場合は省力できません。例:for count = 10, 0,-1

  1. forループを終了させるには、do と入力して、[Enter]を押し、end を追加します。doend の間に入力されたコードはループが繰り返されるたびに実行されます。
for count = 10, 0, -1 do
 
end
  1. 1秒ずつのカウントダウンを作成するためには、count の値を表示し、wait関数を使用してタイマーを作成します。
for count = 10, 0, -1 do 
    print(count)    -- forループの現在の数字を出力する
    wait(1)         -- 1秒待つ
end

変数を出力する
出力されるものは文字列ではなく変数なので、コーテーションマークを入れる必要はありません。

  1. プロジェクトを実行し、Outputウィンドウにforループが表示されることを確認します。

ループが反復されるたびに現在の count の値が表示されます。反復とは、制御値を確認し、コードを実行し、増加値を更新するという一連のプロセスです。制御変数は0から開始され、10を超える必要があるので、ループは停止されるまでに11回反復されます。

問題解決のヒント
・forループの数字は、2つのカンマによって区切られていることを確認します。カンマが多すぎたり少なすぎたりすると、ループは開始されません。
・countの値が一気に表示してしまう場合は、wait関数のパラメーターが1以上になっているかどうかを確認してください。

様々なforループの例

制御変数、終了値、増加値を変えれば、ループの動きを変えることができます。先ほど作成したforループを変更して、10までカウントアップしたり、奇数ずつカウントアップするものを作成できます。以下に、様々なforループの例を示します。

1ずつカウントアップする

for count = 0, 5 do
    print(count)
    wait(1)
end

偶数ずつカウントアップする

for count = 0, 10, 2 do 
    print(count)
    wait(1)
end

forループがまったく実行されない例

下記のように制御変数が最初から終了値を超えており、しかも増加値がプラスの場合は、永久に終了値を超える(この場合は0より小さくなるということ)ことがないため、forループは1度も実行されることはありません。

for count = 10, 0, 1 do
    print(count)
    wait(1)
end

また下記のような場合も、永久に終了値を超えることがないため、forループは1度も実行されることはありません。

for count = 0, 10, -1 do
    print(count)
    wait(1)
end
4 thoughts on “【9】Forループ(タスクを繰り返す)”
  1. local startdoor = game.Workspace.startdoor
    local Players = game:GetService(“Players”)
    local tpmach = game.Players.LocalPlayer.PlayerGui[“tp mach”]
    local wp = game.Players.LocalPlayer.PlayerGui[“tp mach”].wp
    local ps = game.Workspace.ps
    local Player = game.Players.LocalPlayer
    gamingPlayer = 1
    local drg = game.Players.LocalPlayer.PlayerGui[“tp mach”].drG
    local stG =game.Players.LocalPlayer.PlayerGui[“tp mach”].stG
    local count = 20
    local counting = 1
    tpmach.Enabled = true
    aliveplayer3=1

    –↑–
    ——-定義———

    local function tp()
    Player.Character.PrimaryPart.CFrame = ps.CFrame
    end

    local function startGame()

    if aliveplayer3>=1 then
    if aliveplayer3>=2 and gamingPlayer>=2 then
    drg.Visible = true
    wait(1.5)
    drg.Visible = false
    elseif gamingPlayer==1 and aliveplayer3>=1 then
    counting=2
    wait(1)
    stG.Visible = true
    for count = count,0,-1 do
    stG.Text = “Game Start! by(” .. count ..”s)”
    count = count-1
    end

    end
    else
    wp.Visible = true
    wait(1.5)
    wp.Visible = false

    end

    end

    local function test()
    startGame()
    if counting==2 then
    tp()

    end
    end

    startdoor.Touched:Connect(test)
    でスクリプト組んだけどテキストラベルに GameStart by(?s)の?が最初は20で、そこから0になるまで-1 するように組んだつもりだけど動かない

    local function Gamejoin()
    aliveplayer3+=1

    end

    local function Gamelave()
    aliveplayer3-=1

    end

    Players.PlayerAdded:Connect(Gamejoin)
    Players.PlayerRemoving:Connect(Gamelave)

  2. 大変申し訳ございませんが、プログラムの添削は行っておりません。
    パッと見た感じですと、クライアントとサーバーの処理を混同されているようです。
    Players.LocalPlayerが使えるのはクライアントのみ(LocalScript)、Players.PlayerAddedはサーバー側で行う処理になります。
    この辺りは結構難しいので、実験的なプログラムをたくさん作って、1つ1つ理解していくことが大切になります。

    1. 今は難しい部分は後回しにして、とりあえずゲームは遊べる程度にしたのでそこから改善を加えていこうと思っています、それでもまだカウントダウンをGui に表示するのがイマイチなので教えてくれたら幸いです

  3. それぞれの処理を分けて考えるようにしましょう。
    GUIでカウントダウンを表示するプロラグムはこんな感じになると思います。
    for i=10,0,-1 do
    wait(1)
    script.Parent.TextLabel.Text = i — TextLabelの中にこのプログラムを入れた場合
    end

コメントを残す