[PROG] [Carlos - Tutorial] Lógica Booleana.
Enviado: Qui Abr 28, 2016 10:21 pm
Nome: Lógica Booleana.
Descrição: Neste tutorial abordarei um pouco a lógica booleana, explorando sistema binário e os quatro operadores lógicos mais importantes além de ser os únicos com que o Game Maker trabalha que são eles (and, not, or e xor) então boa leitura e vamos nessa .
Nível de dificuldade: Iniciante.
Requerimentos: Uma Cabeça funcionando no seu mais perfeito juízo + GM8.
Descrição: Neste tutorial abordarei um pouco a lógica booleana, explorando sistema binário e os quatro operadores lógicos mais importantes além de ser os únicos com que o Game Maker trabalha que são eles (and, not, or e xor) então boa leitura e vamos nessa .
Nível de dificuldade: Iniciante.
Requerimentos: Uma Cabeça funcionando no seu mais perfeito juízo + GM8.
- Sistema binário:
- Porta lógica and (&&):
A mesma tabela mais no sistema binário.
Código: Selecionar todos
// Exemplo do uso da porta lógica AND.
var _var1, _var2, _var3;
_var1 = 'Deu certo';
_var2 = false;
_var3 = false;
if (_var2 = false and _var3 = false)
{
draw_text(x,y,""+string(_var1));
}
Ao executar o programa ele irá checar os valores dados as variáveis logo em seguida ele irá checar a pergunta feita (nesse caso perguntava se as duas variáveis eram falsas) e em seguida se o resultado for verdadeiro ele executara o código caso não seu código não será executado.
- Porta lógica not (!):
Código: Selecionar todos
// Exemplo do uso da porta lógica NOT.
if not(instance_exists(bloco))
{
room_goto_next();
}
O código usado como exemplo e muito usado em jogos de Arknoid, Breakout (nintendo vs atari), pois ele checa se não existe nenhuma instância bloco na room, caso não exista ele passa de fase, mas ai você me pergunta "E o que foi que o not fez?" o not nesse caso irá fazer com que o código em si cheque se NÃO existe a instância bloco na room, sem o not ele simplesmente iria checar se existe algum bloco na room e se existisse ele passaria de room.
- Porta Lógica or (||):
A mesma tabela mais no sistema binário.
Código: Selecionar todos
// Exemplo do uso da porta lógica OR.
var _var1, _var2, _var3;
_var1 = 'Deu certo';
_var2 = true;
_var3 = true;
if (_var2 = false or _var3 = false)
{
draw_text(x,y,''+string(_var1));
}
Automaticamente quando foi executado o programa verificou se alguma das duas variáveis tem o resultado falso, se alguma das duas ou as duas tiver o resultado falso ele irá desenhar o resultado na tela, caso nenhuma das duas tenha o resultado igual a falso ele não irá desenhar nada na tela.
No caso do exemplo acima como não coloquei nenhuma das duas variáveis com verificação verdadeira nesse caso nâo irá resultar em nada sendo assim não irá desenhar nada na tela, mas, se mudarmos o resultado de alguma da duas vars para true ao executar o programa ele irá desenhar o resultado na tela, por que agora ele terá uma verificação verdadeira, e automaticamente ele executará o código seguinte.
- Porta Lógica xor (^ ^):
A mesma tabela mais no sistema binário.
Agora vamos ver um código usando o xor.
Código: Selecionar todos
// Exemplo usando aporta lógica XOR.
var _var1, _var2, _var3;
_var1 = 'Deu certo';
_var2 = true;
_var3 = false;
if (_var2 xor _var3 = false)
{
draw_text(x,y,""+string(_var1));
}
Agora vamos entender o que a porta lógica xor fez, assim que o programa foi executado ele leu as variáveis, então ele foi executar o programa e o xor verificou as duas variáveis ao verificar ele retornou dois valores diferentes assim o resultado seria true seguindo nossa tabela mas no código nos só queremos que ele processe e desenhe nossa string na room se o resultado for igual a false(0) então seria necessário dois valores iguais ou seja o código ficaria desse jeito.
Código: Selecionar todos
var _var1, _var2, _var3;
_var1 = 'Deu certo';
_var2 = true;
_var3 = true;
if (_var2 xor _var3 = false)
{
draw_text(x,y,""+string(_var1));
}
:arrow: Complemento dado pelo usuário Fuzenrad.
Só complementando, a junção das portas NOT (!) com AND (&&), OR (||) e XOR (^) possuem nomes próprios, são elas: NAND, NOR e XNOR.
A 'Porta Inversora E' ou 'NAND' (! + &&) retorna falso quando as entradas são verdadeiras:
Código: Selecionar todos
!(0 && 0) = 1
!(0 && 1) = 1
!(1 && 0) = 1
!(1 && 1) = 0
A 'Porta Inversora OU' ou 'NOR' (! + ||) retorna verdadeiro quando as entradas são falsas:
Código: Selecionar todos
!(0 || 0) = 1
!(0 || 1) = 0
!(1 || 0) = 0
!(1 || 1) = 0
E finalmente a 'Porta Inversora OU Exclusivo' ou 'XNOR' (! + ^) que retorna verdadeiro quando as entradas são iguais:
Código: Selecionar todos
!(0 ^ 0) = 1
!(0 ^ 1) = 0
!(1 ^ 0) = 0
!(1 ^ 1) = 1
Pronto cheguei ao fim do tutorial, espero que a galera tenha gostado, qualquer erro ou equivoco meu é só avisar .
Flw.
---EDIT---
Mudança do sinal dos sistemas binários, citados pelos Janx para um melhor entendimento, e agradecimento ao Fuzenrad pelo complemento do tutorial com a explicação das portas: NAND, NOR e XNOR.