Concluindo esta parte você vai:
Poder responder o que são e como usar: Variáveis, data types, operadores (controlar valores), conversão float-int (vice versa), delta time (independência de fps), operadores de condição (controlar o fluxo), constantes e entender uma piadinha.
"Já li e li, e ainda estou fazendo nada demais!"
Acalme-se meu jovem gafanhoto. Já passamos por muitas coisas importantes, mas ainda temos que fechar mais uma delas:
Variáveis! ...E mais:
Operadores, mais sobre
condições, ainda as
constantes,
delta time...!
Variáveis
O que são? Onde vivem? O que comem?
Se você nunca leu/ouviu essa palavra antes, irá se cansar de ver a partir de hoje.
Vamos tentar ser diretos:
Variáveis são variáveis.
Tá, nem tanto:
Variáveis são espaços de memória usados para armazenar valores que podem ser facilmente manipulados e usados.
Entendendo a frase acima, você já pode dizer que sabe o que são variáveis para sua mãe. Mas vamos além:
Vamos supor que você tenha uma variável chamada
model
com o valor
400
(o número do modelo da Landstalker! Como você pode ver no
data\vehicles.ide
)
E você quer ir para o próximo modelo, ou seja, você quer ir para o 401, e depois 402... 403...
Você pode fazer isso:
Pronto.
A variável
model
guardava o valor de
400
, e você aumentou
1
. Agora a variável
model
tem o valor
401
(avançamos o modelo, agora temos o número do Bravura!)
E se agora fizermos...?
A variável
model
agora terá o valor
421
. Não há mistério.
Abaixo, um script completo demonstrando o uso das teclas
U
e
J
para aumentar e diminuir o valor da variável "model".
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT model // defini uma variável
model = 400 // dei o valor "400" para ela
mainloop:
WAIT 0
// aqui eu aumento ou diminuo o valor da variável dependente da tecla pressionada
IF IS_KEY_PRESSED VK_KEY_U
model += 1
WHILE IS_KEY_PRESSED VK_KEY_U // aguardar enquanto ainda estou segurando a tecla U
WAIT 0
ENDWHILE
ENDIF
IF IS_KEY_PRESSED VK_KEY_J
model -= 1
WHILE IS_KEY_PRESSED VK_KEY_J
WAIT 0
ENDWHILE
ENDIF
PRINT_FORMATTED_NOW "model = %i" 1000 model // mostrei o valor da minha variável na tela
GOTO mainloop
}
SCRIPT_END
Você pode compilar e testar dentro do jogo.
Perceba que é a exatamente a mesma coisa que vimos na parte sobre
Condições, mas agora com a adição de uma variável.
Logo você entenderá melhor o
PRINT_FORMATTED_NOW
.
Qual a real utilidade das variáveis?
Meu amigo. Você nem imagina.
Por exemplo, você quer criar um carro no jogo, e você tem a opção de usar uma variável para dizer ao jogo qual modelo ser e qual posição ele tem que ficar! E depois de criado, o carro em si também ficará dentro de uma variável que pode ser usada para por exemplo trancar as portas do carro, fazê-lo andar etc.
Mas ainda aprenderemos à criar carros, pedestres etc em breve :)
Mas, você lembra daquele comando
SPAWN_VEHICLE_BY_CHEATING
que criamos um ELEGY usando ele? Ele é uma forma simples de criação de um carro (como um "cheat"), e podemos usar ele neste código!
Basta enviarmos a nossa variável model
para o comando.
Adicione isso abaixo em algum local do loop do código acima (lá no meio junto com os outros IFs).
Código: Selecionar tudo
IF IS_KEY_PRESSED VK_KEY_H
SPAWN_VEHICLE_BY_CHEATING model
WHILE IS_KEY_PRESSED VK_KEY_H
WAIT 0
ENDWHILE
ENDIF
Teste isso dentro do jogo.
Não, sério? Mal começamos a aprender cleo e já criamos um car spawner??
Sim! Você tem um car/vehicle spawner dentro do jogo agora. O único problema é que se você tentar spawnar um ID que não existe (por exemplo 399 ou menos, ou 612 ou mais) vai dar crash. Pode ser facilmente corrigível, mas vamos prosseguir o tutorial...
Eu ainda tocarei mais nesse assunto de controle de valores. Você ainda aprenderá mais.
Antes vamos focar no que as variáveis são:
Definindo variáveis
No exemplo acima, você pode ver esta linha:
Afinal, o que é isso? Primeiro precisamos saber o que é "data types".
Data types
Como explicado na parte anterior do tutorial, os computadores funcionam com um monte de
1
e
0
, mas como eles sabem usar estes bits da maneira correta? É para isso que existem os data types, para dizer o que aqueles bits são (se são um número, ou texto etc).
Em programações, isso é realmente muito importante, mas nem todas, como o caso do nosso GTA3script, onde você não precisa se importar tanto assim.
Para a sua alegria.
No exemplo acima, definimos uma nova
variável local (
LVAR
) com
data type INT
que quer dizer "Integer" — "número inteiro", lembra das suas aulas de matemática no ensino fundamental que você chamava de inúteis? — e demos o nome para esta variável de "model" —
o nome é você quem escolhe!!!
Os data types disponíveis no GTA3script são:
INT
FLOAT
TEXT_LABEL
TEXT_LABEL16
Descrições:
INT = Integer = Inteiro.
Exemplos: 0
,
1
,
1000
,
-1
,
50
,
245
,
-400
,
530912
...
Nota: Quase sempre você usará este data type.
FLOAT = Floating point = Ponto flutuante = Reais.
Exemplos: 0.0
,
1.0
,
220.1
,
-10.4
,
5012.423
...
Nota: No Brasil nós conhecemos os números reais por vírgulas, e não por pontos, ou seja, "1,5" querendo dizer "um e meio", mas aqui é usado "1.5".
TEXT_LABEL = Simplesmente um texto, mas com limite de 7 letras!
Exemplos: EXEMPLE
,
MYTEXT
,
HelloWo
,
test
,
test 2
,
Só Isto
...
Nota: Se você entende outras programações, isso é uma "string" — mesmo que você não entenda, lembre-se disso, pois o nome "string" é o mais usado.
TEXT_LABEL16 = O mesmo acima, mas agora com limite de 15 letras!
Exemplos: Aqui um exemplo
,
OUTRO EXEMPLO
,
mais outro aqui!
,
Será que vou ca
...
Nota: Isso pode ser chamado de "long string".
Nota 2: Se você está traduzindo este tutorial para seu idioma, note que os exemplos acima eu usei o limite de letras, se você traduzir os exemplos vai perder o sentido, mas deu para entender.
Nota: Por que 7 e não 8? Por que 15 e não 16?
Na verdade, variáveis definidas como text labels são na verdade 8 e 16 bytes, mas o último byte é um "null terminator" que tem o objetivo de dizer "acabou o texto!", portanto na verdade só cabe 7 ou 15 letras, enquanto o último espaço para letra é só um "0" dizendo que acabou o texto.
Nota para os programadores avançados: Não, não temos double e muito menos diferentes tipos de integers. Todos os nossos integers são int32 pois todas as variáveis do jogo funcionam com 4 Bytes. E isso nunca muda. Assim como as variáveis de string são na verdade um ponteiro para uma sequência de 2 ou 4 variáveis (para assim ter 8 ou 16 Bytes).
E assim, na hora de defini-las, adicione um
LVAR_
no início da linha, e em seguida o datatype. Por exemplo:
LVAR_INT
.
Variáveis locais e globais
O
LVAR
diz
"local variable" (variável local), enquanto
VAR
é para
"variável global".
Variáveis locais se comunicam somente localmente (só ali naquele lugar), enquanto as globais se comunicam globalmente (ou seja, com todas as threads do jogo, todos os mods, todo o main.scm, todas as missões etc).
Definir novas variáveis globais em custom scripts é errado e o GTA3script até te impossibilita de fazer isso — antigamente, e até hoje iniciantes usando Sanny Builder publicam mods fazendo isso! Estraga o GTA da pessoa de diversas maneiras.
O assunto de "variável local VS variável global" não falarei aqui para não ficar tão longo. Será explicado em breve e será útil caso você esteja querendo criar Multifiles (arquivos .scm). Você só usará as locais (
LVAR
) agora.
E onde posso definir as variáveis?
Somente dentro dos escopos/scopes (entre chaves
{ }
):
Mas o que são os escopos?
Você não precisa se preocupar agora. Lembra que em todos os nossos códigos tínhamos início e fim iguais e a única coisa que editávamos era o miolo?
Simplesmente continue fazendo assim. Em breve você aprenderá a usar melhor os escopos, mas em maioria, você sempre fará desta maneira e tudo estará ali dentro no miolo. Você nem ao menos deve entender ainda aquele NOP ali! — calma, você ainda aprenderá.
Mas como funciona exatamente a definição de uma variável?
Código: Selecionar tudo
// a "var" ainda não existe
LVAR_INT var
// a partir de agora a "var" existe
Portanto, isto não funciona:
Você pode definir variáveis em qualquer lugar, mas geralmente elas são definidas no topo, nas primeiras linhas do seu script.
Operadores
Voltando ao início desta parte do tutorial, você pode
controlar o valor das variáveis usando os chamados
"operadores".
Código: Selecionar tudo
// definindo as variáveis
LVAR_INT var1
LVAR_FLOAT var2
LVAR_INT exemplo outro
// setando elas
var1 = 128
var2 = 20.0
exemplo = 1
outro = 2
// controlando os valores
var1 -= 28 // Subtração. Agora o valor é "100"
var2 /= 2.0 // Divisão. Agora o valor é "10.0"
exemplo += 5 // Adição. Agora o valor é "6"
outro *= 2 // Multiplicação. Agora o valor é "4"
Perceba que você é bem livre em fazer o que quiser.
Você pode até mesmo fazer isso:
Código: Selecionar tudo
LVAR_INT var1
LVAR_INT var1
LVAR_INT var3
var1 = var2 + 5
var3 = var1 - 10
//etc
Nota: Somente 1 operador! Não há como fazer coisas como "var1 + var2 - var3 / var4" etc.
Okay, isso foi muito fácil, né?
Por exemplo você quer criar uma coisa 10 metros acima do CJ: Pegue a coordenada do CJ, aumente 10.0 na variável da coordenada Z que você terá a altura do CJ + 10.0!
Eita, não entendi!
Não se preocupe. Se você é realmente
muito iniciante no GTA, você provavelmente nem sabe ainda o que são coordenadas, XYZ etc.
Explicação rápida: Coordenada é a posição, onde são separadas em X (direita-esquerda), Y (frente-atrás) e Z (cima-baixo), e no GTA3script você tem comandos para pegar a coordenada.
Com o tempo você vai aprendendo muita coisa sobre o jogo. É tudo natural.
Mas há uma possível confusão que você possa fazer com isso:
Quando você faz isso, você não está "clonando" variáveis, você só está pegando o valor da variável 2, e colocando na 1! Nada além disso. As variáveis sempre são independentes, nunca se "clonam".
Também, note que sempre é na esquerda que terá o valor resultado, enquanto na direita terá a variável ou número a ser feito a operação.
Sempre leia como
"ISTO é o resultado DISTO". Ou seja, ISTO (esquerda) é o resultado DISTO (o que está na direita). Memorize.
Mais operadores
Conversão INT - FLOAT / FLOAT - INT
Você muitas vezes pode precisar converter um tipo de variável para o outro: Transformar um FLOAT num INT por exemplo.
Código: Selecionar tudo
LVAR_FLOAT fVolume
LVAR_INT iVolume
fVolume = 30.0
iVolume =# fVolume
Neste exemplo, eu tenho uma variável
FLOAT
(
fVolume
) com o valor
30.0
e eu transformei este valor em um
INT
, colocando-o na variável
INT
(
iVolume
).
Deste modo, agora eu tenho duas variáveis: Uma com o valor
30.0
(
fVolume
) e a outra com o valor
30
(
iVolume
).
Se fosse isto:
A minha variável
iVolume
teria o valor inteiro
29
.
E isso:
Adivinha?
Não, não será 30. Será 29 também.
Nota: Perceba que usei i
e f
no início do nome da variável, obviamente é opcional mas fica aí uma boa dica que serve para melhor identificação.
O principal uso de conversão é que há comandos que pedem números inteiros (integers) e não reais (floats), assim você terá que converter.
Também, por exemplo você quer mostrar o número do volume na tela, é mais interessante você mostrar "Volume: 29" em vez de "Volume: 29.2" (além de ser também mais fácil, em certos casos).
Delta time
Delta time é usado para um valor calculado em loop seja independente do FPS do jogo, ou seja, útil (útil não,
obrigatório!) para por exemplo fazer movimentos em objetos quaisquer.
Isso pode ser um assunto um pouco complicado de entender o motivo, mas se você entendeu bem o início do tutorial onde expliquei sobre o funcionamento do jogo, dos
WAIT
s e de seu FPS, você conseguirá entender fácil:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_FLOAT posX
posX = 0.0
main_loop:
WAIT 0
posX += 5.0
IF posX > 640.0
posX = 0.0
ENDIF
DRAW_RECT (posX 224.0) (20.0 20.0) (255 0 0 255)
USE_TEXT_COMMANDS 0
GOTO main_loop
}
SCRIPT_END
Teste isso dentro do seu jogo. Você verá um quadrado vermelho movendo na sua tela da esquerda pra direita.
Perceba que este quadrado muda de velocidade caso o FPS do seu jogo mude!
É este problema!!!
Se você está a 60 FPS, o quadrado irá se mover 2X mais rápido que estar a 30 FPS, devido ao funcionamento de como o jogo é processado, como eu já expliquei lá no comecinho nas primeiras partes do nosso tutorial. Pois quanto mais FPS, mais rápido o seu script irá rodar (mais especificamente, mais rápido ele irá repetir), e mais vezes fará o quadrado ir pro lado.
Para corrigir isso, se usa o operador
@
.
Se você entendeu o código acima, verá que a velocidade de movimento do quadrado é esta linha:
Basta adicionarmos o
@
para ser independente de FPS:
Faça isso e agora teste no jogo! O quadrado irá se mover na mesma velocidade, seja lá qual for o seu FPS.
Isso não é só usado para movimentos, mas também rotações e quaisquer outras coisas que precisem aumentar/diminuir em um loop!
Por exemplo se você quer fazer a porta de um carro abrir suavemente com o tempo, você irá aplicar rotação na porta, você precisará de um
@
na linha onde aumenta/diminui a rotação da variável para ficar independente de FPS.
Só evite usar quando não precisa, espero que você tenha entendido corretamente o uso disto.
Operadores de condição
E que tal os operadores condicionais? Sim, lá da nossa parte sobre
Condições!
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT laranjas
laranjas = 20
IF laranjas > 10
PRINT_STRING_NOW "Tenho muitas laranjas!" 5000
ELSE
PRINT_STRING_NOW "Tenho poucas laranjas..." 5000
ENDIF
}
SCRIPT_END
No exemplo acima irá mostrar
"Tenho muitas laranjas!" na tela.
O operador
>
retorna verdadeiro caso o valor da esquerda seja
MAIOR do que o valor na direita.
Leia isso como: "SE um É MAIOR do que o outro".
Assim como
<
é o inverso, ou seja
MENOR.
Para checar se o valor é igual ao outro:
Código: Selecionar tudo
IF laranjas = 10
PRINT_STRING_NOW "Tenho 10 laranjas..." 5000
ENDIF
Não irá mostrar nada na tela, afinal, eu tenho 20 laranjas e não 10!
Se fosse
IF NOT
checará se eu NÃO tenho, e assim daria verdadeiro.
E agora?
Código: Selecionar tudo
IF laranjas >= 10
PRINT_STRING_NOW "Tenho 10 laranjas..." 5000
ENDIF
Agora eu chequei se tenho 10 ou mais do que 10. E sim, eu tenho 20, então dará verdadeiro, assim como se eu tivesse 10 também daria verdadeiro.
E é claro, nós podemos checar variável contra variável:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT laranjas
LVAR_INT mangas
laranjas = 20
mangas = 15
IF laranjas = mangas
PRINT_STRING_NOW "Eu tenho a mesma quantidade de laranjas e mangas!" 5000
ENDIF
}
SCRIPT_END
No exemplo eu chequei se o valor da variável
laranjas
é igual ao de
mangas
. Dará falso, pois
laranjas
é
20
e
mangas
é
15
! Não mostrará nada na tela.
Aqui dará verdadeiro no segundo:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT laranjas
LVAR_INT mangas
laranjas = 20
mangas = 15
IF laranjas = mangas // dará falso
PRINT_STRING_NOW "1- Eu tenho a mesma quantidade de laranjas e mangas!" 5000
ENDIF
mangas += 5
IF laranjas = mangas // agora dará verdadeiro!
PRINT_STRING_NOW "2- Eu tenho a mesma quantidade de laranjas e mangas!" 5000
ENDIF
}
SCRIPT_END
Eu não preciso fazer 1 bilhão de exemplos aqui, você com certeza já entendeu :)
Isto é uma das coisas mais usadas durante a criação dos scripts e você ter aprendido isto foi um grande passo!
Você lembra do nosso
spawner? Agora podemos corrigir o script e limitar os IDs válidos:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT model // defini uma variável
model = 400 // dei o valor "400" para ela
mainloop:
WAIT 0
// aqui eu aumento ou diminuo o valor da variável dependente da tecla pressionada
IF IS_KEY_PRESSED VK_KEY_U
model += 1
WHILE IS_KEY_PRESSED VK_KEY_U // aguardar enquanto ainda estou segurando a tecla U
WAIT 0
ENDWHILE
ENDIF
IF IS_KEY_PRESSED VK_KEY_J
model -= 1
WHILE IS_KEY_PRESSED VK_KEY_J
WAIT 0
ENDWHILE
ENDIF
// temos que limitar os IDs válidos, segundo o vehicles.ide:
IF model < 400
model = 400
ENDIF
IF model > 611
model = 611
ENDIF
// spawna o veículo do atual ID
IF IS_KEY_PRESSED VK_KEY_H
SPAWN_VEHICLE_BY_CHEATING model
WHILE IS_KEY_PRESSED VK_KEY_H
WAIT 0
ENDWHILE
ENDIF
PRINT_FORMATTED_NOW "model = %i" 1000 model // mostrei o valor da minha variável na tela
GOTO mainloop
}
SCRIPT_END
Agora sim! Temos um mod usável.
Você também tem a opção de fazer assim:
Código: Selecionar tudo
IF model < 400
model = 611
ENDIF
IF model > 611
model = 400
ENDIF
Assim quando você tentar ir abaixo de
400
irá voltar ao último número da lista (
611
), e vice versa, o que é geralmente mais agradável.
Text labels (strings)
O uso de uma variável text label (string) é igual, mas, é claro, bem limitada.
Veja este exemplo legal:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT numero_da_camisa
LVAR_TEXT_LABEL tamanho_da_camisa
numero_da_camisa = 2
IF numero_da_camisa = 1
tamanho_da_camisa = PEQUENA
ENDIF
IF numero_da_camisa = 2
tamanho_da_camisa = MEDIA
ENDIF
IF numero_da_camisa = 3
tamanho_da_camisa = GRANDE
ENDIF
PRINT_FORMATTED_NOW "Tamanho da camisa: %s" 5000 $tamanho_da_camisa
}
SCRIPT_END
Será mostrado na tela do jogo
Tamanho da camisa: MEDIA
.
Pode ter ficado meio confuso para você no
PRINT_FORMATTED_NOW. Basicamente, o
%s
será trocado pelo valor da variável de string (%
s) que vem em seguida (ou seja, a variável
$tamanho_da_camisa
), e como sabemos, o valor da nossa variável é a palavra
MEDIA
.
O motivo de usarmos um
$
no início do nome da variável, é que o compilador não sabe diferenciar o que deveria ser uma variável ou um texto puro.
Você não precisa se preocupar com isso pois caso você não tenha colocado o
$
o compilador irá te dar um alerta de nível verde (do tipo
"Tá certo isso, Arnaldo?") para você dar uma olhada se você realmente quis fazer isso.
Então você verá e "
opa, tenho que colocar o $", e coloque, e pronto. Se não colocasse, apareceria na tela:
Tamanho da camisa: TAMANHO_DA_CAMISA
.
Como já explicado, caso você precisa de mais do que 7 caracteres, você terá que usar
LVAR_TEXT_LABEL16
em vez de
LVAR_TEXT_LABEL
, mas também, aspas duplas
"
em vez de únicas
'
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_TEXT_LABEL16 string
string = "SUP WORLD"
PRINT_FORMATTED_NOW "%s" 5000 $string
}
SCRIPT_END
Ou de uma forma menos dinâmica usando o
PRINT_STRING_NOW
:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_TEXT_LABEL16 string
string = "SUP WORLD"
PRINT_STRING_NOW $string 5000
}
SCRIPT_END
Ou, se preferir, o uso de underlines
_
ao invés de espaços. Mas não vejo motivos.
Coisas do tipo...:
Não funcionam!
Uso de text labels (strings) são muito limitados. Você precisa fazer coisas mais complexas para por exemplo saber quantas letras cada string tem e assim saber qual é maior que a outra etc. Se bem que isso não é grande problema devido a isso ser raro de ser usado num script. E se precisa, você pode usar
isso.
Constantes
Pensei em deixar em parte separada, mas isso é muito simples e óbvio!
Vamos ser diretos:
Constantes são constantes.
Tá, parei.
Mas é verdade, são
constantes, ou seja, valores que não mudam ao decorrer do script. Eu particularmente gosto de vê-los como "atalhos".
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_FLOAT fVolume
CONST_FLOAT VOLUME_LIMIT 30.0
fVolume = VOLUME_LIMIT
PRINT_FORMATTED_NOW "%f" 5000 fVolume
}
SCRIPT_END
O motivo de usarmos, é que às vezes queremos dar nomes aos números, e usar este "nome" em diversas partes, onde, quando você resolve mudar aquele número, em vez de mudar em todas as partes do script, você mudará em um só local.
Veja este exemplo:
Código: Selecionar tudo
IF fVolume > VOLUME_LIMIT // o volume está acima do limite! (se é maior do que "30.0")
fVolume = VOLUME_LIMIT // deixe no limite!!! (deixe "30.0")
ENDIF
Se você quer editar o limite do seu volume, é só ir ali na definição da constante e mudar o
30.0
:)
O que é importante você saber, é que: Constantes são só uma coisa para VOCÊ! Para o programador. Não irá para o produto final, é só uma coisa para te ajudar (como os comentários!)
No código acima, é
exatamente a mesma coisa de eu ter digitado isso:
É diferente de variáveis pois
é um número estático definido por você no seu código fonte, e não um número manipulável dentro do jogo:
Variáveis são variáveis. Constantes são constantes; não variam!
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT total_de_laranjas
LVAR_INT caixas
CONST_INT QUANTIDADE_DE_LARANJAS_POR_CAIXA 30
caixas = 2
total_de_laranjas = caixas * QUANTIDADE_DE_LARANJAS_POR_CAIXA
PRINT_FORMATTED_NOW "Eu tenho %i laranjas em %i caixas." 10000 total_de_laranjas caixas
}
SCRIPT_END
Você pode querer fazer isso para organizar melhor o seu código, assim como deixá-lo melhor para ser entendido etc :)
Nota: Eu usei letra maiúscula (UPPERCASE) pois prefiro assim — assunto de conversões de códigos, é definir um padrão para ser seguido (e a Rockstar fez também desta forma e é interessante você também fazer).
Você verá mais de constantes quando você se aprofundar nos comandos. Por exemplo, há comandos como o de trancar a porta do carro que aceita uma constante por padrão (do próprio compilador, que não precisa ser definida no seu código), e lá você facilmente tranca ou destranca a porta de um carro usando palavras ao invés de números — o que é muito bom!
TRUE e FALSE / ON e OFF
Devido ao GTA3script não ter variáveis "boolean" (quem entende de programações sabe do que estou falando), nós temos uma gambiarra de usar uma constante com nome
TRUE
(verdadeiro) e outra com nome
FALSE
(falso) que na verdade tem o valor de
1
e
0
— lembra daquele ensinamento de 1 e 0 que fiz umas partes atrás? Mas em vez de usarmos o
1
e
0
é muito mais interessante usar as palavras
TRUE
e
FALSE
em certas ocasiões, né? Fica melhor para a leitura:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT laranjas
LVAR_INT muitas_laranjas
laranjas = 5
main_loop:
WAIT 0
IF laranjas >= 10
muitas_laranjas = TRUE
ELSE
muitas_laranjas = FALSE
ENDIF
IF muitas_laranjas = TRUE
PRINT_FORMATTED_NOW "Voce ja tem %i! Nao precisa de mais!" 1000 laranjas
ELSE
laranjas += 1
PRINT_FORMATTED_NOW "Pegue mais uma! Total: %i" 1000 laranjas
WAIT 1000 // tempo de espera para ler a mensagem na tela
ENDIF
GOTO main_loop
}
SCRIPT_END
Experimente compilar este código e testar no jogo.
É claro, este código poderia ser escrito sem o uso de
TRUE
e
FALSE
, mas o que importa é a explicação.
Também lembre-se que o mesmo vale para
ON
e
OFF
, tudo é a mesma coisa, no final tudo é
1
e
0
.
Lembre-se: As constantes "TRUE" e "FALSE", e "ON" e "OFF" são definidas por padrão, você não precisa defini-las, é só pegar e usar!
Legal! Você já aprendeu condições e variáveis, duas coisas mais importantes para aprender a programar!
Se você já viu e nunca entendeu essa piada antes, provavelmente agora você entenda:
E você consegue simular esta piada em um código? Tente!
Se não conseguir (você deveria ter conseguido!!!), aqui está:
Código: Selecionar tudo
SCRIPT_START
{
NOP
LVAR_INT garrafas_de_leite
LVAR_INT ovos
ovos = TRUE
garrafas_de_leite = 1 // peguei uma garrafa
IF ovos = TRUE // tem ovos
garrafas_de_leite = 6 // peguei 6
ENDIF
PRINT_FORMATTED_NOW "Por que diabos voce comprou %i garrafas de leite?" 4000 garrafas_de_leite
WAIT 4000
PRINT_STRING_NOW "Porque eles tinham ovos!" 2000
}
SCRIPT_END
Que tal agora fazer um exercício para colocar em prática o que você aprendeu sobre condições e variáveis?
A seguir, você terá um exercício prático para fazer :)
Próxima parte:
10. Exercício #1