package ingsw.proj.cluedo.gui.text;
import ingsw.proj.cluedo.componenti.ArmiEnum;
import ingsw.proj.cluedo.componenti.CongetturaRidotta;
import ingsw.proj.cluedo.componenti.Soluzione;
import ingsw.proj.cluedo.componenti.Casella.CasellaRidotta;
import ingsw.proj.cluedo.gui.InterfacciaUtente;
import ingsw.proj.cluedo.logica.AzioniEnum;
import java.awt.Point;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/**
* Classe che implementa la versione testuale dell'interfaccia utente
*
* @author C&C
*
*/
public class InterfacciaTestuale extends InterfacciaUtente {
@Override
public void chiediAzione(String nomeGiocatore, AzioniEnum[] azione) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int selected = -1;
int i = 0;
System.out.println(nomeGiocatore + ", cosa vuoi fare?");
for (i = 0; i < azione.length; i++) {
System.out.println("[" + i + "] " + azione[i].toString());
}
do {
try {
selected = Integer.decode(reader.readLine());
} catch (Exception e) {
selected = -1;
}
if (selected < 0 || selected >= i)
System.out.println("Scelta errata");
} while (selected < 0 || selected >= i);
fireAzioneSceltaEvent(nomeGiocatore, azione[selected]);
}
@Override
public void chiediNomiGiocatori() {
nomiGiocatori = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String read = "";
int count = 0;
System.out.println("Nomi dei giocatori?");
System.out.println("Almeno 3, termina con -1");
do {
try {
read = reader.readLine();
} catch (Exception e) {
}
if (nomiGiocatori.contains(read)) {
System.out.println("Giocatore gia' inserito");
continue;
}
if (!(read.length() < 1))
if ((count < 4) && (!read.equals("-1"))) {
count++;
nomiGiocatori.add(read);
} else if ((count < 4) && (read.equals("-1")))
System.out.println("Troppi pochi giocatori inseriti");
else if (count >= 4) {
count++;
nomiGiocatori.add(read);
}
} while (!(read.equals("-1")) || (count < 4));
nomiGiocatori.remove(count - 1);
fireNomiSceltiEvent((String[]) nomiGiocatori.toArray(new String[nomiGiocatori.size()]));
}
@Override
public void disegnaTabellone(CasellaRidotta[][] tabellone) {
this.tabellone = tabellone;
System.out.println("Qui doveri disegnare il tabellone");
System.out.println("La dimensione e' (" + tabellone.length + "," + tabellone[0].length + ")");
}
@Override
public void formulaAccusa(String nomeGiocatore) {
System.out.println(nomeGiocatore + ", quale e' la soluzione?");
fireAccusaFormulataEvent(nomeGiocatore, formulaCongettura());
}
private CongetturaRidotta formulaCongettura() {
String accusato;
ArmiEnum arma;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int selected = -1;
int i = 0;
System.out.println("Chi e' l'omicida?");
for (i = 0; i < nomiGiocatori.size(); i++) {
System.out.println("[" + i + "] " + nomiGiocatori.get(i));
}
do {
try {
selected = Integer.decode(reader.readLine());
} catch (Exception e) {
selected = -1;
}
if (selected < 0 || selected >= i)
System.out.println("Scelta errata");
} while (selected < 0 || selected >= i);
accusato = nomiGiocatori.get(selected);
System.out.println();
System.out.println("Quale arma ha usato?");
for (i = 0; i < ArmiEnum.values().length; i++) {
System.out.println("[" + i + "] " + ArmiEnum.values()[i]);
}
do {
try {
selected = Integer.decode(reader.readLine());
} catch (Exception e) {
selected = -1;
}
if (selected < 0 || selected >= i)
System.out.println("Scelta errata");
} while (selected < 0 || selected >= i);
arma = ArmiEnum.values()[selected];
// System.gc();
return new CongetturaRidotta(accusato, arma);
}
@Override
public void forumlaIpotesi(String nomeGiocatore) {
System.out.println(nomeGiocatore + ", quale e' la tua ipotesi?");
fireIpotesiFormulataEvent(nomeGiocatore, formulaCongettura());
}
@Override
public void mostraAppunti(String nomeGiocatore, String[] note) {
System.out.println(nomeGiocatore + ", ecco cosa sai:");
for (String string : note) {
System.out.println(string);
}
System.out.println("--------");
}
@Override
public void mostraLancioDadi(int result) {
System.out.println("Lancio i dadi....");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.out.println("Hai ottenuto " + result);
}
@Override
public void notificaErrore(String errore) {
System.out.println("Si e' verificato un errore: " + errore);
}
@Override
public void notificaFineTurno(String nomeGiocatore) {
System.out.println(nomeGiocatore + ", hai finito il turno");
}
@Override
public void notificaGameOver(String nomeGiocatore) {
System.out.println(nomeGiocatore + ", hai perso!");
}
@Override
public void notificaGiocoVinto(String nomeGiocatore) {
System.out.println(nomeGiocatore + " ha vinto!");
}
@Override
public void notificaInizioTurno(String nomeGiocatore) {
System.out.println(nomeGiocatore + ", tocca a te");
}
@Override
public void chiediDestinazione(String nomeGiocatore, Point[] destinazioni) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int selected = -1;
int i = 0;
System.out.println(nomeGiocatore + ", scegli dove andare:");
for (CasellaRidotta[] tmp : tabellone) {
for (CasellaRidotta casella : tmp) {
for (Point dest : destinazioni) {
if (casella.getPosizione().equals(dest)) {
System.out.println("[" + i + "] Posizione: (" + casella.getPosizione().y + "," + casella.getPosizione().x + ") , Stanza: " + casella.getStanza().toString() + " , Tipo: " + casella.getTipo().toString() + ";");
i++;
}
}
}
}
do {
try {
selected = Integer.decode(reader.readLine());
} catch (Exception e) {
selected = -1;
}
if (selected < 0 || selected >= i)
System.out.println("Scelta errata");
} while (selected < 0 || selected >= i);
fireDestinazioneSceltaEvent(nomeGiocatore, destinazioni[selected]);
}
@Override
public void notificaGiocoFinito(Soluzione sol) {
System.out.println("Il Gioco e' terminato.\r\nIl colpevole � " + sol.getSospetto().getNome() + " con l'arma " + sol.getArma().getNome() + " nella stanza " + sol.getStanza().getNome() + ".");
}
@Override
public void refreshTabellone(CasellaRidotta[][] tabellone) {
// TODO Auto-generated method stub
}
@Override
public void mostraCarte(String nomeGiocatore, String[] carte) {
// TODO Auto-generated method stub
}
}