Progression -
Mattos - 13.12.2011
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 0stock 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
Re: Progression -
Lуs - 13.12.2011
Bom trabalho, acho que eu sou o ъnico aqui a saber oque essa include faz kkkkkk. Enfim, bom trabalho.
Re: Progression -
Mattos - 13.12.2011
Quote:
Originally Posted by Los
Bom trabalho, acho que eu sou o ъnico aqui a saber oque essa include faz kkkkkk. Enfim, bom trabalho.
|
Verdade! uhsauhsuahsuha valeu... N realidade achoq ue o Gustavo_Araъjo tambem...
Re: Progression -
ViniBorn - 13.12.2011
Legal. : )
Re: Progression -
Leo_Lost - 13.12.2011
Da hora.
Re: Progression -
steki. - 13.12.2011
Apesar de ser extraordinбrio, continua sendo cуdigo ъtil.
Enfim, parabйns por ser uma pessoa que presta atenзгo nas aulas de matemбtica.
Re: Progression -
Miqueias Barros - 13.12.2011
Quote:
Originally Posted by Stewie`
Apesar de ser extraordinбrio, continua sendo cуdigo ъtil.
Enfim, parabйns por ser uma pessoa que presta atenзгo nas aulas de matemбtica.
|
No mнnimo vocк deve ser assim \/ , gostar de matematica й castigo :P
Re: Progression -
Aquilis - 13.12.2011
fantбstico! Nessa matйria tirei 100 =P Mas em compensaзгo quase reprovado em portuguкs e quнmica =/
Parabйns !!!!
Re: Progression -
Bolinha_ProJogos - 14.12.2011
Quote:
Originally Posted by Los
Bom trabalho, acho que eu sou o ъnico aqui a saber oque essa include faz kkkkkk. Enfim, bom trabalho.
|
nгo diga que vocк й o ъnico que sabe,garanto que a maioria sabe(inclusive eu),quem jб estudo isso ai e nгo sabe deveria repetir os estudos porque isso й um conteъdo muito importante.
@
Boa Plugin,bastante ъtil.
Re: Progression -
Lуs - 14.12.2011
Quote:
Originally Posted by Bolinha_ProJogos
nгo diga que vocк й o ъnico que sabe,garanto que a maioria sabe(inclusive eu),quem jб estudo isso ai e nгo sabe deveria repetir os estudos porque isso й um conteъdo muito importante.
@
Boa Plugin,bastante ъtil.
|
Eu falei brincando pois ele me explicou como funciona antes de postar. E nгo й um plugin й uma include.