package adamira.cz; import sugar.Sys; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; class Slovo { String str; boolean pouzito; Slovo dalsi; Slovo(String str, boolean pouzito) { this.str = str; this.pouzito = pouzito; this.dalsi = null; } void ulozDoSouboru(BufferedWriter bw) throws IOException { bw.write(str); if (dalsi != null) { bw.newLine(); dalsi.ulozDoSouboru(bw); } } boolean navazuje(String naSlovo) { return (str.charAt(0) == naSlovo.charAt(naSlovo.length()-1) && (!pouzito)); } int pocetNavazujicichSlov(String keSlovu) { int pocet = 0; if (dalsi != null) pocet = dalsi.pocetNavazujicichSlov(keSlovu); if (navazuje(keSlovu)) pocet++; return pocet; } Slovo nteNavazujiciSlovo(String keSlovu, int n) { if (navazuje(keSlovu)) n--; if (n==0) return this; else return dalsi.nteNavazujiciSlovo(keSlovu, n); } void pridejSlovo(String xstr, boolean xpouzito) { if (xstr.compareTo(str)==0) pouzito = xpouzito; else if (this.dalsi==null) this.dalsi = new Slovo(xstr, xpouzito); else this.dalsi.pridejSlovo(xstr, xpouzito); } boolean byloPouzitoSlovo(String jake) { if ((str.compareTo(jake)==0) && pouzito) return true; if (dalsi!=null) if (dalsi.byloPouzitoSlovo(jake)) return true; return false; } void vypis() { Sys.p(str); Sys.p(" pouzito = "); Sys.pln(pouzito); if (dalsi != null) dalsi.vypis(); } } public class SlovniFotbal { public static void main(String[] args) { Slovo slova = null; BufferedReader br; try { br = new BufferedReader(new FileReader("SlovniFotbal.txt")); String str; while ((str = br.readLine()) != null) if (slova==null) slova = new Slovo(str, false); else slova.pridejSlovo(str, false); br.close(); } catch (IOException e) { Sys.pln("Vstupni soubor nenalezen. Pocitac ma prazdnou slovni zasobu."); } //slova.vypis(); Sys.p("Zadejte prvni slovo: "); String slovoUzivatel = Sys.readLine(); if (slova==null) slova = new Slovo(slovoUzivatel, true); else slova.pridejSlovo(slovoUzivatel, true); while (slovoUzivatel.length() > 0) { int pocetMoznosti = 0; if (slova != null) pocetMoznosti = slova.pocetNavazujicichSlov(slovoUzivatel); if (pocetMoznosti == 0) { Sys.pln("Neznam zadne dalsi slovo. Gratuluji, vyhral jste!"); break; } else { int volba = (int) Math.round(Math.random() * (pocetMoznosti-1) + 1); Slovo slovoPocitac = slova.nteNavazujiciSlovo(slovoUzivatel, volba); Sys.pln("Navazujici slovo vybrane pocitacem: " + slovoPocitac.str); slovoPocitac.pouzito = true; Sys.p("Zadejte dalsi slovo: "); slovoUzivatel = Sys.readLine(); if (slovoUzivatel.length() > 0) { if (slovoUzivatel.charAt(0) != slovoPocitac.str.charAt(slovoPocitac.str.length()-1)) { Sys.pln("Slovo nenavazuje na predchozi. Prohral jsi!"); slova.pridejSlovo(slovoUzivatel, true); break; } if (slova.byloPouzitoSlovo(slovoUzivatel)) { Sys.pln("Takove slovo jiz bylo v teto hre pouzito! Prohral jsi'"); slova.pridejSlovo(slovoUzivatel, true); break; } slova.pridejSlovo(slovoUzivatel, true); } } } BufferedWriter bw; try { bw = new BufferedWriter(new FileWriter("SlovniFotbal.txt")); if (slova != null) slova.ulozDoSouboru(bw); bw.close(); } catch (IOException e) { e.printStackTrace(); } } }