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


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.
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 ...
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
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ě
Tak jsem to upravil (já vím trvalo mi to , 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");
}
}
}
Zobrazeno 7 zpráv z 7.