Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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: hodnocení

Aktivity
Avatar
Erik Báča
Člen
Avatar
Erik Báča:9.1.2016 11:47

Ahoj, začínám s programováním a vymyslel jsem si takovou konzolovou hru, ještě to chce hodně práce, ale už jsem něco vytvořil a chtěl bych na to slyšet váš názor. Co si o tom myslíte?

import java.util.Scanner;
public class hra {


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



                System.out.println("Znáte pravidla hry?");
                String volba1 = 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.");



                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 = Integer.parseInt(sc.nextLine());



                if (mod == 1)
                {

                }



                if (mod == 2)
                {
                        int zmena = 0;

                        if (zmena == 0)
                        {
                                int vysledek = 0;
                                while ((vysledek < 25) && (vysledek >= 0))
                                {
                                        System.out.println("HRÁČ 1");
                                        System.out.println("Kolik sirek chcete odebrat?");
                                        int volba2 = Integer.parseInt(sc.nextLine());


                                        if (volba2 == 1)
                                        {
                                                vysledek = vysledek + 1;
                                        }


                                        if (volba2 == 2)
                                        {
                                                vysledek = vysledek + 2;
                                        }


                                        if (volba2 == 3)
                                        {
                                                vysledek = vysledek + 3;
                                        }


                                        if (vysledek == 26)
                                        {
                                                vysledek = vysledek - 1;
                                        }


                                        if (vysledek == 27)
                                        {
                                                vysledek = vysledek - 2;
                                        }


                                        int mezivypocet = 25 - vysledek;
                                        System.out.println("Ještě zbývá: " + mezivypocet + " sirek");


                                        if (mezivypocet == -1)
                                        {
                                                mezivypocet = mezivypocet + 1;
                                        }


                                        if (mezivypocet == -2)
                                        {
                                                mezivypocet = mezivypocet + 2;
                                        }


                                        if (mezivypocet == 0)
                                        {
                                                System.out.println("Hráč 2 vyhrává");
                                                mezivypocet = mezivypocet + 25;
                                        }


                                        else
                                        {
                                                System.out.println("HRÁČ 2");
                                                System.out.println("Kolik sirek chcete odebrat?");
                                                int volba3 = Integer.parseInt(sc.nextLine());


                                                if (volba3 == 1)
                                                {
                                                        vysledek = vysledek + 1;
                                                }


                                                if (volba3 == 2)
                                                {
                                                        vysledek = vysledek + 2;
                                                }


                                                if (volba3 == 3)
                                                {
                                                        vysledek = vysledek + 3;
                                                }


                                                if (vysledek == 26)
                                                {
                                                        vysledek = vysledek - 1;
                                                }


                                                if (vysledek == 27)
                                                {
                                                        vysledek = vysledek - 2;
                                                }


                                                int mezivypocet2 = 25 - vysledek;
                                                System.out.println("Ještě zbývá: " + mezivypocet2 + " sirek");


                                                if (mezivypocet2 == -1)
                                                {
                                                        mezivypocet = mezivypocet + 1;
                                                }


                                                if (mezivypocet2 == -2)
                                                {
                                                        mezivypocet = mezivypocet + 2;
                                                }


                                                if (mezivypocet2 == 0){
                                                        System.out.println("Hráč 1 vyhrává");
                                                        mezivypocet = mezivypocet + 25;
                                                }
                                        }
                                }
                        }
                }



                if ((mod != 1) && (mod != 2))
                {
                        System.out.println("Neplatná volba");
                }

        }

}
Odpovědět
9.1.2016 11:47
Když mi dáš mínus, napiš proč!
Avatar
Richard H.
Tvůrce
Avatar
Odpovídá na Erik Báča
Richard H.:9.1.2016 11:52

Pěkné sice to nepoužívá objekty ale k těm jsi si pravděpodobně ještě nedostal.

Nahoru Odpovědět
9.1.2016 11:52
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Avatar
Odpovídá na Erik Báča
Michal Haňáček:9.1.2016 11:54

Ahoj mno, ono není moc co hodnotit. Je tady vidět hromada povětšinou prázdných podmínek, z toho některé jsou zbytečné viz např.

int zmena = 0;

                        if (zmena == 0)
                        { ... }

tahle podmínka ti přeci vždycky vyjde ...

Nahoru Odpovědět
9.1.2016 11:54
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Erik Báča
Člen
Avatar
Odpovídá na Michal Haňáček
Erik Báča:9.1.2016 12:01

Tu tam mám, protože se snažím vymyslet jak to udělat aby se pokaždé hře střídalo, který hráč bude začínat (samozřejmě tam bude ještě while cyklus, jestli chtějí hrát další hru a zkoušel jsem to udělat tak, že jsem to celé zkopíroval, jenom jsem otočil hráče 1 a hráče 2 aby začínal ten druhý a nakonec jsem tam dal zmena = zmena + 1; a nakonec toho kdy začíná druhý hráč jsem dal zase zmena = zmena - 1; ale pak jsem si řekl, že to musí jít vymyslet lepším způsobem :D

Nahoru Odpovědět
9.1.2016 12:01
Když mi dáš mínus, napiš proč!
Avatar
Erik Báča
Člen
Avatar
Odpovídá na Richard H.
Erik Báča:9.1.2016 12:02

Ne zatím jsem teprve u základních konstrukcí.

Nahoru Odpovědět
9.1.2016 12:02
Když mi dáš mínus, napiš proč!
Avatar
Atrament
Tvůrce
Avatar
Atrament:9.1.2016 12:24

Máš tam různé zbytečnosti. Například

int zmena = 0;

if (zmena == 0)

přitom tam s tou proměnnou zmena pak nic nikde neděláš, navíc ta podmínka bude vždycky true, takže je vlastně zbytečná.

Dále ty ify při odebráni sirky a vůbec ty čachry s vysledek a mezisoucet jsou taky zbytečné. Měj místo vysledek a mezisoucet jenom proměnnou třeba aktualniStav, kde budeš mít uloženej aktuální počet sirek. Potom místo

if (volba2 == 1)
    {
        vysledek = vysledek + 1;
     }


if (volba2 == 2)
   {
     vysledek = vysledek + 2;
    }


if (volba2 == 3)
  {
     vysledek = vysledek + 3;
  }
...

bys měl akorát

aktualniStav = aktualniStav - volba2;

Obdobně bys to pak měl u hráče 2.

Samozřejmostí by mělo být testování každého uživatelského vstupu, zda uživatel opravdu zadal to co se po něm chce.

int volba2 = Integer.parseInt(sc.nextLine());
if ((volba2>=1) && (volba2<=3))
{
  //uživatel zadal správný počet, takže může hrát
  aktualniStav = aktualniStav - volba2;
}
else
{
  //vynadejme uživateli, že zadává kraviny :)
}

No a jak píše Richard výše - moc pěkné by bylo, kdybys to udělal objektově :)

 
Nahoru Odpovědět
9.1.2016 12:24
Avatar
Erik Báča
Člen
Avatar
Erik Báča:17.1.2016 22:17

Tak jsem to upravil (já vím trvalo mi to :D, není to můj jediný projekt), nějak takhle teda? A nenapadá vás jak bych to mohl udělat, aby vždycky začínal jiný hráč?

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 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("HRÁČ 1");
                                        System.out.println("Kolik sirek chcete odebrat?");
                                        int volba2 = Integer.parseInt(sc.nextLine());


                                        aktualniStav = aktualniStav - volba2; // počítá kolik sirek hráči odebrali
                                        if ((volba2 > 3) && (volba2 < 1)) // zamezuje podvádění
                                        {
                                                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("Hráč 2 vyhrávává");
                                                System.out.println("Chcete hrát novou hru?");
                                                pokracovat = sc.nextLine();
                                        }


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


                                                aktualniStav = aktualniStav - volba3; // počítá kolik sirek hráči odebrali
                                                if ((volba3 > 3) && (volba3 < 1)) // zamezuje podvádění
                                                {
                                                        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("Hráč 2 vyhrává");
                                                        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");
                }

        }

}
Nahoru Odpovědět
17.1.2016 22:17
Když mi dáš mínus, napiš proč!
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.