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 i = 0; i < ľ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 i = 0; i < 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 i = 0; i < pravýBreh.length; ++i)
{
if (čo.equalsIgnoreCase(pravýBreh[i])) return i;
}
return -1;
}
private int nájdiNaĽavomBrehu(String čo)
{
for (int i = 0; i < ľavýBreh.length; ++i)
{
if (čo.equalsIgnoreCase(ľavýBreh[i])) return i;
}
return -1;
}
private void prevez(String čo)
{
if (prievozníkJeNaPravomBrehu)
{
int i = nájdiNaPravomBrehu(čo);
int j = nájdiNaĽavomBrehu("nič");
if (i == -1)
{
System.out.println("Na ľavom brehu nie je " + čo + ".");
}
else if (j == -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 i = nájdiNaĽavomBrehu(čo);
int j = nájdiNaPravomBrehu("nič");
if (i == -1)
{
System.out.println("Na pravom brehu nie je " + čo + ".");
}
else if (j == -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 i = 0; i < ľ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();
}
}