Jump to content

Calcular pontaria


NuGuN
 Share

Recommended Posts

Boas!

Estou a fazer um jogo onde tenho dois contadores, total de tiros disparados e tiros certeiros, ao que a diferença entre os dois me dá os tiros falhados.

Dito isto, a dúvida é a seguinte, estou a calcular a pontaria a partir destes contadores mas não sei se o estou a fazer de forma correcta:

total de tiros disparados = totalShots e tiros certeiros = goodShots:

pontaria = (goodShots / totalShots ) - ( (totalShots - goodShots) / totalShots )

Esta é a forma como estou a calcular, mas não sei se é af orma correcta... Qual a vossa opinião?

Cumps

Link to comment
Share on other sites

Eu diria que depende daquilo que quiseres fazer com o valor da pontaria. A tua fórmula dá-te valores entre -1 e 1, a fórmula do bubulindo dá valores entre 0 e 1. No fundo, se a única coisa que pretendes é apresentar valores ao utilizador, é mais fácil de utilizar percentagens, logo a fórmula do bubulindo será a melhor.

De qualquer das formas, a tua fórmula pode ser simplificada:

pontaria = 2*(goodShots/totalShots) - 1

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

A formula que o bubulindo apresentou dá a percentagem de tiros certeiros. Isso pode-se considerar a pontaria? O que pretendia era uma relação entre tiros certeiros e falhados.

...

A tua fórmula dá-te valores entre -1 e 1

...

Sim, tem mesmo de ser porque o resultado dessa formula vai ser somado a outro valor que é a pontuação final, e se a pontaria for muito má, dessa forma acaba por retirar pontos. Em relação à percentagem, é o pretendido porque no final esse resultado é apresentado ao jogador multiplicado por 100.

Cumps!

Link to comment
Share on other sites

A formula que o bubulindo apresentou dá a percentagem de tiros certeiros. Isso pode-se considerar a pontaria? O que pretendia era uma relação entre tiros certeiros e falhados.

A percentagem de tiros certeiros é uma relação entre tiros certeiros e tiros falhados...

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

e que tal um preview o que já tens 😉 ?

Como assim? Mostrar o código que já tenho? Não vai ajudar porque estou a trabalhar com listas e não com nomes concretos, portanto só ia criar confusão acho eu. No fundo é o que já disse, tenho uma linha de código igual a isto:

pontaria = (goodShots / totalShots ) - ( (totalShots - goodShots) / totalShots )

Que no final o seu resultado é adicionado à pontuação final:

totalScore += pontaria

Isto vai fazer com que sejam retirados pontos se a pontaria for inferior a 50%

A percentagem de tiros certeiros é uma relação entre tiros certeiros e tiros falhados...

Mas neste caso, se a pontaria for má (a baixo dos 50% por exemplo), o valor é sempre positivo e eu pretendo que haja penalização caso a pontaria seja a baixo dos 50%. O objectivo é que se o jogador tiver uma pontaria inferior a 50% isso seja penalizador, e se reflicta no resultado final.. Daí eu estar a utilizar aquela formula. Só não sei se é a indicada.

Cumps!

Link to comment
Share on other sites

Já percebi...lol

Embora já se possa jogar, ainda há muito trabalho antes da versão alpha... Mas agora que falas nisso, estou a pensar talvez ainda esta semana apresentar aqui no forum um vídeo do que já esta feito com o objectivo de arranjar alguém que queira colaborar no desenvolvimento do site e talvez no melhoramento do grafismo...

Cumps!

Link to comment
Share on other sites

Nesse caso a fórmula do tachion parece-me adequada. Depois escalas dependendo de quanto queres somar ou subtrair.

Só para complicar um pouco.. deste modo estás a dar um peso linear à pontaria, o que pode ser algo que não pretendes. Podes, por exemplo, querer subtrair poucos pontos caso ele falhe bastante mas somar muitos caso ele acerte  bastante, ou podes querer que o crescimento seja exponencial ou outra coisa qualquer.

Nesse caso o que tens que fazer é definir uma função que, no intervalo [0, 1], represente correctamente os pontos que queres atribuir.

Uma exemplo de uma boa função para isso seria por exemplo sen(pi*x - pi/2).

Fornecendo como x a pontaria (goodShots/totalShots), conseguirias obter valores como:

- quando a pontaria = 0, sen(-pi/2) = -1

- quando a pontaria é 1, sen(pi - pi/2) = sen(pi/2) = 1

- qualquer valor intermédio dará um valor em [-1, 1], sendo que a maior variação se encontra em torno do valor central. Uma mudança de 45% para 55% de pontaria dá um maior incremento na pontuação do que uma mudança de  90% para 100%.

Podes brincar com funções quadráticas ou de outros graus para fazeres as curvas que quiseres!

(Quem é que diz que a matemática não é essencial na programação? Só quem não a sabe, porque quem não sabe é como quem não vê..)

Link to comment
Share on other sites

Realmente a formula que o KTachyon apresentou tem um aspecto bem mais civilizado que a a outra... Mas sinceramente não percebo como se chega aquela formula a partir da que eu apresentei. Alguma explicação? 😉

Warrior, estive  experimentar a formula que apresentas-te e também é interessante. Podia passar como X a percentagem de tiros certeiros. Mas acaba por ser mai complexa que a solução do KTachyon

Cumps!

Link to comment
Share on other sites

Passo a passo:

(goodShots / totalShots ) - ( (totalShots - goodShots) / totalShots ) = (goodShots / totalShots) + (goodShots - totalShots)/totalShots = (2goodShots - totalShots)/totalShots = 2goodshots/totalshots - totalshots/totalshots = 2goodShots/totalShots - 1

Sim, as duas fórmulas têm objectivos bastante distintos.

Já agora, uma maneira fácil de obter funções que nos interessam é desenhar à mão um gráfico que represente a curva da pontuação que nós queremos dar, e depois de escolher alguns pontos fazer, por exemplo, uma regressão polinomial de 3º ou 4º grau no excel.

Posso explicar como fazer isso, se houver interesse.

Link to comment
Share on other sites

Antes de mais, obrigado pela explicação 😉

No último passo não percebi de onde vem o -1...

Na verdade já me deu jeito e não soube como fazê-lo... já agora se poderes explicar como se faz, aposto que vai dar jeito a muita gente, incluindo eu.

Cumps!

Link to comment
Share on other sites

Vem do -totalShots/totalShots. Mas dito de outra forma:

Centrar em zero (de -0.5 a 0.5): goodShots/totalShots - 0.5

Expandir limites (de -1 a 1): 2*(goodShots/totalShots - 0.5)

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Uma maneira simples (pode mudar de uma versão do excel para outra, estou a usar o 2007 neste momento):

1. Fazer uma tabela com alguns valores que pretendemos para X e Y, por exemplo:

0 0

0.1 0.15

0.2 0.28

0.3 0.4

0.4 0.51

0.5 0.61

0.6 0.7

0.7 0.79

0.8 0.88

0.9 0.95

1 1

2. Seleccionar os valores e fazer "Inserir > Gráficos > Dispersão"

Podemos ver o "picotado" do gráfico e decidir se é semelhante ao que pretendemos criar; caso não seja podemos alterar os pontos.

3. Com o lado direito do rato sobre os pontos, escolher "Adicionar linha de tendência".

4. Seleccionar o tipo de regressão mais adequado. Isto depende um pouco do formato dos pontos que colocaram (e do número de inflexões) , mas uma polinomial de ordem 3 ou 4 deverá ser mais do que uma boa aproximação.

5. Escolher "Mostrar equação no gráfico".

Já está. A curva de 4º grau que melhor se ajuda àqueles pontos é:

-0.7284x^4 + 1.5287x^3 - 1.4484x^2 + 1.6506x - 0.001

Basta colocar esta expressão no nosso programa e temos uma forma simples e rápida de transformar um determinado valor (x) noutro (y) de forma não linear.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.