Páginas

terça-feira, 25 de junho de 2013

Explicaçao de Loops

Bom, hoje em dia ainda tem muita gente que não sabe como funcionam os loops no PAWN.
Loops podem ser definidos como giros que o código irá dar até atingir seu objetivo, por exemplo:

for(new i = 0; i < 50; ++i) {
    SendClientMessage(playerid, 0xFFFFFFFF, "Ronaldo");
}
Nesse caso, o loop enviará a mensagem "Ronaldo" para o mesmo jogador 50 vezes, pois criamos a variável i, e falamos para que isso se repita enquanto i for menor que 50. E por ultimo colocamos que a cada vez que for realizado um giro, almentará em 1 o valor de i (++i).

Basicamente, usamos 2 tipos: FOR e WHILE.

FOR - É mais usado quando você sabe quando o loop vai parar.
WHILE - É mais usado quando você não sabe exatamente quando as repetições devem acabar.


FOR

Vou criar um loop usando FOR para contagem de players online, e em seguida explicarei.

....
new players = 0;
for(new i = 0; i < MAX_PLAYERS; ++i) {
    if(IsPlayerConnected(i)) {
        players++;
    }
}
format(String, sizeof(String), "Players Online: %d", players);
SendClientMessageToAll(0xFFFFFFFF, String);
....

EXPLICAÇÃO

new players = 0; - Criei uma variável 'players', e atribuí a ela o valor 0.

for(new i = 0; i < MAX_PLAYERS; ++i) { - Dentro do for, criei uma variável 'i', e atribuí a ela o valor 0. Em seguida, é como se estivesse "Enquanto i for menos que MAX_PLAYERS". E por fim, pedi para o compilador acrescentar um valor em i a cada vez que o loop acontecer.

if(IsPlayerConnected(i)) { - Verifico se o jogador está conectado.

players++; - Se estiver conectado, acrescentará um valor na variável players.

} - Fecha a chave do IsPlayerConnected.

} - Fecha a chave do loop.

format(String, sizeof(String), "Players Online: %d", players); - Formata a mensagem (Se você não sabe usar FORMAT, em breve farei um tutorial ensinando.)

SendClientMessageToAll(0xFFFFFFFF, String); - Por fim, envia a mensagem formatada para todos os jogadores.


WHILE

Vou criar um loop usando WHILE para ver quantos jogadores há online, bem parecido com o primeiro modo.

....
new i = 0;
new players = 0;
while(i < MAX_PLAYERS) {
    if(IsPlayerConnected(i)) {
        players++;
    }
    i++;
}
format(String, sizeof(String), "Players Online: %d", players);
SendClientMessageToAll(0xFFFFFFFF, String);
....

EXPLICAÇÃO

new i = 0; - Criei uma variável 'i' e atruí a ela o valor 0. Irei usa-la para contar quantas vezes o loop ja foi realizado.

new players = 0; - Criei uma variável 'players' e também atruí 0. Irei usa-la para contar quantos players tem online.

while(i < MAX_PLAYERS) { - Aqui é simples, é como se fosse "Enquanto i for menor que MAX_PLAYERS".

 if(IsPlayerConnected(i)) { - Verifica se o player de id 'i' está conectado.

players++ - Se estiver conectado, acrescenta um valor na variável players.

} - Fecha a chave do IsPlayerConnected

i++ - Acrescenta um valor em i. ESSA PARTE É EXTREMAMENTE IMPORTANTE, pois sem ela, entraríamos em um loop infinito e provavelmente o jogo travaria. Se não irmos acrescentando um valor em i, a parte do while nunca vai parar, pois sempre i será menor que MAX_PLAYERS.

format(String, sizeof(String), "Players Online: %d", players); - Formata a mensagem (Se você não sabe usar FORMAT, em breve farei um tutorial ensinando.)

SendClientMessageToAll(0xFFFFFFFF, String); - Por fim, envia a mensagem formatada para todos os jogadores.

Qualquer dúvida entre em contato.

segunda-feira, 24 de junho de 2013

Início!

Sejam todos bem vindos ao blog de programação Pawn.

Meu nome é Lucas e serei o responsável por boa parte do conteúdo daqui. É claro, o objetivo é deixar com que todos possam postar ideias e soluções de problemas. Vamos lá!