Múltiplas condições

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

As estruturas de controle podem ter mais de uma condição. As palavras-chave else e elseif podem criar cenários adicionais para o que deve acontecer sob várias condições. A sintaxe se parece com:

Mostra a sintaxe para elseif e else

if isGreen then
print("Ir")
elseif isYellow then
print("Devagar")
elseif isPedestrians then
print("Aguarde")
else
print("pare")
end

Neste projeto, else e elseif são usados para programar um percurso de parkour onde os corredores recebem prêmios dependendo de seu tempo de conclusão.

Codificar múltiplas condições

Para este projeto, você poderia escrever uma declaração if única para cada medalha a ser concedida aos jogadores, mas isso leva muito tempo. Tome, por exemplo, o código imaginário abaixo.

Todas as declarações if

if finishTime < 5 then
-- Get a gold medal
end
if finishTime >= 5 and <= 10 then
-- Get a silver medal
end
if finishTime > 10 and <= 15 then
-- Get a bronze medal
end

Uma maneira mais legível e eficiente de codificar isso é usar uma única declaração if e usar a palavra-chave elseif para fornecer condições alternativas para testar se as condições anteriores não são verdadeiras.

Usa elseif e else

if finishTime < 5 then
-- Get a gold medal
elseif finishTime >= 5 and <= 10 then
-- Get a silver medal
elseif finishTime > 10 and <= 15 then
-- Get a bronze medal
end

Quando a declaração if/then é executada, ela começará de cima e executará o código apenas para a primeira condição verdadeira que encontrar.

Configurar o percurso da corrida

Comece colocando o ponto de partida e a linha de chegada do percurso, e então crie um script para cronometrar o jogador e conceder diferentes medalhas.

  1. Crie uma parte ancorada chamada FinishLine. Para acelerar os testes, coloque o início e o fim próximos um do outro. Você pode mover a linha de chegada após terminar o script.

    Parte de Finalização
    Percurso Inteiro
  2. Em FinishLine, insira um script chamado RaceManager. Em seguida, adicione uma variável para armazenar quantos segundos se passaram desde o início da corrida e uma segunda variável para referenciar FinishLine.


    local finishLine = script.Parent
    local timePassed = 0
  3. Crie uma função chamada finish().


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Por conta própria:

    • Codifique uma função chamada partTouched() que executa finish() quando um jogador a toca.
    • Conecte a parte da linha de chegada a partTouched().
    • Compare seu código com o exemplo abaixo.

    local function finish()
    print("tocou a linha de chegada")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. Teste e verifique se finish() é chamado quando você toca a linha de chegada.

Impedir que finish() se repita

Neste momento, sempre que um jogador toca a linha de chegada, finish() é continuamente chamado enquanto o jogador tocar a parte.

Use um booleano, uma variável que armazena verdadeiro ou falso, para garantir que finish() seja chamado apenas uma vez.

  1. Crie uma nova variável chamada raceActive e defina-a como true.


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Executa sempre que o jogador toca a parte da linha de chegada
    local function finish()
  2. Adicione uma segunda condição à declaração if para verificar se raceActive é verdadeiro antes de chamar finish().


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Para impedir que finish() seja chamado novamente, defina raceActive como false.


    local function finish()
    print("tocou a linha de chegada")
    raceActive = false
    end
  4. Teste sua experiência para verificar se você vê sua declaração de impressão de teste apenas uma vez.

Controlar o tempo

Assim como uma declaração if, um loop while também pode usar uma condição para ver se deve ser executado. Para cronometrar o jogador, crie um temporizador usando um loop while true do que só roda quando o booleano raceActive é verdadeiro.

  1. No final do script, digite while raceActive == true do. Pressione Enter para completar automaticamente e adicionar o end.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Para cronometrar os jogadores, no loop, adicione 1 à variável timePassed uma vez por segundo. Inclua uma instrução de impressão para testar seu trabalho.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Teste a experiência e verifique se você vê cada segundo exibido na janela Output.

Conceder medalhas aos jogadores

Para finalizar, use uma declaração if com várias condições para conceder a jogadores uma medalha de prêmio diferente com base em seu desempenho. Use uma declaração if e duas declarações elseif para verificar o tempo de conclusão do jogador e conceder a medalha correta.

  1. Para confirmar que cada medalha pode ser concedida, use instruções de impressão.


    local function finish()
    raceActive = false
    print("Você terminou em " .. timePassed)
    end
  2. Para conceder uma medalha de ouro, codifique uma declaração if que compara timePassed com o tempo de conclusão desejado. Este exemplo verifica se o tempo do jogador foi inferior ou igual a 10 segundos.


    local function finish()
    raceActive = false
    print("Você terminou em " .. timePassed)
    if timePassed <= 10 then
    print("Você ganhou uma medalha de ouro!")
    end
    end
  3. Teste e confirme que a medalha de ouro pode ser concedida.

Adicionar condições adicionais

Agora que você testou para a medalha de ouro, codifique condições para as outras medalhas usando a palavra-chave elseif.

  1. Para a medalha de prata, use elseif e a próxima faixa de tempo desejada. Neste exemplo, a faixa é maior que 10 segundos, mas menor ou igual a 20 segundos.


    local function finish()
    raceActive = false
    print("Você terminou em " .. timePassed)
    if timePassed <= 10 then
    print("Você ganhou uma medalha de ouro!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Você ganhou uma medalha de prata!")
    end
    end
  2. Use o mesmo padrão para a medalha de bronze. Verifique seu código com o exemplo abaixo.


    local function finish()
    raceActive = false
    print("Você terminou em " .. timePassed)
    if timePassed <= 10 then
    print("Você ganhou uma medalha de ouro!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Você ganhou uma medalha de prata!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Você ganhou uma medalha de bronze!")
    end
    end
  3. Teste para as medalhas de prata e bronze.

Dicas de solução de problemas

Se você não vê as medalhas de prata e bronze aparecerem, tente uma das opções abaixo.

  • Cada elseif deve ter um then após sua condição.
  • Em partTouched(), verifique se a segunda condição da declaração if usa ==, como em raceActive == true.
  • Verifique se cada elseif está em escopo. Cada condição de elseif deve estar entre a primeira linha da declaração if/then e seu último end.

Adicionar a condição else

Se o jogador não ganhou nenhuma das medalhas, você deve incentivá-lo a tentar novamente. Nesse caso, você pode usar uma declaração else, que é executada se nenhuma outra condição for verdadeira, para mostrar uma mensagem a eles.

  1. Abaixo do último elseif e acima de end, inicie uma nova linha e digite else. Não adicione then. Abaixo de else, use uma instrução de impressão para incentivá-los a tentar novamente.


    local function finish()
    raceActive = false
    print("Você terminou em " .. timePassed)
    if timePassed <= 10 then
    print("Você ganhou uma medalha de ouro!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("Você ganhou uma medalha de prata!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("Você ganhou uma medalha de bronze!")
    else
    print("Tente novamente!")
    end
    end
  2. Teste para ver a mensagem do else.

Resumo

As estruturas de controle podem ter mais de um cenário. Use declarações if para configurar a declaração inicial a ser verificada e, em seguida, adicione quantas condições elseif forem necessárias. Finalmente, use else para declarar o que deve acontecer se todas as condições dadas forem falsas.

Começando de cima, todas as condições serão verificadas, e apenas a primeira condição verdadeira executará o código. As condições restantes não serão verificadas, nem seu código será executado.

Após terminar o projeto, você pode expandir o script para adicionar novos elementos de algumas maneiras adicionais.

  • Adicione código para que os jogadores possam repetir a corrida tocando a linha de início quando terminarem.
  • Crie uma maneira de exibir o tempo durante uma corrida. Você pode exibir o tempo em uma parte usando uma Surface GUI, como no Criar uma Ponte Cronometrada tutorial.
Script completo

local timePassed = 0
local finishLine = script.Parent
-- Usado para manter finish() e o cronômetro de repetir quando a corrida termina
local raceActive = true
-- Executa quando o jogador toca a linha de chegada e mostra a eles um prêmio
local function finish()
raceActive = false
print("Você terminou em " .. timePassed)
if timePassed <= 10 then
print("Você ganhou uma medalha de ouro!")
elseif timePassed > 10 and timePassed <= 20 then
print("Você ganhou uma medalha de prata!")
elseif timePassed > 20 and timePassed <= 30 then
print("Você ganhou uma medalha de bronze!")
else
print("Tente novamente!")
end
end
-- Verifica se um jogador toca a parte quando a corrida está ativa
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- Mantém o controle do tempo da corrida enquanto a corrida está ativa. Precisa estar na parte inferior do script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.