O laço For é usado para repetir um bloco de código por um determinado número de vezes.
O código abaixo é um exemplo bem simples de uso do laço For que vai escrever na tela os números de 1 a 5.
for ( Number := 1..5 ):
Print("{Number}")
A expressão Number := 1..5 é um gerador que cria uma sequência de números inteiros que começa em 1 e termina em 5. A quantidade de números da sequência determinará a quantidade de vezes que o laço For executará o bloco de código. Para cada execução, o valor atual da sequência será armazenada em Number para ser utilizada no bloco de código do For.
O laço For é muito utilizado para percorrer os elementos de um Array. O exemplo a seguir escreve na tela todos os elementos de um Array de inteiros.
Values : []int = array{4,2,9,6,3}
for ( X : Values ):
Print("{X}")
A cada iteração do laço For, um dos elementos do Array é armazenado em X.
É possível saber o índice do elemento do Array que está sendo usado na iteração atual do laço For como mostra este código:
Values : []int = array{4,2,9,6,3}
for ( X->Y: Values ):
Print("Index = {X}, Value = {Y}")
Vamos criar um dispositivo no UEFN para mostrar diversas formas de uso do laço For. O nosso dispositivo possui 3 recursos principais:
- Liga ou desliga um grupo de lâmpadas;
- Calcula o fatorial de um número;
- Encontra o índice do maior valor armazenado em um array;
Em qualquer projeto UEFN, abra o Verse Explorer, clique com o botão-direito no nome do projeto e escolha a opção Add new Verse file to project.
Em Device Name coloque for_device e clique no botão Create Empty.
Copie o código Verse abaixo para o dispositivo for_device:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
for_device := class(creative_device):
@editable
FactorialValue : int = 8
@editable
ArrayOfIntegers : []int = array{4,2,9,6,3}
@editable
LampsArray : []customizable_light_device = array{}
@editable
Sensor : volume_device = volume_device{}
OnBegin<override>()<suspends>:void=
Sensor.AgentEntersEvent.Subscribe(TurnOnLamps)
Sensor.AgentExitsEvent.Subscribe(TurnOffLamps)
FactorialResult := CalculateFactorial( FactorialValue )
Print("Factorial of {FactorialValue} is {FactorialResult}")
IndexResult := IndexOfHighestValue(ArrayOfIntegers)
Print("Index of the highest value of the array: {IndexResult}")
TurnOnLamps(Agent:agent):void=
for (CurrentLamp : LampsArray):
CurrentLamp.TurnOn()
TurnOffLamps(Agent:agent):void=
for (CurrentLamp : LampsArray):
CurrentLamp.TurnOff()
CalculateFactorial(Number:int):int=
var FactorialResult : int = 1
for (X := 1..Number):
set FactorialResult = FactorialResult * X
return FactorialResult
IndexOfHighestValue(ValuesArray: []int):int=
var IndexHighest : int = 0
var HighestValue : int = 0
for ( CurrentIndex -> Value : ValuesArray):
if( Value > HighestValue ):
set HighestValue = Value
set IndexHighest = CurrentIndex
return IndexHighest
Está sendo usado um Volume Device para detectar quando um Agente (o jogador) entra ou sai de um volume. As luzes são ligadas ao entrar no volume e desligadas ao sair do volume.
As funções CalculateFactorial e IndexOfHighestValue mostram outras formas de uso do laço For.
Salve o arquivo e compile o código Verse usando a opção Verse > Build Verse Code do menu do UEFN.
Acesse o Content Drawer e adicione o nosso dispositivo Verse for_device ao nível. Vamos precisar de 4 customizable_light_device e de um Volume Device. Coloque o Volume Device perto das customizable_light_device para facilitar a visualização.
Selecione o for_device no nível. Na aba Details adicione os elementos no LampsArray e selecione a referência para o Volume Device que será usado como Sensor. Você também pode alterar os valores padrões que estão sendo usados na constante FactorialValue e no array ArrayOfIntegers.
Salve o nível e clique no botão Launch Session para carregar o nível no Fortnite. Mova seu personagem até o local onde está o Volume Device para acender as lâmpadas e depois se afaste para apagar.
Pressione a tecla Tab e selecione a aba Registro para visualizar no log o resultado das funções CalculateFactorial e IndexOfHighestValue.