Príloha 6 – finálna fáza textového projektu

Prevziať

public class VlkKozaKapusta extends Vstup
{
    private final String[] ľavýBreh  = {"nič", "nič", "nič", "nič"};
    private final String[] pravýBreh = {"vlk", "koza", "kapusta", "nič"};
    private boolean prievozníkJeNaPravomBrehu = true;
 
    private VlkKozaKapusta()
    {
        String príkaz;
 
        System.out.println("Vitajte!");
        vypíšPravidlá();
 
        do {
            príkaz = načítajReťazec("Čo má prievozník previezť?");
 
            if (príkaz.equalsIgnoreCase("pravidlá"))
            {
                vypíšPravidlá();
            }
            else if (!príkaz.equalsIgnoreCase("koniec"))
            {
                prevez(príkaz);
                vypíšStav();
 
                if (niektoNiekohoZožral())
                {
                    break;
                }
                else if (hraSkončila())
                {
                    System.out.println("Hotovo! Blahoželám!");
                    break;
                }
            }
 
        } while (!príkaz.equalsIgnoreCase("koniec"));
 
        System.out.println("Dovidenia!");
    }
 
    private void vypíšPravidlá()
    {
        System.out.println();
        System.out.println("Prievozník vlastní plť, na ktorej prevezie okrem " +
            "seba maximálne jedného ");
        System.out.println("pasažiera. Jedného dňa sa ocitol v situácii, keď " +
            "mal bezpečne previezť ");
        System.out.println("na druhý breh rieky neobvyklú trojicu " +
            "pasažierov. Vlka, kozu a kapustu. ");
        System.out.println("Vlk má chuť na kozu, avšak kapusta, ktorá ich " +
            "sprevádza, je zázračná – ");
        System.out.println("dokáže kozu pred vlkom ochrániť. To síce koza " +
            "vie, len čo sa však ");
        System.out.println("ocitne s kapustou sama, podľahne pokušeniu " +
            "a zožerie ju. Prievozník ");
        System.out.println("sám je tiež autorita, takže v jeho " +
            "bezprostrednej blízkosti nezje ani ");
        System.out.println("vlk kozu, ani koza kapustu. Problém teda je, " +
            "že sa na jednom brehu rieky ");
        System.out.println("nesmú ocitnúť osamote vlk s kozou, ani koza " +
            "s kapustou. V akom poradí ");
        System.out.println("ich previezť?");
        System.out.println();
        System.out.println("Ak chcete, aby prievozník na druhú stranu nič " +
            "nepreviezol, zadajte „nič“.");
        System.out.println("Opätovný výpis týchto pravidiel získate príkazom " +
            "„pravidlá“.");
        System.out.println("Na predčasné ukončenie hry zadajte „koniec“.");
        System.out.println("Veľa šťastia!");
        vypíšStav();
    }
 
    private void vypíšStav()
    {
        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]);
            }
        }
 
        System.out.print("\nNa pravom brehu je: ");
 
        if (prievozníkJeNaPravomBrehu)
        {
            System.out.print(" [prievozník]");
        }
 
        for (int = 0; < pravýBreh.length; ++i)
        {
            if (!pravýBreh[i].equals("nič"))
            {
                System.out.print(" " + pravýBreh[i]);
            }
        }
 
        System.out.println();
    }
 
    private int nájdiNaPravomBrehu(String čo)
    {
        for (int = 0; < pravýBreh.length; ++i)
        {
            if (čo.equalsIgnoreCase(pravýBreh[i])) return i;
        }
 
        return -1;
    }
 
    private int nájdiNaĽavomBrehu(String čo)
    {
        for (int = 0; < ľavýBreh.length; ++i)
        {
            if (čo.equalsIgnoreCase(ľavýBreh[i])) return i;
        }
 
        return -1;
    }
 
    private void prevez(String čo)
    {
        if (prievozníkJeNaPravomBrehu)
        {
            int = nájdiNaPravomBrehu(čo);
            int = nájdiNaĽavomBrehu("nič");
 
            if (== -1)
            {
                System.out.println("Na ľavom brehu nie je " + čo + ".");
            }
            else if (== -1)
            {
                System.out.println("Na pravom brehu nie je voľné miesto.");
            }
            else
            {
                ľavýBreh[j] = pravýBreh[i];
                pravýBreh[i] = "nič";
                prievozníkJeNaPravomBrehu = !prievozníkJeNaPravomBrehu;
            }
        }
        else
        {
            int = nájdiNaĽavomBrehu(čo);
            int = nájdiNaPravomBrehu("nič");
 
            if (== -1)
            {
                System.out.println("Na pravom brehu nie je " + čo + ".");
            }
            else if (== -1)
            {
                System.out.println("Na ľavom brehu nie je voľné miesto.");
            }
            else
            {
                pravýBreh[j] = ľavýBreh[i];
                ľavýBreh[i] = "nič";
                prievozníkJeNaPravomBrehu = !prievozníkJeNaPravomBrehu;
            }
        }
    }
 
    private boolean jeNaĽavomBrehu(String čo)
    {
        for (int = 0; < ľavýBreh.length; ++i)
        {
            if (čo.equalsIgnoreCase(ľavýBreh[i])) return true;
        }
 
        return false;
    }
 
    private boolean niektoNiekohoZožral()
    {
        boolean vlkNaĽavom = jeNaĽavomBrehu("vlk");
        boolean kozaNaĽavom = jeNaĽavomBrehu("koza");
        boolean kapustaNaĽavom = jeNaĽavomBrehu("kapusta");
 
        if ((vlkNaĽavom && kozaNaĽavom &&
            !kapustaNaĽavom && prievozníkJeNaPravomBrehu) ||
            (!vlkNaĽavom && !kozaNaĽavom &&
            kapustaNaĽavom && !prievozníkJeNaPravomBrehu))
        {
            System.out.println("Vlk zožral kozu!");
            return true;
        }
 
        if ((kozaNaĽavom && kapustaNaĽavom &&
            !vlkNaĽavom && prievozníkJeNaPravomBrehu) ||
            (!kozaNaĽavom && !kapustaNaĽavom &&
            vlkNaĽavom && !prievozníkJeNaPravomBrehu))
        {
            System.out.println("Koza zožrala kapustu!");
            return true;
        }
 
        return false;
    }
 
    private boolean hraSkončila()
    {
        boolean vlkNaĽavom = jeNaĽavomBrehu("vlk");
        boolean kozaNaĽavom = jeNaĽavomBrehu("koza");
        boolean kapustaNaĽavom = jeNaĽavomBrehu("kapusta");
 
        return vlkNaĽavom && kozaNaĽavom && kapustaNaĽavom;
    }
 
    public static void main(String[] args)
    {
        new VlkKozaKapusta();
    }
}