[Include] Progression
#1

Include Progression
Diminuindo quantidade de if's
Olб galera do fуrum! Resolvi postar uma include que criei tem ai umas 4 semanas e que to usando muito no meu Servidor. Ela por equanto sу funciona com Intengers mas em breve estarei aplicando pra funcionar com Floats o que exige um cбlculo mais avanзado.

Essa include nada mais й que uma Progressгo Aritmйtica, isso, aquela mesmo que seu professor deu no colйgio e vocк achou inъtiu... Mais conhecida como PA, e que em breve estarei adicionando a PG (progressгo Geomйtrica)

AVISO: Conteъdo massante para ser lido.


O que й uma PA?

Uma PA й uma sequencia de npumeros que segue uma sequкncia lуgica aonde a cada nъmero sгo somados ou subtraнdos um mesmo nъmero.

Um exemplo de PA й (0, 3, 6, 9...) Sendo assim a razгo ® й 3 pois vai se somando 3 a cada nъmero.

O primeiro nъmero й 0 entгo ele й o A1. E o n (posiзгo na escala) do 0 й 1.

Portanto uma PA tem estб cara: (A1, A2, A3, A4... An)

Se comparado com a primeira escala:


0 = A1 => Posiзгo 1 entao n = 1
3 = A2 => Posiзгo 2 entao n = 2
6 = A3 => Posiзгo 3 entao n = 3
9 = A4 => Posiзгo 4 entao n = 4


E o "An"? O An й um numero qualquer da escala sendo n a posiзгo dele na escala como dito a cima.


Download:

SolidFiles


Cуdigo:

pawn Code:
/*
 *                        Progression v1.0
 *                 © Copyright 2011 by (Mattos)
 *
 * Author: Mateus Costa de Mattos (http://www.brasilwarzone.com)
 * Date: 12th december 2011
 *
 * Do not remove the credits
 * (Nao remova os crйditos)
 *                      
 *
 */


#define An 0
#define A1 0
#define r  0
#define n  0

stock ArithmeticProgression_Pass(oA1 = 0, oAn = 0, or = 0, on = 0)
{
    if(oAn != 0 && oA1 != 0 && or != 0 && on == 0) return (((oAn-oA1+or)/or)%65999);
    if(oAn != 0 && oA1 != 0 && or == 0 && on != 0) return ((oA1-oAn)/(1-on));  
    if(oAn != 0 && oA1 == 0 && or != 0 && on != 0) return (oAn-or*(on-1));  
    if(oAn == 0 && oA1 != 0 && or != 0 && on != 0) return (oA1 +or*(on-1));
    return print("Error: Wrong use of the ArithmeticProgression function."), false;    
    #define ArithmeticProgression(%0,%1,%2,%3)   ArithmeticProgression_Pass(%0,%1,%2,%3)
}
Usos:

Й muito simples de usar a funзгo. Ela tem esta cara: ArithmeticProgression(A1, An, r, n)

Sendo a fуrmula de uma PA: An = A1 + r*(n - 1)

Ou seja na funзгo temos as 4 incуgnitas, e a incуgnita que vocк quer saber vc deixa ela mesma da forma como estб... Vamos dar um exemplo matemбtico pra depois dar um exemplo no jogo:

Temos a seguinte escala: (1, 3, 5, 7...) Sabemos entao que o A1 = 1, o r = 2 (por que vai somando de dois em dois)

Agora vamos supor que eu quero saber a posiзгo (n) do numero 35 (An) na escala, entao eu uso assim:

pawn Code:
new pos = ArithmeticProgression(1, 35, 2, n); // Como deixei o n, й o n que a funзгo vai procurar.
Entгo a funcгo vai me retornar "pos = 16" ou seja a osiзгo do numero 35 na escala й 16. Vocк pode conferir: (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35)


E no Jogo? Que utilidade tem essa P@%&# toda ae?
Vamos supor que eu queira fazer no meu servidor um sistema de propriedade, em que a cada 2 de score que o player evoluir, ele vai poder comprar mais uma propriedade para ele... Bom entгo de cara eu vejo a seguinte sequencia: (0, 2, 4...)

Do score 0 ao 1 ele poderб ter 1 propriedade. Do score 2 ao 3 ele poderб ter 2. Do score 4 ao 5 ele poderб ter 3 props.

Ja pensou vc ter de fazer milhares e milhares de if's para definir isso tudo? Negativo, vc usa o ArithmeticProgression(A1, An, r, n)... Muito simples: Sabemos que o A1 = 0 e que o r = 2... Entгo o An seria o Score do player... e o n o numero de propriedades que o player poderia ter. E porque isso? Basta ver ali em cima a 1 prop ali й justamente a posiзгo do 0, as 2 props й justamente a posiзгo do 2 e as 3 props й justamente a posiзгo do 4.

Por tanto poderiamos usar:

pawn Code:
new MaxPlayerProps = ArithmeticProgression(0, GetPlayerScore(playerid), 2, n); // Deixamos o n pq й ele que queremos saber
E й isso, isso vai servir infinitamente! Vamos supor que um player tenha o score 10... A funзгo irб me retornar que ele pode ter 6 props... Ai vocк me pergunta "MATTOS FUDEU CARA! E SE O NUMERO DO SCORE DO PLAYER FOR UM NUMERO ENTRE DOIS NUMEROS DA ESCALA" Uй nгo tem problema algum. Vamos supor o numero 5 de score que estб entre 4 e 6... O Cуdigo compriende que de 4 а 5 a posiзгo dos numeros ("n") serб a mesma... Ou seja 3... E por isso que essa include й um diminuidor de if's... pois antes eu teria de escrever isto tudo do score assim:

pawn Code:
new score = GetPlayerScore(playerid);
new MaxPlayerProps;

if ( 2 > score >= 0 )
{
MaxPlayerProps = 1;
}
if ( 4 > score >= 2 )
{
MaxPlayerProps = 2;
}
if ( 6 > score >= 4 )
{
MaxPlayerProps = 3;
}

...
Entгo й isso galera... Existem vбrias outras funcionalidades, sistema de medicaзгo, dar tanto de medicaзгo se o cara tiver tanto de algo, e por ai vai... Atй para um sistema de score isso serve, do tipo... A cada 10 kills o cara ganha um score... Entгo teriamos:

(0, 10, 20, 30...)
pawn Code:
new Score = ArithmeticProgression(0, Kills, 10, n); //Deixando o n a fnзгo calcula o n...
SetPlayerScore(playerid, Score)
Bom galera, espero que tenham entendido como utilizar, quem leu atй aqui e teve paciencia de ler parabйns!
Se nгo entenderгo por favor postem as dъvidas que nгo me encomodarei de explicar de novo, adoro matemбtica...

E em breve ai estarei colocando PG (progressгo geomйtrica) que ao invйs de ir somando, vocк vai multiplicando: (1,3,9,27...) (multiplicando por 3)... Que ai por exemplo vai poder ser usada pra tornar ganhar Score por exemplo cada vez mais dificil... tendo que matar cada vez mais ou seja la o que for... Ah! e Tambem tentarei fazer para funcionar com floats... (nгo acho tao ъtil, mas quem sabe alguem queira usar...)

Gostara? Aprenderam? Acharam ъtil? +REP

ATENЗГO: Nгo remover os crйditos, conteъdo protegido por direitos autorais!

Autoria:

Mattos

Crйditos:

rjjj
Reply


Messages In This Thread
Progression - by Mattos - 13.12.2011, 01:26
Re: Progression - by Lуs - 13.12.2011, 01:29
Re: Progression - by Mattos - 13.12.2011, 01:31
Re: Progression - by ViniBorn - 13.12.2011, 02:16
Re: Progression - by Leo_Lost - 13.12.2011, 02:22
Re: Progression - by steki. - 13.12.2011, 10:04
Re: Progression - by Miqueias Barros - 13.12.2011, 10:58
Re: Progression - by Aquilis - 13.12.2011, 13:11
Re: Progression - by Bolinha_ProJogos - 14.12.2011, 00:34
Re: Progression - by Lуs - 14.12.2011, 01:07

Forum Jump:


Users browsing this thread: 5 Guest(s)