Avatar
Kafac
Člen
Avatar
Kafac:

Ahoj, árd bych někoho poprosil o pomoc, u javi ještě neumím tolik dědičnost, tak jí nepoužívám, ale chci se vás zeptat na názor na můj kod, jestli je dobrý nebo ne, ještě budu dělat arénu, kde budou proti sobě bojovncíci, bojovat, u té třídy Monster, chci aby se tam náhodně vybral nějaký protivník..
Main :

public class Main {
    Bojovnik bojovnik = new Bojovnik(1000);

    static boolean Jmeno()
    {
      System.out.println("Zadej jméno své postavy: (jméno nesmí být delší než 6 znaků");
        Scanner scname = new Scanner(System.in);
        String name=scname.nextLine();
        int namepocet = name.length();
        if(namepocet<7 && namepocet>0)
        {
            System.out.println("Zadal jste správné jméno!");
            System.out.printf("Vítám tě hráči %s",name);
             return true;

        }else{
            System.err.println("Vaše jméno je příliš dlouhé nebo krátké");
             return false;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Ahoj, vítej ve hře Bojovníci");
        boolean bname = true;
        while(!Jmeno())
        {

         }
        bname=true;
        while(bname)

        System.out.println(" Teď si vyberte za jakou rasu chcete hrát");
        System.out.println("1----> bojovník");
        System.out.println("2----> mág");
        System.out.println("3----> lukostřelec");
        int rasa=sc.nextInt();
        switch(rasa)
        {
            case 1:
                System.out.println("Vybral sis bojovníka!");
                bname=false;
                break;
            case 2:
                System.out.println("Vybral sis mága!");
                bname=false;
                break;
            case 3:
                System.out.println("Vybral sis lukostřelce!");
                bname=false;
                break;
            default:
                System.out.println("Zadal si něco jiného!");
                bname=true;
                break;
        }
        }



        }

Bojovnik:

public class Bojovnik {
    Monster monster;
private int zivot=450;
private int obrana=15;
private int utok =40;
private int posileniZ=0;
private int posileniB=0;
private int posileniH=0;
int damage;
int goldy;
Scanner sc= new Scanner(System.in);
public Bojovnik(int goldy)
    {
    this.goldy=goldy;
 }


 public void Vyber()
    {

     boolean cash=true;
     while(cash && goldy>0)
     {
        System.out.println("Ahoj bojovníku, teď si vyber, jaké věci si chceš koupit do začátku dostaneš 1000 goldů");
        System.out.println("1-  Meč 700 goldů");
        System.out.println("2- brnění 300 goldů");
        System.out.println("3- helma 600 goldů");
        int vyberItem=sc.nextInt();
        switch(vyberItem)
        {
            case 1:
                if(goldy>=700)
                {
                System.out.println("Vybral sis meč");
                goldy = goldy-700;
                posileniZ+=30;
                }else{
                    cash=false;
                }
                break;
            case 2:
                if(goldy>=300)
                {
                    System.out.println("Vybral sis brnění");
                    goldy=goldy-300;
                    posileniB+=15;
                }else{
                    cash=false;
                }
                break;
            case 3:
                if(goldy>=600)
                {
                    System.out.println("Vybral sis helmu");
                    goldy=goldy-600;
                    posileniH+=25;
                }else{
                    cash=false;
                }
                break;
            default:
                System.out.println("Zadal jste něco jiného, zkuste to prosím znovu");

                break;
        }
         System.out.println("Pokud chcete pokračovat v nákupu napište: Ano");
        String pokracovat=sc.nextLine();
        if(pokracovat=="Ano")
        {
            cash=true;
        }
 else{
            cash=false;
 }
        }
 }
 public boolean zivy()
    {
     if(zivot>0)
     {
         return true;
        }
     else{
         return false;
     }
 }
 public void braneni(Monster monster)
    {
     int poskozeni=damage-monster.obrana;
     if(zivot<=0)
     {
         zivot=0;
     }
 }
 public void utok(Monster monster)
    {
     damage=utok+posileniZ;
     System.out.printf("Zaútočil si na soupeře s damagem %s",damage);

 }

}

Monster:

public class Monster {
    String jmeno;
    int zivot;
    int damage;
    int obrana;

    public Monster()
    {
        Random r=new Random();
        int volba=r.nextInt(3);
        switch(volba)
        {
            //Duch
            case 0:
                jmeno="Ghostik";
                zivot=220;
                damage=80;
                obrana=0;
                System.out.printf("Budeš bojovat proti duchovi %s",jmeno);
                System.out.println("");

                break;
                //Kostlivec
            case 1:
                jmeno="Malonez";
                zivot=400;
                damage=30;
                obrana=10;
                System.out.printf("Budeš bojovat proti Kostlivcovi %s",jmeno);
                break;
                //Lukostřelec
            case 2:
                jmeno="winx";
                zivot=350;
                damage=45;
                obrana=7;
                System.out.printf("Budeš bojovat proti Lukostřelcovi %s",jmeno);
                break;
        }
    }
    public void braneni(Bojovnik bojovnik)
    {

    }

}

a aréna zatím takhle:

public class Arena {
Bojovnik bojovnik1;
Monster monster;

}
Odpovědět 22. ledna 11:30
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Atrament
Člen
Avatar
Atrament:

Tak ze stylistického hlediska bys měl trochu zapracovat na pojmenovávání proměnných a metod. posileniZ, posileniB, posileniH - vůbec se toho neboj a pojmenuj to posileniZbrane, posileniBrneni, posileniHelmy - až budeš ten kód číst za měsíc, tak nebudeš tápat co jsi tím posileniZ vlastně tehdy myslel :) Šetřit písmenkama se vůbec nevyplatí, obvzlášť používáš-li nějaké chytré IDE co ty názvy píše za tebe.

Názvy metod začínají v Javě vždycky malým písmenem. Je to konvence, která sice nemá na funkčnost žádný vliv, a není pro překladač ani chyba, když ji nedodržíš, ale je to konvence při jejímž dodržování ulehčíš ostatním javistům, kteří čtou tvůj kód, život.

Metody co vracejí boolean hodnotu je zvykem pojmenovávat se slovesem is nebo v českém překladu je na začátku nějak takto: jeZivy(), prostě tak abys pak viděl při jejím používání hned co se od ní čeká za výsledek.

Teď k OOP návrhu. Já osobně bych tvorbu jména přesunul do Areny. Prostě Bojovník příjde do Areny, a tam se zapíše pod nějakým jménem. Arena tím pádem vytvoří instanci Bojovníka s tím jménem, a vygeneruje mu soupeře Monster. Takže generaci Monstra taky do Areny. Arena pak bude kontrolovat průběh souboje - nekonečný cyklus, kdy se po každém kole zkontroluje zda je někdo ještě naživu, pokud někdo zemřel tak se cyklus přeruší a vyhlásí se vítěz. Taky bych asi udělal třídu Prodavac, instanci prodavace by mela Arena a bojovnik by si po každém vyhraném zápase mohl u prodavace nakoupit. Takže všechno to nakupování přesunout z Bojovnika do Prodavace.

Btw proč má třída Bojovník instanci Monster? (Druhý řádek ve tříde Bojovnik) Vůbec ji nepotřebuje, to odstraň.

Samozřejmě existují i jiné možnosti jak to udělat, co se týče OOP tak prakticky nikdy se nedá říct toto je to jediné a správné řešení.

 
Nahoru Odpovědět  +2 22. ledna 12:38
Avatar
Kafac
Člen
Avatar
Odpovídá na Atrament
Kafac:

Tak jo díky, nakonec jsem teď poslední den před odevzdáním práce zjistil, že to má být všechno v mainu, takže to ještě celý předělávám :/

Nahoru Odpovědět 22. ledna 15:37
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Jaro
Člen
Avatar
Odpovídá na Kafac
Jaro:

Počkaj to máte v zadaní, že to všetko musí byť v main? :D To by som sa teda išiel porozprávať s tým dotyčným.

Nahoru Odpovědět  +4 22. ledna 17:39
A ship is safe in harbor. But then again, that´s not what ships are for.
Avatar
Atrament
Člen
Avatar
Odpovídá na Jaro
Atrament:

Takové zadání si žádá i něco víc než se jenom 'porozprávať' s dotyčným :) Ale utěšuju se v duchu představou, že tím dotyčný něco sleduje - třeba jako názorně studentům ukázat, jak strašná prasárna to je :)

 
Nahoru Odpovědět  +3 23. ledna 10:21
Avatar
Kafac
Člen
Avatar
Odpovídá na Atrament
Kafac:

Snad jo :D, doufám, že nám příště řekne: "A takhle už to nikdy dělat nebudem" :D :D

Nahoru Odpovědět 23. ledna 16:56
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Jiří Hlavík
Redaktor
Avatar
Jiří Hlavík:

Velmi pochybuji, že zadávající něco sleduje :D ha ha.. Vidím to na středoškolského "učitele".. Raději se nebudu moc rozepisovat, abych někoho neurazil.. :D také bych byl vělice zvědav, o koho jde.. A také bych si s dotyčným rád promluvil :D.. Na spoustě sš jsem viděl, že učitelé byli zvyklí cpát do žáků myšlenku, že je vše dobré tlačit do mainu ;).

Edit: K původnímu dotazu.. bylo toho už řečeno dost a nerad bych něco opakoval ;) v podstatě souhlasím s atramentem.

Editováno 23. ledna 17:14
 
Nahoru Odpovědět 23. ledna 17:13
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.