Segundo reforço das aulas de programação por evento
por zecomeiaLógicaIntroduçãoNo
começo é difícil entender a Lógica(no nosso caso lógica Booleana,
procure por George Boole na wikipedia), mas com o tempo rapidamente vai
ficar fácil, basta concentração.
O que podemos considerar como lógica?Qualquer afirmação que fazemos é uma lógica independente de estar “certa” ou “errada”.Ex:
3 + 43 = 2
Isto
é uma lógica, mas o importante é se preocupar se a lógica é verdadeira
ou falsa.No exemplo acima se formos pensar na matemática podemos dizer
que aquela lógica é falas, mas em outros casos aquele resultado, 2 por
exemplo, pode ser apenas representativo da situação(estado) em que
afirmação(3 + 43 =) se encontra no contexto de onde ela foi aplicada.
Agora parece que complicou mas veremos como isso é simples.Então vamos ver sobre os estados.
EstadosO
que nos importa para a programação são os estados que podem ser
"verdadeiro e "falso"(existe o nulo também, mas não vamos usá-lo por
não ser usado na programação por eventos para o nosso caso).
Veja a seguir:
Verdadeiro = ON = 1
Falso = OFF = 0Iremos usar o 0 e 1 para representar.Resumindo o 0(falso) será "desligado", e 1(verdadeiro) será "ligado".
EX:
Geralmente
em aparelho eletrônicos, junto ao botão de Liga/Desliga tem um símbolo
de um 0 e 1, quando está ligado a chave está pro lado do 1 e desligado
pro lado do zero.
Como só usamos 0 ou 1 então temos que usar uma matemática baseada nas lógicas:
AND/E:A
lógica AND(E em português) diz que a saída só será 1 se A and B forem
iguais 1(A e B no caso porque só existem esses dois termos, caso
existissem mais termos todos teriam que ser iguais
a 1).Então se repararmos bem o que a lógica AND faz é
multiplicar[/i] os termos.
Veja a tabela verdade da lógica AND:
A B Resultado
0 0 0
0 1 0
1 0 0
1 1 1Usamos a simbologia a seguir para a lógica AND:
A x B = Resultado
Lógica
OR/OUA
lógica OR(OU em português) diz que a saída será 1 se A or B forem
iguais 1(A e B no caso porque só existem esses dois termos, caso
existissem mais termos pelo menos 1 teria que ser igual
a 1).Então se repararmos bem o que a lógica OR faz é
somar os termos.
Veja a tabela verdade da lógica OR:
A B Resultado
0 0 0
0 1 1
1 0 1
1 1 1Ao olhar a tabela acima você deve estar se perguntando:
“Ué?!?!Se a porta lógica OR soma os termo então 1 + 1 tem que ser igual a 2.”
Só
que isso não acontece porque usamos a lógica para estados de base
binária, ou seja, a saída só pode ser 0(desligado) ou 1(ligado).Pense
assim, se fosse igual a 2 então o sistema estaria ligado duas
vezes?!?!Acho que entenderam onde quero chegar.
Usamos a simbologia a seguir para a lógica OR:
A + B = Resultado
Lógica
NOT/NÃOA
lógica NOT(NÃO em português) diz que a saída será 1 se a entrada NÃO
for 1.Ou seja se a entrada for 0 a saída será 1, se a entrada for 1 a
saída será 0.Resumindo a lógica NOT inverte os estados binários 0 e 1.
Veja a tabela verdade da lógica NOT:
Entrada(A) Saída(Resultado = Ā)
0 1
1 0Usamos a simbologia a seguir para a lógica NOT:
A = Ā
*OBS: Ā(A barrado) significa que é o inverso de A.Alguns postulados de Matemática booleanaAntes
de vermos como usar essas lógicas no RPGMaker vamos ver algumas
analises que nos ajudam no ato de calcular os resultados e formar
lógicas que nos ajude a criar nossos sistemas.
Teoremas de De Morgan***OBS:Lembra
do A barrado, a partir de agora no lugar de uma barra em cima da letra
será usada apenas uma aspas simples para representar cada barra.
Vamos
entender a afirmação abaixo.Como a barra inverte o valor(de 0 para 1 e
vice versa) então se invertemos uma variável duas vezes ela será a
mesma coisa de não inverte-La.
A’’ = A
Nesse próximo caso
vamos usar algo conhecido como “barrão” isso significa que a barra de
inversão abrange toda a expressão entre parênteses.A expressão abaixo
significa que a inversão da soma de termos é igual a multiplicação dos
termos já invertidos.
(A + B)’ = A’ x B’
No caso abaixo
podemos ver que o processo é parecido com o do caso anterior.Onde agora
a inversão da multiplicação de termos é igual a soma dos termos
invertidos.
(A x B)’ = A’ + B’
A partir das analises dos
teoremas de De Morgan mostrados acima fica mais fácil a compreensão de
algumas lógicas, além da criação de outras como a “coincidência”(“ou
exclusivo“ conhecido também como XOR), mas isso não vem ao caso, então
se ficou interessado serão postados links pra saber sobre o assunto no
final da aula.
Outra coisa que essas analises nos ajudam é na
simplificação das expressões feitas para a lógica de seu programa, isso
é muito importante.
Usando a Lógica Booleana no RPGMakerAlguns
devem estar se perguntando que diabos isso me ajudará a programar no
rpgmaker, pois agora vou explicar um pouco melhor e mostrar alguns
exemplos, perceberás que você já usava essas lógicas sem nem mesmo
perceber.
Para usarmos essas lógicas a nosso favor no RPGMaker devemos usar as indispensáveis ferramentas:
Condições, Variáveis e Switchs.*OBS:Ainda
não passei a aula sobre condições mas já está sendo feita(falta uns
retoques), então sugiro que se não saiba nada sobre condições pare de
ler aqui e vá ler a aula de condições caso ela já tenha sido postada.
Primeiros vamos pensar no caso das switchs por ser mais simples.
Quando
você abre o comando de “condições” e seleciona a condição como
“switch” lá na aba 1, pode se ver que é possível escolher entre “ON” e
“OFF” para a condição da switch.Agora lembra-se dos nosso estados
binários 0 e 1?Sim, ON e OFF são exatamente eles neste caso.Então que
tal formarmos uma lógica AND com as condições para dois termos(switchs
nos casos).Vamos lá então.
Primeiro nomeie duas switchs, uma A e a outra como B e deixe as duas como “OFF”.
*OBS:As switch s já começam com seu estado natural em “OFF”, mas para efeito didático use o comando e deixe como OFF as switchs.
Agora
crie duas condições, onde a segunda condição se encontra no corpo da
primeira.A primeira condição é que a switch A tem que estar ON, e a
segunda condição é que a switch B tem que estar ON.Dentro da segunda
condição coloque uma mensagem apenas para verificarmos o efeito, pode
ser “A e B estão ligadas.”, desta forma:
Agora
lembra da tabela verdade da lógica AND?Vamos comprovar se nossas
condições do evento estão mesmo seguindo está lógica.Faça os testes um
por um mudando os valores das switchs no evento conforme a tabela
verdade da lógica AND e verificando os resultados.
Agora vamos ver a situação da lógica OR.
Crie outro evento e deixe no estado OFF aquelas duas switchs como no primeiro evento feito com o AND.
Agora
vamos criar nossas condições.Faça a primeira condição como A igual a ON
e coloque exceção.No corpo dessa primeira condição vamos colocar uma
mensagem pra verificar o efeito, pode ser “A ou B está(ão)
ligadas.”.Agora na exceção da primeira condição nós vamos fazer a
segunda condição, que será B igual ON para o funcionamento, e não há
necessidade de colocar uma condição. No corpo da segunda condição
coloque aquela mesma mensagem da primeira para verificarmos o resultado.
Faça os testes assim como foi feito para a lógica AND, mas claro, seguindo a tabela verdade da lógica OR.
*Parecer uma OR, o conteúdo do corpo da primeira condição tem que ser igual ao conteúdo da segunda.
Está na hora de ver a situação da lógica NOT.
Crie outro evento e desta vez usaremos apenas a switch A, deixe-a no estado OFF.Faça a condição(sem exceção) como A igual a
“OFF”.No corpo da condição coloque uma mensagem para verificarmos o resultado, pode ser “A está desligada.”.
Teste o evento verificando as duas situações da tabela verdade da lógica NOT.
Agora
pense como usando esses elementos ao mesmo tempo a infinidade de
“expressões” que podem ser feitas para trabalhar o seu evento,
lembrando que seguindo esses princípios podem ser criadas condições
para mais termos e não apenas 2 como na maioria de nossos exemplos.
Veremos agora como as possibilidades se ampliam ainda mais quando usamos a lógica aplicada com as condições e as variáveis.
Lembra
daquele primeiro exemplo deste texto( 3 + 43 = 2 ), pois é, com
variáveis pode-se transformá-lo em uma lógica verdadeira.Veja o exemplo:
Exemplo
bem bobo, né?Mas isso nos mostra que podemos criar condições que
executem algo que queremos quando a variável assumir determinado
valor.Isso significa que com uma variável temos uma switch de
infinitos(teoricamente) estados e não só 2( estado 0 e 1) como nossa
switch convencional.
Lembrando que nosso comando de condição no caso
de variáveis nos dá ferramentas que nos permite comparar uma variável
em relação a um numero constante escolhido na hora ou á uma outra
variável , usando os operadores comparadores
igual, maior que, menor que, maior ou igual, menor ou igual, diferente.
A
partir destes comparadores podemos criar condições que trabalham em um
intervalo de valores para a variável ou em casos únicos.
Operando
variáveis com a matemática comum para efetuar seus cálculos para o
sistema e depois utilizando estes comparadores das condições pensando
na lógica é possível fazer N coisas, lembrando ainda que o comando de
variáveis te dá acesso a muitos valores correntes do jogo.
Lição de casa:1-Faça um evento que vai envolver todas as lógicas desta forma:
Lógica
OR com 4 termos, no corpo de cada condição desta OR coloque uma lógica
NAND(NOT + AND, pense um pouco e descubra como ela funciona) de 2
termos.Faça os testes e monte a tabela verdade do evento.
2-Faça um
evento que mostre uma mensagem a cada 10 passos(tanto faz a mensagem),
mas isso só acontece se estiver andando na metade do lado esquerdo do
mapa(faça um mapa de 20x15), ou seja, mesmo que der 10 passos estando
do lado direito a mensagem não aparece.
*OBS:Não precisa ser precisamente 10 passos pode ter uma pequena variação
***No
final da página está o link para o projeto(no RMXP) com os eventos
feitos nos exemplos e o evento com a resposta dos exercícios.Também
está a tabela verdade do primeiro exercício(em anexo).
ComentárioBom,
acho que esse reforço de lógica ficou bem melhor que o antigo que tinha
feito e postado na RMB ^^.Demorei pra fazer esse reforço, mas acho que
valeu a pena e espero que continue ajudando muita gente.
Link para:Aulas:
1ª Aula-Apresentação e conhecendo a interface de um evento2ª Aula-Como o maker interpreta os comandos de seu evento3ª Aula-Finalmente vamos aos comandos4ª Aula-O "leão manso" chamado switch5ª Aula-Cortando “as sete cabeças do bicho” chamado variávelReforços:
Trabalhando Amplamente as MensagensLógicaSwitchs LocaisExtras:
nenhum