Diskuze: Znovu souboj 1vs1.
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

					Člen				
			
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj, než to začneš spojovat, tak si přečti pořádně základy OOP. Vím, že v PPA1 se to nejspíš moc nebere, ale bez toho moc dobře napsat nedá.
while (bojovnik1.nazivu() && bojovnik2.nazivu()) {
        bojovnik1.utoc(bojovnik2);
        vykresli();
        vypisZpravu(bojovnik1.vratPosledniZpravu()); // zpráva o útoku
        vypisZpravu(bojovnik2.vratPosledniZpravu()); // zpráva o obraně
        bojovnik2.utoc(bojovnik1);
        vykresli();
        vypisZpravu(bojovnik2.vratPosledniZpravu()); // zpráva o útoku
        vypisZpravu(bojovnik1.vratPosledniZpravu()); // zpráva o obraně
        System.out.println();
    }
Tohle je kus kódu z místního tutoriálu, kde také spolu bojují dva protivníci. Zkus se na to podívat.
Mrknu na to. Děkuju ti za rady. 
 Teď si musím dát pauzu a třeba na to za hodinku mrknu a řeknu si
co jsem to tu udělal 
Každopádně, ještě jednou děkuji 
Ahoj, potřeboval bych poradit. Jsem úplně zaseklej při tom samém.
Hledám a hledám, ale nějak se nemůžu dostat dál. Nevím jak mám volat ty
metody z jiných tříd se scannerem nejdříve z tříd do té hlavní a pak do
main. Jestli pak v Main vytvořit znovu Scanner nebo jak. Takže bych ocenil
ještě větší popostrčení 
Ahoj.
Vzal jsem zadaní toho úkolu a napsal to přesně tak jak je to tam napsané.
Krok po kroku. A pokud jsi dodržel zadání i v názvech metod, měla by ti
fungovat následující metoda main
public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       // zadas prvni postavu
       Postava postava1 = nactiPostavu(sc);
       // zadas zbrane pro prvni postavu
       Zbran pravaZbranPostava1 = nactiZbran(sc);
       Zbran levaZbranPostava1 = nactiZbran(sc);
       // vyzbrojis prvni postavu
       vyzbrojPostavu(postava1, levaZbranPostava1, pravaZbranPostava1);
       // zadas druhou postavu
       Postava postava2 = nactiPostavu(sc);
       // zadas zbrane pro druhou postavu
       Zbran pravaZbranPostava2 = nactiZbran(sc);
       Zbran levaZbranPostava2 = nactiZbran(sc);
       // vyzbrojis druhou postavu
       vyzbrojPostavu(postava2, levaZbranPostava2, pravaZbranPostava2);
       //spustis souboj
       Postava vitez = souboj(postava1, postava2);
       //vypises viteze
       System.out.println("Vitez: " + vitez.toString());
   }
					V případě že ti něco nefunguje pravděpodobně jsi nedodržel zadání. Ale je taky možné že v tom mám chybu já. Každopádně by jsi si mohl ruční zadávání nahradit následujícím codem (nahradit obsah metody main) a tím si urychlit vývoj.
public static void main(String[] args) {
        Postava postava1 = new Postava("Thorygg", 5, 3, 80);
        postava1.vezmiZbran(Ruka.LEVA, new Zbran("Tezky Mec", 15, 2));
        Postava postava2 = new Postava("Vlk", 10, 10, 30);
        Postava vitez = souboj(postava1, postava2);
        System.out.println("Vitez: " + vitez);
}
					
						Já mám tedy teď spíš problém u souboje.
Mám tohle
while(postava1.jeZiva()&&postava2.jeZiva())
                postava1.zautoc(postava2);
                postava2.branSe(utok);
                if(postava2.jeZiva()) {
                        postava2.zautoc(postava1);
                }
mám ale podtrhnutý zautoc a u BranSe(utok) mám podtržený právě ten
útok.
Co s tím ?
Bys mohl treba dat opraveny kod. Tu chybu neni ted s cim porovnat. Tak to
bude asi tezke.
Zautoc je asi podtrzene proto, ze takovy nazev se tam nevyskytuje (male velke
pismenka by to melo uvazovat jako rozdilne znaky). Pripadne v tom kodu nahore
jsem teda zautoc po chvili nasel. No, vraci to int jako navratovou hodnotu,
kterou ale nikde neukladas. Mozna, to mu vadi. Tak tam nic nevracej z te
funkce.
Utok je podtrzeny asi proto, ze takova promena neexistuje. Mozna to melo byt
spis postava1.utok nebo getUtok().
int zautoc() - Vrátí celkovou útočnou sílu (tj. včetně útočné síly držených zbraní).
int branSe(int utok) - Metoda vrátí množství ubraného zdraví.
No v podstatě jsi si odpověděl. Metoda int zautoc() vraci útočnou sílu ale nepřebíra zádný argument. Což ale ty děláš.
postava1.zautoc(postava2);
To je taky důvod proč máš podtržené to zautoc.
Proč je podtržený útok bylo již vysvětleno výše.
Utok je podtrzeny asi proto, ze takova promena neexistuje.
A možná oprava:
//zjistiš si útok postavy1
int utokPostavy1 = postava1.zautoc();
//zautočíš tímto útokem na postavu2
postava2.branSe(utokPostavy1);
//kontrola jestli postava2 prežila útok postavy1
if( !postava2.jeZiva() ) {
        //pokud ne vratíš postavu jedna jako víteze
        return postava1;
}
// tady bude následovat útok postavy2 na postavu1 (v podastatě to samé jen prohodíš
// postavy
					Včera večer jsem to s ním docela podrobně řešil. Kód jsme museli dost upravit. Výsledné řešení sem asi dávat nebude, protože se jedná o domácí úkol.
Aha 
 v tom případě by se
toto vlákno mohlo uzavřít.
Zobrazeno 12 zpráv z 12.