NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: need help

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

Aktivity
Avatar
Erik Báča
Člen
Avatar
Erik Báča:18.1.2016 17:58

Ahoj, potřeboval bych poradit, mám hotovou část konzolové hry, a potřeboval bych nějak udělat, aby po každé hře začínal druhý hráč, nebo aby vždycky začínal hráč co prohrál (je to jedno), sám jsem vymyslel tohle, ale když vyhraje 1 hráč 2x po sobě tak začíná ten co vyhrál (vím proč, ale nevím jak to změnit)

import java.util.Scanner;
public class gejmz {


        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);


                // vysvětlení pravidel
                System.out.println("Znáte pravidla hry?");
                String volba1 = "ano"; //nahradit za sc.nextLine();
                if (volba1.equals("ne"))
                        System.out.println("Na stole leží 25 sirek, hráči se střídají v odebírání sirek ze stolu, v jednom kole může hráč odebrat maximálně 3 sirky, prohrává ten kdo si vezme poslední sirku.");


                // výběr módu
                System.out.println("Chcete hrát proti počítači, nebo proti jinému hráči?");
                System.out.println("1 - CPU");
                System.out.println("2 - Hráč");
                int mod = 2; //nahradit za sc.nextLine();


                // mód proti počítači
                if (mod == 1)
                {

                }


                // mód proti jinému hráči
                if (mod == 2)
                {


                        String hrac2 = "HRÁČ 2";
                        String hrac2v = "Hráč 2 vyhrává";
                        String hrac1 = "HRÁČ 1";
                        String hrac1v = "Hráč 1 vyhrává";


                        String pokracovat = "ano";
                        while (pokracovat.equals("ano")) //cyklus pro možnost opakování hry bez nutnosti restartovat hru
                        {

                                int aktualniStav = 25;
                                while ((aktualniStav <= 25) && (aktualniStav > 0))
                                {

                                        System.out.println(hrac1);
                                        System.out.println("Kolik sirek chcete odebrat?");
                                        int volba2 = Integer.parseInt(sc.nextLine());


                                        if ((volba2 < 4) && (volba2 > 0)) // zamezuje podvádění
                                        {
                                                aktualniStav = aktualniStav - volba2; // počítá kolik sirek hráči odebrali
                                        }
                                        else // když hráč podvádí...
                                        {
                                                        System.out.println("neplatná volba");
                                        }

                                        if (aktualniStav == -1)
                                                aktualniStav = aktualniStav + 1;

                                        if (aktualniStav == -2)
                                                aktualniStav = aktualniStav + 2;


                                        System.out.println("Ještě zbývá " + aktualniStav + " sirek"); // výpis pro hráče


                                        if (aktualniStav == 0) // když už známe vítěze
                                        {
                                                System.out.println(hrac2v);

                                                hrac1 = hrac1.replace("HRÁČ 2", "HRÁČ 1");
                                                hrac1v = hrac1v.replace("2", "1");
                                                hrac2 = hrac2.replace("HRÁČ 1", "HRÁČ 2");
                                                hrac2v = hrac2v.replace("1", "2");


                                                System.out.println("Chcete hrát novou hru?");
                                                pokracovat = sc.nextLine();

                                        }


                                        else // když zatím nikdo nevyhrál, hraje další hráč
                                        {
                                                System.out.println(hrac2);
                                                System.out.println("Kolik sirek chcete odebrat?");
                                                int volba3 = Integer.parseInt(sc.nextLine());


                                                if ((volba3 < 4) && (volba3 > 0)) // zamezuje podvádění
                                                aktualniStav = aktualniStav - volba3; // počítá kolik sirek hráči odebrali
                                                else // když hráč podvádí...
                                                {
                                                        System.out.println("neplatná volba");
                                                }


                                                if (aktualniStav == -1)
                                                        aktualniStav = aktualniStav + 1;

                                                if (aktualniStav == -2)
                                                        aktualniStav = aktualniStav + 2;


                                                System.out.println("Ještě zbývá " + aktualniStav + " sirek"); // výpis pro hráče


                                                if (aktualniStav == 0) // když už známe vítěze
                                                {
                                                        System.out.println(hrac1v);


                                                        hrac1 = hrac1.replace("HRÁČ 1", "HRÁČ 2");
                                                        hrac1v = hrac1v.replace("1", "2");
                                                        hrac2 = hrac2.replace("HRÁČ 2", "HRÁČ 1");
                                                        hrac2v = hrac2v.replace("2", "1");


                                                        System.out.println("Chcete hrát novou hru?");
                                                        pokracovat = sc.nextLine();
                                                }


                                        }
                                }
                        }
                }



                if ((mod != 1) && (mod != 2)) // žádný jiný mód zatím neexistuje
                {
                        System.out.println("Neplatná volba");
                }

        }

}
Odpovědět
18.1.2016 17:58
Když mi dáš mínus, napiš proč!
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Atrament:21.1.2016 0:15

Řekl bych, že jsi dospěl přesně do toho okamžiku, kdybys měl sednout k nějakým tutoriálům nebo knize o objektově orientovaném programování, pořádně si to prostudovat a pak to v tom duchu přespat. Sám vidíš, že takto - všechno v jedné metodě - se moc dál pokračovat nedá, aniž by ses z toho zbláznil :) Jenom z toho množství ifů mně přecházejí oči :)

 
Nahoru Odpovědět
21.1.2016 0:15
Avatar
Erik Báča
Člen
Avatar
Odpovídá na Atrament
Erik Báča:21.1.2016 11:47

Už se na to chystám (y)

Nahoru Odpovědět
21.1.2016 11:47
Když mi dáš mínus, napiš proč!
Avatar
Odpovídá na Erik Báča
Neaktivní uživatel:21.1.2016 19:19

Jejda sirky, to má na svědomí Stloukal, co? :D

Nahoru Odpovědět
21.1.2016 19:19
Neaktivní uživatelský účet
Avatar
Erik Báča
Člen
Avatar
Erik Báča:21.1.2016 20:26

Yep, já to programování s ním moc neřeším, ale řekl mi abych něco podobnýho udělal tak proč ne, ale teď mě hrozně dostal, když jsme po půl roce vývojových diagramů začali dělat něco v Basicu, 1. hodinu jsme se snažili spustit visual studio ( nakonec se to povedlo půlce) a 2. hodinu jsme si ukázali pár jednoduchých příkazů, potom nám chtěl ukázat něco složitějšího, ale nešlo mu to a tak hledal v nápovědách a používal ctrl - c, ctrl - v, u těch příkazů nám nic nevysvětlil a řekl nám, že když nebudeme vědět co dělá nějakej příkaz, tak na něj najedeme a zmáčkneme F1, takže mám strach, že ty hodiny budou jenom o tom naučit se nazpaměť nějaký algoritmy a bude nám to k ničemu..... :D

Nahoru Odpovědět
21.1.2016 20:26
Když mi dáš mínus, napiš proč!
Avatar
Odpovídá na Erik Báča
Neaktivní uživatel:21.1.2016 21:12

On dělá hlavně ty algoritmy, programování je až potom v druháku :)

// Ale to už je offtopic :D

Editováno 21.1.2016 21:13
Nahoru Odpovědět
21.1.2016 21:12
Neaktivní uživatelský účet
Avatar
Odpovídá na Erik Báča
Neaktivní uživatel:21.1.2016 21:15

Jednoduše by to šlo udělat takto:
Pro lepší "přehlednost" si můžeš od uživatele vytáhnout jméno. Na konci si do další proměnné uložíš jméno hráče, který prohrál, a pak jen vypíšeš Na tahu je hráč X.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
21.1.2016 21:15
Neaktivní uživatelský účet
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.