Textový projekt 1

Najskôr si ukážme riešenie tohto problému v textovom režime. Otvoríme BlueJ, vytvoríme nový projekt, importujeme triedu Vstupvytvoríme novú triedu VlkKozaKapusta, ktorú odvodíme od triedy Vstup. Triedou Vstup sa podrobnejšie zaoberať nebudeme, je k dispozícii v prílohách tejto kapitoly. Vyčistite a upravte triedu VlkKozaKapusta do nasledujúceho stavu:

public class VlkKozaKapusta extends Vstup
{
    private VlkKozaKapusta()
    {
      
    }
 
    public static void main(String[] args)
    {
        new VlkKozaKapusta();
    }
}

Zo šablóny sme vymazali všetky komentáre (pre jednoduchosť, inak takýto postup neodporúčame) a zostala trieda, ktorá obsahuje iba konštruktor a hlavnú metódu. Hlavná metóda obsahuje jediný riadok – vytvorenie inštancie tejto triedy. Trieda má súkromný konštruktor, ten budeme považovať za vstupný bod programu.

Keďže budeme pracovať v textovom režime, vystačíme si s jednoduchými definíciami. Potrebujeme vytvoriť údajové štruktúry a definovať premenné, ktoré budú reprezentovať všetky stavy hry. Aktuálne stačí, ak si zapamätáme to, čo sa nachádza na jednotlivých brehoch rieky a pozíciu prievozníka. Na reprezentovanie obsahu brehov môžeme použiť dve jednoduché trojprvkové polia, ktoré môžeme hneď naplniť týmto spôsobom:

String[] ľavýBreh  = {"nič", "nič", "nič"};
String[] pravýBreh = {"vlk", "koza", "kapusta"};

V rámci dodržania dobrých programátorských návykov definujeme tieto polia ako súkromné a môžeme im priradiť aj modifikátor „finálny“, ktorý bude vypovedať o tom, že polia zostanú počas behu také, ako sme ich definovali prvýkrát – trojprvkové, pričom obsah jednotlivých prvkov stále môžeme meniť. Dostávame:

private final String[] ľavýBreh  = {"nič", "nič", "nič"};
private final String[] pravýBreh = {"vlk", "koza", "kapusta"};

Polohu prievozníka, keďže je iba dvojstavová (pravý alebo ľavý breh), môžeme definovať pomocou booleovskej premennej:

private boolean prievozníkJeNaPravomBrehu = true;

Teraz by sme mali definovať metódu, ktorá tieto premenné využije na výpis aktuálneho stavu hry, ktorý budeme musieť neustále vypisovať, aby sme pomohli predstavivosti hráča. Metódu definujeme ako súkromnú. Nazveme ju jednoducho – vypíšStav:

private void vypíšStav()
{
 
}

Do tela metódy vložíme kód, ktorý doslova „skonštruuje“ stav hry. Najprv vypíšeme obsah ľavého brehu. Všimnite si, že zatiaľ používame iba metódu System.out.print, ktorá zachováva výpis v jednom riadku. Na výpis všetkého, čo sa nachádza na ľavom brehu, budeme potrebovať využiť nielen pole ľavýBreh, ale i premennú prievozníkJeNaPravomBrehu, pretože aj polohu prievozníka musíme vhodným spôsobom oznámiť hráčovi.

Na výpis prvkov poľa použijeme cyklus for, v rámci ktorého odfiltrujeme iba zmysluplné položky, teda všetko okrem prázdneho "nič". Spolu s výpisom prítomnosti prievozníka a výpisom úvodného textu získame takýto kód:

System.out.print("\nNa ľavom brehu je: ");
 
if (!prievozníkJeNaPravomBrehu)
{
    System.out.print(" [prievozník]");
}
 
for (int = 0; < ľavýBreh.length; ++i)
{
    if (!ľavýBreh[i].equals("nič"))
    {
        System.out.print(" " + ľavýBreh[i]);
    }
}

Čiže, ak prievozník nie je na pravom brehu, je automaticky na ľavom a vypíšme ho tam. Za ním sa vo výpise objaví každá položka, ktorá sa nerovná reťazcu "nič" (čiže buď vlk, koza, alebo kapusta). Na začiatku bude výpis prázdny, pretože všetko sa spočiatku nachádza na pravom brehu, no neskôr môže vyzerať napríklad takto:

Na ľavom brehu je:  [prievozník] koza

Podobným spôsobom vytvoríme aj výpis pravého brehu a na konci metódy môžeme zavolať príkaz System.out.println, ktorým odriadkujeme výpis pravého brehu. Mali by sme zabezpečiť, aby aj jednotlivé brehy boli vypísané na samostatných riadkoch. Môžeme to zabezpečiť napríklad znakovou entitou \n (pozri prvý riadok kódu na výpis ľavého brehu) umiestnenou na začiatok úvodného textu pre pravý breh.

Metódu nesmieme zabudnúť zavolať, pretože bez volania metódy, akoby ani nejestvovala. Volanie môžeme umiestniť do konštruktora, ktorý bude po tejto jednoduchej úprave vyzerať takto:

private VlkKozaKapusta()
{
    vypíšStav();
}

Ak budete postupovať správne, prvý výpis po skompilovaní a spustení programu, bude vyzerať takto (vrátane vynechaného prvého riadka):

 
Na ľavom brehu je:
Na pravom brehu je: [prievozník] vlk koza kapusta

Ak by ste si predsa len nevedeli dať rady s poskladaním príkladu, skompletizovanú verziu nájdete v prílohe.

Príloha 3 – úvodná fáza textového projektu

Zobraziť | Prevziať