quarta-feira, 14 de março de 2012

Aula 03 - Lógica de Programação

Lógica de Programação
Você devia estar pensando que nessa terceira aula seria sobre programação para WYD em si, não é mesmo? Mas não. Não podemos pular nenhuma parte. Devemos também conhecer a lógica de programação. A lógica de programação deve fazer parte do nosso dia-a-dia de programação. 
Sendo para mim, uma das coisas mais importantes, porque se você dominar isso, conseguirá fazer diversas coisas juntamente com o aprendizado da linguagem utilizada. Lembrando que a lógica se aplica a qualquer linguagem de programação, por isso, é altamente recomendável que você estude muito isso. Porque se você um dia quiser trocar a linguagem, você só estudará a síntese dos códigos e depois irá se aprofundando.
Eu posso dar meu exemplo: era programador de Delphi. Estudei arduamente a tal Lógica de Programação. Todos os códigos delphi eu havia decorado. Depois migrei para o AutoIT também. E graças a lógica de programação, criei diversos hacks apenas usando o help do autoit. Depois migrei também para o C++ , que hoje estou fazendo essa aula. E aprendi PHP rapidamente graças a isso. Por isso, recomendo muito que estude Lógica de Programação.

O que é lógica de programação?
Lógica de programação é o uso da matemática (algoritmos) na hora da programação.  Algoritmo é ua sequência finita de instruções bem definidas e não ambíguas. Geralmente os exemplos são de culinária (realmente, a maioria dos exemplos em tutoriais são com comida). Aqui está um: fritar um ovo. 1 - colocar a frigideira no fogo. 2 - colocar óleo na frigideira. 3 - retirar o ovo da geladeira 4 - esperar o óleo ficar quente. 5 - quebrar o ovo separando a casca 6 - colocar o conteúdo do ovo na frigideira 7 - esperar o ovo ficar frito 8 - retirar o ovo da frigideira 9 - apagar o fogo


São 9 passos para fritar um ovo. Viu que todos os passos existe um verbo? Esses verbos são as funções e nesse algoritmo são:

  • Retirar
  • Colocar
  • Esperar
  • Quebrar
  • Apagar
Seguindo essa sequencia, teríamos um código mais ou menos assim: void Retirar_Ovo(int src, int ovo) { if(src == 1) ovo -= 1; // Tira da geladeira else if(src == 2) ovo_pronto += 1; // Tira da frigideira else ovo = ovo; } void Esperar(int type) { if(type == 1) // Espera óleo ficar quente Sleep(5000); // Em milisegundos = 5seg else if(type == 2) // Esperar fritar Sleep(10000); } void Quebrar(int ovo_index) { ovo.Quebrar[ovo_index] += 1; ovo->Casca.Pos = lixo; ovo->Gema.Pos = frigideira; return ovo.Quebrado; } void Apagar() { fire.Force = 0; return; } void Colocar(int type) { if(type == 1) // Frigeira no fogão frigideira.Pos = fogao; if(type == 2) // Óleo na frigideira frigideira.Oil += 1; if(type == 3) // Ovo quebrado na frigideira frigideira.OvoQuebrado += 1; } void main() { int ovo_index = 1; Colocar(1); Colocar(2); Retirar_Ovo(1, ovo_index; Esperar(1); Quebrar(ovo_index); Colocar(3); Esperar(2); Retirar_Ovo(2, ovo_index); Apagar(); return; }


PS: Esse código não é compilável. É apenas um exemplo.


Viram que cada verbo tinha uma função?  Temos 5 funções e mais uma que é o que faz todas funcionarem e que as chama para que o ovo seja frito.


Viram como é fácil?

Lógica de Programação no WYD
A lógica de programação será usada sempre no WYD. Tudo em uma source deve ser pensado. Vamos a um exemplo. Para fazer aquele NPC unicórnio. O que terá que ser feito? Verificar arma direita. Se for 0 continua. Verificar arma esquerda se é uma das armas requeridas. Se for continua. Verificar Refinação da Arma, se for igual a 6 continua. Verificar Level do personagem. Se for maior que 40 continua. Verificar Se é arch ou mortal. Se for mortal continua. Verificar se já fez a quest. Se não, continua e entrega e retira os itens.

O que você faria com essa sequencia? Escreveria igualzinho como está ali. Só que em linguagem C++. O verificar seria o if. E assim continuando.
O código ficaria assim:

void Unicornio(int npcid, int clientid) { st_Mob *player = (st_Mob*)GetMobFromIndex(clientid); if(player->Equip[7].Index == 0) { if(player->Equip[6] == ARMASPERMITIDAS) { if(player->Equip[6].EF1 == 43 && player->Equip[6].EFV1 == 6) { if(player->bStatus.Level >= 40) { if(player->Equip[0].EF == 1) { if(player->QuestInfo == 0) { player->Equip[6].Index = ARMA ENTREGUE; player->Equip[6].EF1 = 0; SendAll(clientid); } else { SendSay(npcid, "Você já realizou essa quest!"); return; } } else { SendSay(npcid, "Apenas para personagens mortais!"); return; } } else { SendSay(npcid, "Apenas para leveis acima do 40"); return; } } else { SendSay(npcid, "A arma deve estar +6"); return; } } else { SendSay(npcid, "Impossível de trocar com essas armas"); return; } } else { SendSay(npcid, "Largue sua outra arma!"); return; } }

Não levando em conta o tamanho do código, porque está muito grande e poderia ser melhor, ele funcionaria perfeitamente.

Em todo e qualquer função você terá que pensar, é inevitável.

Finalizando
Vou finalizando essa parte. Espero que agora saiba o que é lógica de programação e a utilize sempre, pois é uma mão na roda.

Atenciosamente, Shepher.

Nenhum comentário:

Postar um comentário