IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Java pomoc

Aktivity
Avatar
Kafac
Člen
Avatar
Kafac:22.1.2016 11:30

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.1.2016 11:30
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Atrament
Tvůrce
Avatar
Atrament:22.1.2016 12:38

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
22.1.2016 12:38
Avatar
Kafac
Člen
Avatar
Odpovídá na Atrament
Kafac:22.1.2016 15:37

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.1.2016 15:37
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Jaro
Člen
Avatar
Odpovídá na Kafac
Jaro:22.1.2016 17:39

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
22.1.2016 17:39
“What would you do if you were 100% sure you couldn’t fail?”
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Jaro
Atrament:23.1.2016 10:21

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
23.1.2016 10:21
Avatar
Kafac
Člen
Avatar
Odpovídá na Atrament
Kafac:23.1.2016 16:56

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.1.2016 16:56
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Jiří Frank
Tvůrce
Avatar
Jiří Frank:23.1.2016 17:13

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.1.2016 17:14
 
Nahoru Odpovědět
23.1.2016 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.