Witam.
Odkopałem ostatnio "grę" konsolową która napisałem podczas początków mojej nauki javy;) I pierwsze co rzuciło mi się w oczy to wielka ściana ifów. Czy da się to jakość skrócić ewentualnie rozpisać to tak, żeby było czytelnie?
public void walka(Gracz g,Przeciwnik p){
Random r = new Random();
double mojwalka, mojatak, mojobrona;
double jegowalka, jegoatak, jegoobrona;
double mojtrafienie, mojranienie;
double jegotrafienie, jegoranienie;
double moj, jego, mojsra, jegosra;
mojwalka = g.getWalka();
mojatak = g.getAtak();
mojobrona = g.getObrona();
jegowalka = p.getWalka();
jegoatak = p.getAtak();
jegoobrona = p.getObrona();
mojtrafienie = mojwalka / jegowalka / 2;
jegotrafienie = jegowalka / mojwalka / 2;
mojranienie = mojatak / jegoobrona / 2;
jegoranienie = jegoatak / mojobrona / 2;
if(mojtrafienie>0.9){
mojtrafienie=0.9;
}
if(jegotrafienie>0.9){
jegotrafienie=0.9;
}
if(mojranienie>0.9){
mojranienie=0.9;
}
if(jegoranienie>0.9){
jegoranienie=0.9;
}
if(mojtrafienie<0.1){
mojtrafienie=0.1;
}
if(jegotrafienie<0.1){
jegotrafienie=0.1;
}
if(mojranienie<0.1){
mojranienie=0.1;
}
if(jegoranienie<0.1){
jegoranienie=0.1;
}
int mtra=0, jtra=0,mra,jra;
int mojwynik, jegowynik;
mojwynik=0;
jegowynik=0;
for(int i=0; i<10; i++){
mtra=0;
jtra=0;
mra=0;
jra=0;
System.out.println("\nRunda: "+(i+1));
moj = r.nextInt((100)+1);
jego = r.nextInt((100)+1);
moj=moj/100;
jego=jego/100;
mojsra = r.nextInt((100)+1);
jegosra = r.nextInt((100)+1);
mojsra=mojsra/100;
jegosra=jegosra/100;
if(moj<mojtrafienie){
mtra=1;
if(jego<jegotrafienie){
jtra=1;
if(mtra==1 && jtra==1){
System.out.println("Rownoczese trafienie czyli nikt. Wynik: "+mojwynik+" - "+jegowynik);
}
}
if(mtra==1 && jtra==0){
if(mojsra<mojranienie){
mra=1;
mojwynik++;
System.out.println("Trafilem i ranilem. Wynik: "+mojwynik+" - "+jegowynik);
}
if(mojsra>mojranienie){
System.out.println("Trafilem nie ranilem. Wynik: "+mojwynik+" - "+jegowynik);
}
}
}
if(jego<jegotrafienie){
jtra=1;
if(moj<mojtrafienie){
mtra=1;
if(mtra==1 && jtra==1){
//System.out.println("Rownoczese trafienie czyli nikt. Wynik: "+mojwyn+" - "+jegowyn);
}
}
if(mtra==0 && jtra==1){
if(jegosra<jegoranienie){
jra=1;
jegowynik++;
System.out.println("Przeciwnik trafil i ranil. Wynik: "+mojwynik+" - "+jegowynik);
}
if(jegosra>jegoranienie){
System.out.println("Trafil nie ranil. Wynik: "+mojwynik+" - "+jegowynik);
}
}
}
if(mtra==0&&jtra==0){
System.out.println("Nikt nie trafia. Wynik: "+mojwynik+" - "+jegowynik);
}
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
System.out.println("\nWynik: "+mojwynik+" - "+jegowynik);
boolean wygrana=false,remis=false;
double exp;
if(mojwynik>jegowynik){
wygrana=true;
}else if(mojwynik==jegowynik){
remis=true;
}
exp = (g.getLvl() / 2) + (p.getLvl() / 3) + 1;
if (wygrana) {
exp += p.getLvl() + 2;
}
if (remis) {
exp += p.getLvl() / 2 + 1;
}
if (jegowynik==0&&mojwynik>0) {
exp+=g.getLvl()/2;
}
if ((mojwynik-jegowynik)>=5) {
exp += g.getLvl();
}
if (g.getLvl()<p.getLvl()) {
exp+=g.getLvl();
}
int koniecexp=(int)exp/2;
System.out.println("Zyskano: " + koniecexp+" pkt exp");
g.zmienExp((int)koniecexp);
}
PS Zmienna mojsra pochodzi od moja szansa ranienia ;)