IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Programujeme jednoduchou hru v Javě: Logik

V dnešním tutoriálu si ukážeme jak naprogramovat hru Logik jen se znalostí základních konstrukcí jazyka Java.

Pokud hru někdo nezná - Jedná se o logickou hru, kde je cílem uhodnout čtyřmístné číslo (ve skutečnosti se hádají barvy, ale pro jednoduchost budeme brát v úvahu jen čísla).

Pro začátek by bylo vhodné si definovat proměnnou, která v sobě bude obsahovat kolik pozic bude mít hledaná kombinace čísel, to bude proměnná pocetCisel. Na několika místech se totiž budeme na tuto proměnou odkazovat, navíc bude jednoduché hru "oživit" přidáním dalších pozic.

int pocetCisel = 4;

Nyní víme, jak má být číslo velké, proto si ho již můžeme vytvořit. Pro přesnost použijeme pole čísel cislo. Použijeme k tomu for cyklus s metodou Math.random(), kterou vynásobíme 10, aby se objevovaly cifry 0 až 9, pokud chcete hru trochu ulehčit, můžete metodu vynásobit menším číslem. Metoda nám vrací double, proto ji přetypujeme na int.

int cislo[] = new int[pocetCisel];
for(int i=0;i<pocetCisel;i++)
    cislo[i]=(int)(Math.random()*10);

Máme připravené hledané číslo, nyní si přichystáme pomocné proměnné. Budou to vstup, do které budeme načítat pokus uživatele, presne, která bude reprezentovat počet cifer, které jsou správné a správně umístěné, dále pak priblizne, která bude uchovávat počet cifer, které jsou s porovnáním se vstupem v proměnné cislo, ale na špatné pozici. Nakonec si jen přidáme instanci Scanneru.

String volba;
int presne = 0;
int priblizne = 0;
Scanner sc = new Scanner(System.in,"UTF-8");

Řídící cyklus

Řídící cyklus bude ovládat celou naši hru. Jelikož je to logická hra a žádná typovačka, použijeme for cyklus s 10 průběhy pro 10 pokusů.

for(int a=0; a<10; a++)
{
    ...
}

Na začátku každého průběhu se uživatele zeptáme na kombinaci, kterou následně načteme do volba. Pro případ špatného vstupu uživatele přidáme na konec pár mezer. Dále vynulujeme proměnné presne a priblizne.

System.out.printf("Zadejte další kombinaci: ");
volba = sc.nextLine()+ "      ";
presne = priblizne = 0;

Už známe typovací kombinaci, můžeme tedy začít porovnávat. Jelikož potřebujeme porovnat každou cifru, použijeme opět for cyklus s počtem opakování roven pocetCisel.

for(int i=0; i<pocetCisel; i++)
{
    ...
}

Do něj vložíme podmínku, jestli cifra v proměnné číslo na i. pozici je rovna cifře na i. pozici vstupu. Pokud ano, přičteme do presne jedničku. Pokud ne, pokračujeme v else.

if (cislo[i] == volba.charAt(i) - 48)
    presne++;
else
{
    ...
}

Zde budeme porovnávat každou cifru v cislo s každou cifrou ve vstup. Proto potřebujeme for cyklus opět s počtem opakování roven pocetCisel. V něm bude podobná podmínka, jaká byla při ověřování přesnosti. Zde ale budeme porovnávat v cislo cifru na i. pozici a ve vstup na j. pozici. Platí-li podmínka, přičteme jedničku do priblizne a ukončíme cyklus. Docílíme toho tím, že j bude vyšší číslo, než jaké je uvedeno v podmínce cyklu.

for(int j=0;j<pocetCisel;j++)
{
    if(cislo[i]==volba.charAt(j)-48)
    {
        priblizne++;
        j = 10;
    }
}

Nyní vyskočíme zpět do řídícího cyklu a přidáme podmínku pro výhru. Přesněji pokud presne je rovno pocetCisel. Pokud podmínka platí, vypíšeme zprávu s výhrou a ukončíme cyklus podobně jako před chvílí. Jinak vypíšeme stav aktuální kombinace ku hledanému číslu.

if (presne == pocetCisel)
{
    System.out.println("Gratuluji, vyhrál jste!");
    a = 10;
}
else
    System.out.printf("Správně: %d, přibližně: %d\n\n",presne, priblizne);

Nakonec našeho programu, až za řídící cyklus, vložíme podobnou podmínku s tím rozdílem, že bude negovaná. Bude sloužit pro vypsání prohry. Samozřejmě tam přidáme i výpis hledaného čísla a to pomocí for each cyklu.

if(presne!=pocetCisel)
{
    System.out.printf("Prohra! Hledaná kombinace byla: ");
    for (int i:cislo)
        System.out.printf("%d", i);
}

Nyní máme všechno hotové a můžeme si ji vyzkoušet. Určitě ji můžete všelijak upravit → změnit počet pokusů, změnit počet cifer hledané kombinace nebo zmenšit číslo, které se může objevovat v kombinaci.

Hra logik v Javě - Zdrojákoviště Java - Základní konstrukce

Pokud jste něčemu nerozuměli nebo něco vám nefunguje, můžete si aplikaci pod článkem stáhnout.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 405x (18.7 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Všechny články v sekci
Zdrojákoviště Java - Základní konstrukce
Článek pro vás napsal Contrix
Avatar
Uživatelské hodnocení:
12 hlasů
Autor se věnuje programovaní v jazyce Java, ale nepohrdne tvorbou jednodušších webových stránek.
Aktivity