Edycja atrybutów

0

Witajcie,
tworzę aktualnie grę na zajęcia i zastanawiam się nad jedną rzeczą. Dopiero się uczę programowania więc nie wszystko ogarniam jak należy. Początkowo wybieram sobie jakąś postać. Stworzyłem klasy każdej postaci która dziedziczy wartości z klasy "characters". Następnie następuje losowanie broni. Bronie zawarłem w klasie enum. W zależności od broni postać ma większy atak lub obronę. Pytanie czy można zapisać to w krótszy sposób? Poniżej podaję kod klasy jednej z postaci:

public class Aalen extends characters{

    public static void AalenStatisticWand(){
        double hp = 350;
        double ap = 100;
        double dp = 15;
        ap = ap + Weapon.WAND.getAb() + 0.05*ap;
        dp = dp + Weapon.WAND.getDb();
        System.out.println(hp);
        System.out.println(ap);
        System.out.println(dp);
}

public static void AalenStatisticSword(){
    double hp = 350;
    double ap = 100;
    double dp = 15;
    ap = ap + Weapon.SWORD.getAb();
    dp = dp + Weapon.SWORD.getDb();
    System.out.println(hp);
    System.out.println(ap);
    System.out.println(dp);
}

public static void AalenStatisticShield(){
    double hp = 350;
    double ap = 100;
    double dp = 15;
    ap = ap + Weapon.SHIELD.getAb();
    dp = dp + Weapon.SHIELD.getDb();
    System.out.println(hp);
    System.out.println(ap);
    System.out.println(dp);
}

public static void AalenStatisticGloves(){
    double hp = 350;
    double ap = 100;
    double dp = 15;
    ap = ap + Weapon.GLOVES.getAb();
    dp = dp + Weapon.GLOVES.getDb();
    System.out.println(hp);
    System.out.println(ap);
    System.out.println(dp);
}

public static void AalenStatisticTrident(){
    double hp = 350;
    double ap = 100;
    double dp = 15;
    ap = ap + Weapon.TRIDENT.getAb();
    dp = dp + Weapon.TRIDENT.getDb();
    System.out.println(hp);
    System.out.println(ap);
    System.out.println(dp);
}

}

0

Na pierwszy rzut oka widać, że kod każdej metody jest niemal identyczny, więc jak najbardziej da się.

0

Na pierwszy rzut oka wystarczy jedna metoda z argumentem którym jest Twój enum.

0

Póki co zmieniłem to w ten sposób :)

public static void AalenStatistic(){

    double hp = 350;
    double ap = 100;
    double dp = 15;

    Weapon weapon = null;

    weapon = WeaponRandom.WeaponPlayer(weapon);

    if (weapon == Weapon.WAND) {

        ap = ap + Weapon.WAND.getAb() + 0.05*ap;
        dp = dp + Weapon.WAND.getDb();

    } else if(weapon == Weapon.SWORD){

        ap = ap + Weapon.SWORD.getAb();
        dp = dp + Weapon.SWORD.getDb();

    } else if (weapon == Weapon.SHIELD){

        ap = ap + Weapon.SHIELD.getAb();
        dp = dp + Weapon.SHIELD.getDb();

    }else if (weapon == Weapon.GLOVES){

        ap = ap + Weapon.GLOVES.getAb();
        dp = dp + Weapon.GLOVES.getDb();

    }else if (weapon == Weapon.TRIDENT) {

        ap = ap + Weapon.TRIDENT.getAb();
        dp = dp + Weapon.TRIDENT.getDb();

    }
0

A mnie zastanawia - po co ta metoda jest statyczna? Jeśli weapon to enum to możesz użyć switcha zamiast rzędu ifów.

0

No wlasnie... wiem ze sa te static i inne ale niebardzo wiem kiedy czego uzywac. Nie moge znalezc sensownego zrozumialego dla mnie wytlumaczenia tych funkcji... uzylem tego ifa ze wzgledu na to ze "weapon" jest losowany w innej klasie.

0

Nadziany krawiec to ja. Samo nadalo mi nazwe jakas uzytkownika dziwne

0

No dobra ze switchem tez da rade to zrobic

1

Static - możesz używać statyczną metodę znajdującą się w klasie bez tworzenia jej instancji.Np.:

Metody klasy Math jak wejdziesz tutaj, to zobaczysz że wszystkie metody są statyczne. No bo czy policzyć potęgi potrzebujesz obiektu klasy Math? Raczej nie, potrzebujesz tylko funkcji która to zrobi.

Jak masz taką metodę statyczną jaką podałeś, to ona w Twoim kodzie tak naprawdę nic nie robi, bo zmienne są zadeklarowane lokalnie. Zresztą nawet jakby były polami, to i tak w metodach statycznych można zmieniać tylko pola statyczne, a tego byś raczej nie chciał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0