Várias condições

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

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 parece com:

Mostra a sintaxe para elseif e else

if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

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

Código de várias condições

Para este projeto, você poderia escrever uma declaração if única para cada medalha para premiar os jogadores, mas isso leva muito tempo.Pegue, por instância, o código imaginário abaixo.

Todas as declarações if

if finishTime < 5 then
-- Obtenha uma medalha de ouro
end
if finishTime >= 5 and <= 10 then
-- Obtenha uma medalha de prata
end
if finishTime > 10 and <= 15 then
-- Obtenha uma medalha de bronze
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
-- Obtenha uma medalha de ouro
elseif finishTime >= 5 and <= 10 then
-- Obtenha uma medalha de prata
elseif finishTime > 10 and <= 15 then
-- Obtenha uma medalha de bronze
end

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

Configurar a pista de corrida

Comece colocando o ponto de partida e a linha de chegada do curso e, em seguida, crie um script para sincronizar o jogador e conceder diferentes medalhas.

  1. Crie uma peça ancorada chamada FinishLine.Para tornar o teste mais rápido, coloque o começo e o fim próximos.Você pode mover a linha de chegada depois de terminar o script.

    Finalizar Parte
    >

    Todo o Percurso
    >

  2. Na linha de conclusão, insira um script chamado RaceManager.Então, adicione uma variável para armazenar quantos segundos passaram desde que a corrida começou e uma segunda variável para referenciar a Linha de Chegada.


    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 possuir:

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

    local function finish()
    print("touched the finish line")
    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 que finish() é chamado quando você toca na linha de chegada.

Mantenha o final() de se repetir

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

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

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


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Executa sempre que o jogador toca na 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 parar finish() de ser chamado novamente, defina raceActive para false.


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Teste o seu jogo para verificar que você só vê a declaração de impressão de teste uma vez.

Acompanhe o tempo

Como uma declaração if, um ciclo while também pode usar uma condição para ver se deve ser executar.Para sincronizar o jogador, crie um cronômetro usando um ciclo while verdadeiro que só é executado quando o raceActive booleano é verdadeiro.

  1. Na parte inferior do script, digite while raceActive == true do. Pressione Enter para preencher automaticamente e adicionar o end.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Para sincronizar os jogadores, no loop, adicione 1 à variável timePassed uma vez a cada segundo. Inclua uma declaraçã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. Jogue o jogo e verifique se você vê cada segundo exibido na janela de Saída.

Medalhas de jogador de premiação

Para terminar, use uma declaração if com várias condições para premiar os jogadores com uma medalha de prêmio diferente com base em seu performance.Use uma declaração if e duas declarações elseif para verificar o tempo de conclusão do jogador e premiá-lo com a medalha correta.

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


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Para conceder uma medalha de ouro, códigue uma declaração if que compara timePassed com o tempo de finalização desejado.Este exemplo verifica se o tempo do jogador foi menor ou igual a 10 segundos.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Teste e confirme que a medalha de ouro pode ser concedida.

Adicione condições adicionais

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

  1. Para a medalha de prata, use elseif e o próximo período de tempo desejado.Neste exemplo, o alcance é maior que 10 segundos, mas menor ou igual a 20 segundos.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    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("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    end
    end
  3. Teste de jogo para as medalhas de prata e bronze.

Dicas de solução de problemas

Se você não vê os metais prata e bronze aparecerem, tente um dos abaixo.

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

Adicione a condição else

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

  1. Abaixo da última elseif e acima de end, inicie uma nova linha e digite else. Não adicione então.Abaixo de tudo, use uma declaração de impressão para solicitar que eles tentem novamente.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    else
    print("Try again!")
    end
    end

2. Teste de jogo para ver a mensagem else.

Sumário

Estruturas de controle podem ter mais de um cenário.Use declarações if para configurar a declaração inicial para verificar / conferire, em seguida, adicione as condições elseif necessárias.Por fim, use else para declarar o que deve acontecer se todas as condições dadas forem falsas.

Começando no topo, 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 e seu código não será executado.

Depois de terminar o projeto, você pode expandir sobre o script para adicionar novos elementos de algumas maneiras extras.

  • Adicione código para que os jogadores possam repetir a corrida tocando na linha de partida quando terminarem.
  • Projete uma maneira de exibir o tempo durante uma corrida.Você pode exibir o tempo em uma parte usando uma Interface gráfica do usuáriode superfície, como no tutorial Criar uma ponte temporária.
Completed script

local timePassed = 0
local finishLine = script.Parent
-- Usado para manter o finish() e o cronômetro de repetição quando a corrida terminar
local raceActive = true
-- Corre quando o jogador toca na linha de chegada e mostra-lhes um prêmio
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- Verifica se um jogador toca na peça quando uma 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)
-- Acompanha o tempo da corrida enquanto a corrida estiver ativa. Precisa estar no fundo do script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end