Ir para conteúdo

Aula 2 - Lógica, Algoritmo E Operadores


Oneshot

Posts Recomendados

AULA II

 

LÓGICA, ALGORITMO E OPERADORES.

 

 

 

 

 

 

 

 

 


 

Na aula passada, você aprendeu qual a linguagem usada nos servidores, onde surgiu a programação Lua, o que é scripting e como se tornar um scripter.

 

Nessa segunda aula, você irá aprenderá a pensar como um programador, irá aprender a transformar seu raciocínio lógico em uma sequência de instruções e finalmente, com a apresentação do que são operadores, você irá montar um script básico, mas eficaz.

 


 

Lógica e Algoritmo

 

Toda linguagem de programação, inclusive a Lua, segue uma certa lógica para funcionar corretamente. A isso, damos o nome de lógica de programação.

 

Programação lógica é um paradigma de programação que faz uso da lógica matemática. John McCarthy, em 1958. foi o primeiro a publicar uma proposta de uso da lógica matemática para programação.

 

Wikipédia

 

Para fazer um script em Open Tibia não é diferente, você precisa criar uma lógica que relacione sua ideia e o script, uma sequência de instruções que, depois, se torne o script em si. Isso é um algoritmo.

 

Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito e com uma quantidade de esforço finita.

 

O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita culinária, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja completada. Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema.

 

Wikipédia

 

Pegaremos agora um exemplo bem simples de funcionamento em um servidor - Uma pedra mágica que usada, verifique o sexo do jogador e troque para o sexo oposto.

 

Quando o item for usado, então:

Verifique se o(a) jogador(a) é do sexo feminino

Se sim, então:

Troque o sexo para masculino

Remova o item

Se não, então:

Troque o sexo para feminino

Remova o item

Terminada a verificação do sexo do(a) jogador(a)

Terminada a execução do item

 

Um algoritmo como esse acima, também pode ser montado na forma de um gráfico, veja abaixo:

 

M5hco.png

 

 

 

 

 

 

Algoritmos são uma grande ajuda para os scripters. Eu, por exemplo, sempre monto uma imagem parecida com essa quando o script que vou fazer é um tanto mais elaborado.

 

Agora, com a apresentação dos conceitos abaixo, você irá transformar esse algoritmo em um script funcional.

 


 

Operadores aritméticos e relacionais.

 

Nessa parte da aula, você irá aprender um pouco mais sobre os operadores aritméticos, aqueles bem conhecidos das suas aulas de Matemática. Os operadores relacionais que comparam coisas (hm...).

 

Os operadores aritméticos, como você deve bem conhecer, fazem operações de cálculo simples. Creio que você os conhece.

 

Adição (+)

Subtração (-)

Multiplicação (*)

Divisão (/)

 

Você pode testar o funcionamento dos operadores com um comando print() e alguns números, veja abaixo:

 

print(4+7) -- Retorna 11
print(7-4) -- Retorna 3
print(5*4) -- Retorna 20
print(4/4) -- Retorna 1

 

Os operadores relacionais são muito usados também no âmbito da matemática. Na programação, eles comparam dois tipos de objetos e retornam apenas valores true e false. Os operadores relacionais são listados abaixo:

 

== ~= > < >= <=

 

O operador de igualdade (==) compara o tipo dos argumentos envolvidos, caso o tipo seja diferente, será retornado false. Caso o tipo seja igual, ele compara o valor dos argumentos e novamente, se o valor é diferente, é retornado false, caso os dois valores sejam iguais, será retornado true.

 

O operador de diferença (~=) é simplesmente a negação do operador de igualdade (==). Ou seja, ele retornará true para tipos ou valores diferentes e false para tipos/valores iguais.

 

Os operadores de ordem (>, <, >=, <=) funcionam simples como na matemática. Se os dois operadores são números, então eles são comparados como tais.

 

> - Maior

< - Menor

>= - Maior ou igual

<= - Menor ou igual

 

Eles só irão retornar true, caso a comparação seja realmente verdadeira e false caso não seja. Veja abaixo:

 

5 > 4 -- Retorna true pois realmente 5 maior que 4.

2 < 3 -- Retorna true pois realmente 2 menor que 3.

40 <= 10 -- Retorna false, 40 não é menor ou igual a 10.

200 >= 300 -- Retorna false, uma vez que 200 não é maior ou igual a 300.

 

Abaixo você irá aprender sobre os operadores de controle, eles criam condições e só executam algo associado a eles caso a condição seja verdadeira. Estou falando de: if, elseif e else.

 


 

Operadores de Controle

 

A estrutura de um operador de controle pode retornar qualquer valor. Tanto os valores false e nil são considerados como falsos e todos os outros valores diferentes são considerados como verdadeiros.

 

A estrutura de controle criada a partir de um operador, só executa o bloco de código associado se o valor retornado pela condição seja verdadeiro.

 

Existem cinco operadores de controle: if, elseif, else, repeat e until. Os dois últimos não serão explicados nessa aula.

 

O operador if significa 'se', remete a uma estrutura sintática e condicional, você já deve ter visto uma sintaxe do tipo:

 

Se você estudar muito então será recompensado amanhã.

 

Vou grifar em vermelho uma parte muito importante dessa frase e em azul seu bloco:

 

Se você estudar muito então será recompensado amanhã.

 

Veja que para a parte em azul ocorrer, então a condição tem que "retornar" verdadeiro, ou seja você tem que estudar muito.

 

Na programação Lua não é diferente, não. O bloco azul é simplesmente todo o código que será executado se a condição relacionada ao if retornar verdadeiro:

 

if true then
  bloco
end

 

Pois é, para algo retornar verdadeiro, você deve fazer uma comparação, usando nada mais que os operadores relacionais.

 

Note que: O if precisa de um then, significa então. Ele fecha a estrutura sintática do if, nunca esqueça dele. E também o end que fecha a verificação do if.

 

1 == 1
2 == 2
3 >= 3
4 <= 4
getPlayerMoney(cid) >= 40

 

Mas para toda condição, existe uma chance de ocorrer algo contrário, certo? Por exemplo, se o camarada não tivesse estudado, nada ocorreria? Na programação, nós tratamos dessa sintaxe com o else.

 

O else é simplesmente a negação do if, se a construção do operador if retorna falso, então o que estiver atribuído ao else será executado. Vamos completar a frase:

 

Se você estudar muito então será recompensado amanhã. Caso você não estude, coisas ruins podem acontecer.

 

E no nosso código ele pode ficar assim:

 

if false then
  bloco
else
  bloco2
end

 

Note que: O else não precisa de then. Como ele é a negação do if, ele "meio que" se aproveita do then e end do if.

 

E por último, temos o controlador Elseif, ele é bem simples, é usado quando você tem muitos outros blocos para outras várias condições. Mas os blocos ligados ao elseif só irão ser executados quando o bloco do if retornar falso, parecido com o funcionamento do else.

 

Se eu acordar na hora, irei tomar banho e ir para escola. Já se eu acordar mais cedo, irei dormir um pouco mais.

 

Juntando tudo em um código de simples entendimento:

 

if false then
  bloco
elseif true then
  bloco2
end

 

Note que: O elseif precisa de then igual ao if, mesmo que seja auxiliar ao if, ele é uma condição totalmente diferente. Ele só não precisa do end.

 

Para finalizar a aula, quero apresentar dois operadores lógicos muito usados com operadores de controle, são eles: and e or.

 

Os dois são usados quando você precisa fazer múltiplas verificações em uma estrutura condicional. A diferença é básica: O operador and exige que todas essas condições retornem verdade para executar o bloco, já o operador or exige que uma apenas seja verdade.

 

Eu costumo usar muito o and quando vejo essa situação abaixo:

 

if true then
  if true then
     bloco
  end
end

 

if true and true then
  bloco
end

 

E uso o operador or, quando vejo que um elseif foi empregado para executar um mesmo bloco que um if.

 

if false then
  print(1+1)
elseif true then
  print(1+1)
end

 

if false or true then
  print(1+1)
end

 

Finalizamos por aqui

 


 

Será que vocês conseguem fazer a "pedra do sexo" com os conhecimentos aprendidos aqui? Vou deixar algumas instruções, boa sorte!

 

O sexo feminino é representado por 0 e o sexo masculino é representado por 1

 

getPlayerSex(cid) retorna o sexo do jogador.

 

doPlayerSetSex(cid, sex) muda o sexo do jogador conforme o valor colocado no parâmetro sex.

 

function onUse(cid, item, fromPosition, itemEx, toPosition) é a função de usar um item, deve ser finalizada com end.

 

Só clique na resposta, se você conseguiu fazer.

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
  if getPlayerSex(cid) == 0 then
     doPlayerSetSex(cid, 1)
  else
     doPlayerSetSex(cid, 0)
  end
  doRemoveItem(item.uid, 1)
  return true
end

 

 

 


 

Um abraço, até a próxima aula.

 

 

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

que legal veii!

 

aki o meu!

 

function onUse(cid,item,position,itemEx,fromPosition)
local remove = true
if getPlayerSex(cid) == 0 then
doPlayerSetSex(cid,1)
else
doPlayerSetSex(cid,0)
return TRUE
end
if remove == true then
doPlayerRemoveItem(cid.item.uid,1)
end
end

Editado por mulizeu
Link para o comentário
Compartilhar em outros sites

que legal veii!

 

aki o meu!

 

function onUse(cid, item, position, ItemEx, toposition)
if getPlayerSex(cid) == 0 then
doPlayerSetSex(cid,1)
doRemoveItem(item.uid)
else
doPlayerSetSex(cid,0)
doRemoveItem(item.uid)
end
end

 

o seu está certo, vai funcionar, mas só uma dica, como todos os casos vai remover o item entao fica melhor se vc colocar p remover depois do end do if, ai vai precisar colocar uma vez só

Link para o comentário
Compartilhar em outros sites

Eu sempre fasso alguns equivocos em meus scripts...oakasao

mais e bom sempre ter alguem para observar e nos ajudar a concertar nossas falhas, obg pela DICA..na proxima vou prestar mais atenção!

Editado por mulizeu
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
×
×
  • Criar Novo...