Diskuze: hodnocení
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 7 zpráv z 7.
//= 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.
Pěkné sice to nepoužívá objekty ale k těm jsi si pravděpodobně ještě nedostal.
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 ...
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.