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.