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 Scanner sc
= new Scanner
(System.
in);
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
) {
boolean hrame = true;
boolean koniecHry = false;
ArrayList<String> menaASkore = new ArrayList<String>();
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
<String
> 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;
}
}
}
private static int linearSearch
(ArrayList
<String
> 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<String> listOfWinners(ArrayList<String> namesAndScores){
sortListOfWinners(namesAndScores);
//for (int i = 0; i < namesAndScores.size(); i++) {
// System.out.println(namesAndScores.get(i));
//}
return namesAndScores;
}
private static ArrayList<String> sortListOfWinners(ArrayList<String> namesAndScores){
return namesAndScores;
}
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;
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++) {
}
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;
}
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;
}
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<String> listVolnychSuradnic = new ArrayList<String>();
int randomIndex = 0;
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);
}
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
] + " ");
}
}
}
}
private static boolean isNumber
(String udaj
) {
boolean stav = false;
try {
stav = true;
stav = false;
}
return stav;
}
}