package adamira.cz; import sugar.Sys; public class bludiste { static String[][] pole = { {"***************", "* X *", "************* *", "* *", "* *********", "* @ *********", "***************"}, {"***************", "* X *", "********* *****", "** *", "* ************", "* @ *********", "***************"}, {"*******************************", "* * X *", "**** *********************** *", "** * *", "* ******** ************ ******", "* @ *** ************ ******", "* *** ******", "*******************************"} }; static char znakZelva = '@'; static char znakCil = 'X'; static char znakZed = '*'; static char znakCesta = ' '; static int xZelva; static int yZelva; // funkce, ktera zjisti, co je na souradnicich [x, y] static char coJeTam(int kterePole, int x, int y) { if (pole[kterePole][y].charAt(x) == znakCil) return znakCil; if (pole[kterePole][y].charAt(x) == znakZed) return znakZed; if ((x==xZelva) && (y==yZelva)) return znakZelva; return znakCesta; } // funkce, ktera vraci nahodne cislo v rozsahu 0..maxCislo static int nahCislo(int maxCislo) { return Math.round((float)(Math.random() * maxCislo)); } // funkce, ktera zobrazi zpravu a z klavesnice precte jeden znak. // Pokud uzivatel nic nezada, funkce vrati hodnotu "vychozi" static char prectiZnak(String zprava, char vychozi) { Sys.p(zprava + " [" + vychozi + "] "); String str = Sys.readLine(); if (str.length() == 0) return vychozi; return str.charAt(0); } // hlavni metoda public static void main(String[] args) { // vynuluju smer pohybu zelvy char smer = '-'; // cyklus pro jednotlive hry while ((smer != 'k')&&(smer != 'K')) { // nahodne vyberu hraci pole int kterePole = nahCislo(pole.length-1); // zjistim vychozi polohu zelvy for (int y = 0; y < pole[kterePole].length; y++) for (int x = 0; x < pole[kterePole][0].length(); x++) if (pole[kterePole][y].charAt(x) == znakZelva) { xZelva = x; yZelva = y; } // cyklus pro pohyb zelvy while ( (smer != 'k') && (smer != 'K')) { // zobrazim aktualni stav bludiste Sys.pln(); for (int y = 0; y < pole[kterePole].length; y++) { for (int x = 0; x < pole[kterePole][0].length(); x++) { Sys.p(coJeTam(kterePole, x, y)); Sys.p(' '); } Sys.pln(); } // test, jestli nejsem v cili if (coJeTam(kterePole, xZelva, yZelva) == znakCil) { Sys.pln("Gratuluji, vyhral jste!"); char znak = prectiZnak("Chcete hrat znovu? (Ano/Ne)", 'n'); if ((znak!='a') && (znak!='A')) smer = 'k'; // konec break; } // nactu z klavesnice novy smer zelvy smer = prectiZnak( "zadejte smer (Nahoru, Dolu, doPrava, doLeva, Konec)", smer); // vypocitam nove souradnice zelvy podle jejiho smeru int xNovaZelva = xZelva; int yNovaZelva = yZelva; if ( (smer == 'n') || (smer == 'N')) yNovaZelva--; if ( (smer == 'd') || (smer == 'D')) yNovaZelva++; if ( (smer == 'p') || (smer == 'P')) xNovaZelva++; if ( (smer == 'l') || (smer == 'L')) xNovaZelva--; // kontrola, jestli zelva nenarazi do zdi if (coJeTam(kterePole, xNovaZelva, yNovaZelva) == znakZed) { Sys.p("Pohyb neni mozny, protoze by zelva narazila do zdi! (ENTER)"); Sys.readLine(); continue; } // zmena polohy zelvy xZelva = xNovaZelva; yZelva = yNovaZelva; } } } }