To mój 1 post na tym forum więc witam wszystkich!
Założyłem ten temat, ponieważ chciałbym fachowca o pewną rzecz. Mianowicie gram w pewną gierkę w której jest wykorzystywany skrypt, który oblicza szanse trafienia przeciwnika. Otrzymałem skrypt z gry z zapewnieniem, że wszystko jest ok, ale mi i tak coś nie pasuje.
Moim zdaniem skrypt wybiera losową liczbę, ale nie zawsze od 1-100 tak jak być powinno. Szansa trafienia jest oczywiście w procentach
[code]
private boolean trafil(int paAtak,Zawodnik atak,Zawodnik cel)
{
double mod=cel.getModObronaFiz() > 20 ? cel.getModObronaFiz() : 20;
int paObrona=(int)Math.round((cel.getPoziom()+bazaWsp+cel.getZrecznosc())*cel.getObronaFiz()*mod/100);
mod=atak.getModAtakFiz() > 20 ? atak.getModAtakFiz() : 20;
int paAtakA=(int)Math.round((atak.getPoziom()+bazaWsp+atak.getZrecznosc())paAtakmod/100);
int suma=paAtakA+paObrona;
if (suma==0)
wspPowodzenia=100;
else
wspPowodzenia=100*paAtakA/suma;
if ((int)(Math.random()*suma)<=paAtakA)
return true;
else
return false;
}
[/code]
paObrona oraz paAtakA mogą to być najróżniejsze liczby. Czy faktycznie ten skrypt za każdym razem losuje liczbę z zakresu 1-100? Czy jednak ten zakres jest zmienny?
Z góry dzięki za odpowiedzi, jeżeli to faktycznie jest błąd to chciałbym pomóc go usunąć z gry :)
Edit:
no niestety widzę, że nikt nie odpisuje. Może wyjaśnię dokładniej o co mi chodzi.
W kodzie tym liczona jest szansa na "coś". Liczona jest ona w procentach. Powinna być więc losowana liczba od 1 do 100 i sprawdzana czy znajduje się ona w jakimś zakresie liczb.
Pytanie moje brzmi czy w tym kodzie zawsze losowana liczba jest z zakresu 1-100 czy on ulega zmianie.
Teorie swoje opieram na:
if ((int)(Math.random()*suma)<=paAtakA)
mianowicie jeżeli Math.random()*100 losuje liczbę z zakresu 1 - 100 to jeżeli zmienimy podstawioną liczbę to zmieni się również zakres z którego liczba jest losowana
Jeżeli "suma" będzie inna niż 100 to zakres będzie inny niż 1 - 100
Czy mam rację czy to jednak działa troche inaczej?