import java.util.ArrayList; import java.util.Collections; import java.util.Random; import java.util.Scanner; public class ProjektSorty { static String cyan = "\u001B[36m"; static String yellow = "\u001B[33m"; static String reset = "\u001B[0m"; static Random rd = new Random(); static Scanner sc = new Scanner(System.in); static String[][] hraciaPlocha = new String[8][11]; static int[] poleCisel = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40}; static int narocnost = 4; static boolean chyba = false; public static void main(String[] args) { System.out.println("Hra"); boolean hrame = true; boolean koniecHry = false; String pokracuj = ""; String meno = ""; String hracNaHladanie = ""; String vyber = ""; ArrayList menaASkore = new ArrayList(); while (true) { game(hrame, koniecHry, pokracuj, meno, hracNaHladanie, vyber, menaASkore); } } private static void game(boolean hrame, boolean koniecHry,String pokracuj, String meno, String hracNaHladanie, String vyber, ArrayList menaASkore){ while (!koniecHry) { System.out.println("Pred tým ako začneš, zadaj svoje meno, pod ktorým sa neskôr môžeš nájsť: "); do { meno = sc.nextLine(); if (meno.contains(",")) { System.out.println("Meno nesmie obsahovať čiarku, zadaj ho ešte raz: "); } } while (meno.contains(",")); reset(pokracuj, meno, vyber); info(); while (hrame) { loadArea(); genNumbers(); vypis(); String[][] poleSuradnicPreCisla = new String[narocnost - 1][3]; guess(poleSuradnicPreCisla); if (chyba) { break; } } menaASkore.add((narocnost-1)+","+meno); listOfWinners(menaASkore); System.out.println("Chceš vyhľadať hráča? ('ano' pre áno): "); vyber = sc.nextLine(); if (vyber.toLowerCase().equals("ano") || vyber.toLowerCase().equals("áno")) { System.out.println("Zadaj meno hráča: "); do { hracNaHladanie = sc.nextLine(); if (hracNaHladanie.contains(",")) { System.out.println("Meno nesmie obsahovať čiarku, zadaj ho ešte raz: "); } } while (hracNaHladanie.contains(",")); int x = linearSearch(menaASkore, hracNaHladanie); if(x!=-1){ System.out.println("Zadaný hráč skončil v poradí "+(x+1)); } else { System.out.println("Zadané meno neexistuje"); } } System.out.println("Chcete pokračovať? Ak áno, zadajte 'ano': "); pokracuj = sc.nextLine(); if (!pokracuj.toLowerCase().equals("ano")) { koniecHry = true; System.exit(0); } } } private static int linearSearch(ArrayList namesAndScores, String value){ for(int i = 0; i < namesAndScores.size(); i++){ if(namesAndScores.get(i).split(",")[1].equals(value)) return i; } return -1; } private static ArrayList listOfWinners(ArrayList namesAndScores){ sortListOfWinners(namesAndScores); //for (int i = 0; i < namesAndScores.size(); i++) { // System.out.println(namesAndScores.get(i)); //} return namesAndScores; } private static ArrayList sortListOfWinners(ArrayList namesAndScores){ Collections.sort(namesAndScores, Collections.reverseOrder()); return namesAndScores; } private static void reset(String pokracuj, String name, String choise) { narocnost = 4; pokracuj = ""; chyba = false; name = ""; choise = ""; } private static void info() { System.out.println("Pravidlá hry"); System.out.println("" + yellow + " Zobrazí sa vám hracia plocha a na nej čísla." + "\n Vašou úlohou je zapamätať si čísla a následne" + "\n zapísať súradnice čísel vzostupne."); System.out.println(" Ak si myslíš, že si pamätáš všetky pozície čísel, " + "\n klikni na kôš pre vymazanie údajov z konzoly a do konzoly napíš 'ok'. \n Potom môžeš zadávať."); System.out.println(" Zadávaj pozíciu najmenšieho čísla v tvare 'číslo, písmeno' napr.(1a) " + "\n a postupne zadávaj pozíciu čísel vždy väčších o jedno, až kým na ploche nebude ani jedno zakryté číslo" + reset); } private static void guess(String[][] poleSuradnicPreCisla) { boolean suTamCisla = true; boolean temp; int pocitadlo = 0; String pozicia = ""; String ready = ""; do { System.out.println("Ak si pripravený, zadaj 'ok'."); ready = sc.nextLine(); } while (!(ready.toLowerCase()).equals("ok")); for (int i = 0; i < hraciaPlocha.length; i++) { for (int j = 0; j < hraciaPlocha[i].length; j++) { temp = isNumber(hraciaPlocha[i][j]); if (i != 0 && j != 0 && temp) { poleSuradnicPreCisla[pocitadlo][0] = hraciaPlocha[i][j]; poleSuradnicPreCisla[pocitadlo][1] = hraciaPlocha[0][j]; poleSuradnicPreCisla[pocitadlo][2] = hraciaPlocha[i][0]; pocitadlo++; } } } selectionSort(poleSuradnicPreCisla); hideNumbers(); for (int i = 0; i < 100; i++) { System.out.println(); } vypis(); System.out.println("Teraz hádaj pozície čísel: "); while (suTamCisla) { pozicia = sc.nextLine(); if (!correctCoordinates(poleSuradnicPreCisla, pozicia)) { System.out.println("Zadal si zlé súradnice, prehral si :("); chyba = true; break; } vypis(); suTamCisla = checkForNumbers(suTamCisla); } if (!chyba) { System.out.println("Nová uroveň!"); } else { System.out.println("Urobil si chybu, musíš začať od znova."); } } private static boolean checkForNumbers(boolean suTamCisla) { boolean temp; boolean temp2 = false; for (int i = 0; i < hraciaPlocha.length; i++) { if (temp2) { break; } for (int j = 0; j < hraciaPlocha[i].length; j++) { temp = isSquare(hraciaPlocha[i][j].charAt(0)); if (i != 0 && j != 0 && temp) { temp2 = true; break; } else { temp2 = false; } } } suTamCisla = temp2; return suTamCisla; } private static boolean isSquare(char hraciaPlocha) { boolean stav; if ((hraciaPlocha) == ('⬜')) { stav = true; } else { stav = false; } return stav; } private static String[][] selectionSort(String[][] array) { for (int i = 0; i < array.length - 1; i++) { int maxIndex = i; for (int j = i + 1; j < array.length; j++) { if (Integer.parseInt(array[j][0]) < Integer.parseInt(array[maxIndex][0])) maxIndex = j; } String tmp = array[i][0]; String tmp2 = array[i][1]; String tmp3 = array[i][2]; array[i][0] = array[maxIndex][0]; array[i][1] = array[maxIndex][1]; array[i][2] = array[maxIndex][2]; array[maxIndex][0] = tmp; array[maxIndex][1] = tmp2; array[maxIndex][2] = tmp3; } return array; } private static void loadArea() { int pocitadlo = 1; //male "a" char pocitadloPreZnaky = 97; for (int i = 0; i < hraciaPlocha.length; i++) { for (int j = 0; j < hraciaPlocha[i].length; j++) { if (i == 0 && j >= 2 && j != hraciaPlocha[i].length - 1) { hraciaPlocha[i][j] = String.valueOf(pocitadlo); pocitadlo++; } else if (j == 0 && i >= 2 && i != hraciaPlocha.length - 1) { hraciaPlocha[i][j] = String.valueOf(pocitadloPreZnaky); pocitadloPreZnaky++; } else if (i == 1 || i == hraciaPlocha.length - 1) { hraciaPlocha[i][j] = cyan + "#" + reset; } else if (j == 1 || j == hraciaPlocha[i].length - 1) { hraciaPlocha[i][j] = cyan + "#" + reset; } else if (j == 0 && i == 0) { hraciaPlocha[i][j] = cyan + "#" + reset; } else { hraciaPlocha[i][j] = "-"; } } } } private static void genNumbers() { ArrayList listVolnychSuradnic = new ArrayList(); int randomIndex = 0; String temp = ""; for (int i = 0; i < hraciaPlocha.length; i++) { for (int j = 0; j < hraciaPlocha[i].length; j++) { if (hraciaPlocha[i][j].equals("-")) { listVolnychSuradnic.add("" + i + "" + j + ""); } } } for (int i = 0; i < narocnost; i++) { randomIndex = rd.nextInt(listVolnychSuradnic.size()); temp = listVolnychSuradnic.get(randomIndex); listVolnychSuradnic.remove(randomIndex); hraciaPlocha[Integer.parseInt(String.valueOf(temp.charAt(0)))] [Integer.parseInt(String.valueOf(temp.charAt(1)))] = String.valueOf(poleCisel[i]); } narocnost++; } private static boolean correctCoordinates(String[][] poleSuradnicPreCisla, String pozicia) { boolean spravnaPozicia = false; for (int i = 0; i < poleSuradnicPreCisla.length; i++) { if (!poleSuradnicPreCisla[i][1].equals("precitane") && !poleSuradnicPreCisla[i][2].equals("precitane")) { if (Character.valueOf(poleSuradnicPreCisla[i][1].charAt(0)) == Character.valueOf(pozicia.charAt(0)) && Character.valueOf(poleSuradnicPreCisla[i][2].charAt(0)) == Character.valueOf(pozicia.charAt(1))) { spravnaPozicia = true; poleSuradnicPreCisla[i][1] = "precitane"; poleSuradnicPreCisla[i][2] = "precitane"; replaceSquare(pozicia); break; } } } return spravnaPozicia; } private static void replaceSquare(String pozicia) { for (int i = 0; i < hraciaPlocha.length; i++) { for (int j = 0; j < hraciaPlocha[i].length; j++) { if (Character.valueOf(hraciaPlocha[0][j].charAt(0)) == Character.valueOf(pozicia.charAt(0)) && Character.valueOf(hraciaPlocha[i][0].charAt(0)) == Character.valueOf(pozicia.charAt(1))) { hraciaPlocha[i][j] = "-"; } } } } private static void hideNumbers() { boolean temp; for (int i = 0; i < hraciaPlocha.length; i++) { for (int j = 0; j < hraciaPlocha[i].length; j++) { temp = isNumber(hraciaPlocha[i][j]); if (i != 0 && temp) { hraciaPlocha[i][j] = "⬜"; } } } } private static void vypis() { boolean temp; int pocetStvorcov = 0; int pocetMedzierStvorcov = 1; for (int i = 0; i < hraciaPlocha.length; i++) { for (int j = 0; j < hraciaPlocha[i].length; j++) { temp = isNumber(hraciaPlocha[i][j]); if (i != 0 && j != 0 && temp) { if (Integer.parseInt(hraciaPlocha[i][j]) >= 10) { System.out.print(yellow + hraciaPlocha[i][j] + reset + " "); } else { System.out.print(yellow + hraciaPlocha[i][j] + reset + " "); } } else if (hraciaPlocha[i][j].equals("⬜")) { for (int k = 0; k < hraciaPlocha[i].length; k++) { if (hraciaPlocha[i][k].equals("⬜")) { pocetStvorcov++; } } if (pocetStvorcov > 1 && pocetMedzierStvorcov % 2 == 0) { System.out.print(hraciaPlocha[i][j] + " "); pocetStvorcov++; } else { System.out.print(hraciaPlocha[i][j] + " "); pocetMedzierStvorcov++; } } else { System.out.print(hraciaPlocha[i][j] + " "); } } System.out.println(); } } private static boolean isNumber(String udaj) { boolean stav = false; try { Integer.parseInt(String.valueOf(udaj)); stav = true; } catch (NumberFormatException e) { stav = false; } return stav; } }