package ingsw.proj.cluedo.gui.swing;
import static ingsw.proj.cluedo.gui.swing.ImageUtility.loadImage;
import static ingsw.proj.cluedo.gui.swing.ImageUtility.splitImage;
import ingsw.proj.cluedo.componenti.ArmiEnum;
import ingsw.proj.cluedo.componenti.CongetturaRidotta;
import ingsw.proj.cluedo.componenti.Soluzione;
import ingsw.proj.cluedo.componenti.StanzeEnum;
import ingsw.proj.cluedo.componenti.TipoCasellaEnum;
import ingsw.proj.cluedo.componenti.Casella.CasellaRidotta;
import ingsw.proj.cluedo.gui.InterfacciaUtente;
import ingsw.proj.cluedo.logica.AzioniEnum;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
/**
* Classe che implementa la versione Swing dell'interfaccia utente
*
* @author C&C
*
*/
public class InterfacciaSwing extends InterfacciaUtente {
private class PulsanteCasella extends JButton {
private static final long serialVersionUID = -1950117229599399350L;
private final CasellaRidotta casella;
public PulsanteCasella(CasellaRidotta casella) {
super();
this.casella = casella;
this.addMouseListener(new PulsanteCasellaMouseListener());
this.addActionListener(new PulsanteCasellaActionListener());
}
public CasellaRidotta getCasella() {
return casella;
}
}
private class PulsanteAzione extends JButton {
private static final long serialVersionUID = -5530694890577935181L;
private final AzioniEnum azione;
public PulsanteAzione(AzioniEnum azione) {
super(azione.toString());
this.azione = azione;
}
public AzioniEnum getAzione() {
return azione;
}
}
private class PulsanteNumero extends JButton {
private static final long serialVersionUID = -9149910487797138607L;
private final int numero;
public PulsanteNumero(int numero) {
this.numero = numero;
this.setText("" + numero);
this.addActionListener(new PulsanteNumeroActionListener());
}
public int getNumero() {
return numero;
}
}
private class PulsanteGiocScelti extends JButton {
private static final long serialVersionUID = -4149106198419078949L;
private final HashMap<JTextField, JLabel> nomiEColori;
public PulsanteGiocScelti(HashMap<JTextField, JLabel> nomiEColori) {
this.setText("OK");
this.nomiEColori = nomiEColori;
this.addActionListener(new PulsanteGiocSceltiActionListener());
}
public HashMap<JTextField, JLabel> getNomiEColori() {
return nomiEColori;
}
}
private class PulsanteNumeroActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
HashMap<JTextField, JLabel> nomiEColori = new HashMap<JTextField, JLabel>();
frameNumGioc.setVisible(false);
JPanel pannelloPrincipale = new JPanel(new BorderLayout());
JPanel pannelloNomi = new JPanel();
int numGioc = ((PulsanteNumero) (arg0.getSource())).numero;
frameNumGioc.setContentPane(pannelloPrincipale);
pannelloNomi.setLayout(new GridLayout(numGioc, 4));
for (int i = 1; i <= numGioc; i++) {
pannelloNomi.add(new JLabel("Giocatore " + i));
JTextField tmp = new JTextField("Giocatore " + i);
final JLabel label = new JLabel(new ImageIcon(coloriGiocatori[0]));
final JComboBox combo = new JComboBox(new String[] { "Bianco", "Nero", "Grigio", "Rosso", "Blu", "Verde", "Giallo", "Viola" });
combo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
label.setIcon(new ImageIcon(coloriGiocatori[combo.getSelectedIndex()]));
}
});
pannelloNomi.add(tmp);
pannelloNomi.add(combo);
pannelloNomi.add(label);
nomiEColori.put(tmp, label);
}
frameNumGioc.add(pannelloNomi, BorderLayout.NORTH);
frameNumGioc.add(new PulsanteGiocScelti(nomiEColori), BorderLayout.SOUTH);
frameNumGioc.pack();
frameNumGioc.setVisible(true);
frameNumGioc.repaint();
}
}
private class PulsanteAzioneActionListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
for (int i = 0; i < pulsantiAzione.size(); i++)
pulsantiAzione.get(i).setEnabled(false);
mainFrame.repaint();
fireAzioneSceltaEvent(giocatore, ((PulsanteAzione) arg0.getSource()).getAzione());
}
}
private class PulsanteCasellaActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
for (PulsanteCasella casella : illuminati) {
casella.setBorder(null);
paintBorder(casella);
casella.setEnabled(false);
}
mainFrame.repaint();
fireDestinazioneSceltaEvent(giocatore, ((PulsanteCasella) e.getSource()).getCasella().getPosizione());
}
}
private class PulsanteGiocSceltiActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
immaginiGiocatori = new HashMap<String, Image>();
HashMap<JTextField, JLabel> nomiEColori = ((PulsanteGiocScelti) arg0.getSource()).getNomiEColori();
ArrayList<String> nomiGiocatori = new ArrayList<String>();
for (JTextField textField : nomiEColori.keySet()) {
String text = textField.getText();
if (text.trim().length() == 0)
return;
nomiGiocatori.add(textField.getText());
immaginiGiocatori.put(textField.getText(), ((ImageIcon) nomiEColori.get(textField).getIcon()).getImage());
}
InterfacciaSwing.this.nomiGiocatori = nomiGiocatori;
fireNomiSceltiEvent((String[]) nomiGiocatori.toArray(new String[nomiGiocatori.size()]));
frameNumGioc.dispose();
}
}
private class PulsanteCasellaMouseListener implements MouseListener {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
CasellaRidotta casella = ((PulsanteCasella) e.getSource()).getCasella();
String text = "Posizione: " + "(" + casella.getPosizione().y + "," + casella.getPosizione().x;
text += ") -- Stanza: " + casella.getStanza().toString();
text += " Tipo: " + casella.getTipo().toString();
labelStato.setText(text);
}
@Override
public void mouseExited(MouseEvent e) {
labelStato.setText("");
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
private class PulsanteAccusaActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
ArmiEnum arma = null;
String accusato = null;
for (JRadioButton radioButton : checkArmi) {
if (radioButton.isSelected()) {
arma = ArmiEnum.valueOf(radioButton.getText());
break;
}
}
for (JRadioButton radioButton : checkAccusati) {
if (radioButton.isSelected()) {
accusato = radioButton.getText();
break;
}
}
if ((arma == null) || (accusato == null))
return;
else {
frameCongettura.dispose();
fireAccusaFormulataEvent(giocatore, new CongetturaRidotta(accusato, arma));
}
}
}
private class PulsanteIpotesiActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
ArmiEnum arma = null;
String accusato = null;
for (JRadioButton radioButton : checkArmi) {
if (radioButton.isSelected()) {
arma = ArmiEnum.valueOf(radioButton.getText());
break;
}
}
for (JRadioButton radioButton : checkAccusati) {
if (radioButton.isSelected()) {
accusato = radioButton.getText();
break;
}
}
if ((arma == null) || (accusato == null))
return;
else {
frameCongettura.dispose();
fireIpotesiFormulataEvent(giocatore, new CongetturaRidotta(accusato, arma));
}
}
}
private JFrame mainFrame = null;
private JFrame frameCongettura = null;
private JFrame frameNumGioc = null;
private JTabbedPane pannelloUtente = null;
private JPanel pannelloPrincipale = null;
private JPanel pannelloCaselle = null;
private JPanel pannelloAzioni = null;
private JPanel pannelloStato = null;
private JScrollPane pannelloAppunti = null;
private JList elencoAppunti = null;
private JList elencoCarte = null;
private JLabel labelStato = null;
private JButton pulsanteCongettura = null;
private List<PulsanteAzione> pulsantiAzione = null;
private List<JRadioButton> checkArmi = null;
private List<JRadioButton> checkAccusati = null;
private List<PulsanteCasella> illuminati = null;
private HashMap<ArmiEnum, BufferedImage> immaginiArmi = null;
private HashMap<StanzeEnum, BufferedImage> sfondiStanze = null;
private PulsanteCasella[][] caselle = null;
private HashMap<String, Image> immaginiGiocatori = null;
private BufferedImage[] coloriGiocatori = null;
private BufferedImage immaginePassSegreto = null;
private String giocatore;
private void initFinalGui() {
JFrame.setDefaultLookAndFeelDecorated(false);
pulsantiAzione = new ArrayList<PulsanteAzione>();
for (int i = 0; i < AzioniEnum.values().length - 1; i++) {
pulsantiAzione.add(new PulsanteAzione(AzioniEnum.values()[i]));
pulsantiAzione.get(i).setEnabled(false);
pulsantiAzione.get(i).addActionListener(new PulsanteAzioneActionListener());
}
if (mainFrame != null)
mainFrame.setVisible(false);
mainFrame = new JFrame();
mainFrame.setTitle("CluedoC&C");
mainFrame.setContentPane(getPannelloPrincipale());
mainFrame.setPreferredSize(new Dimension(1000, 700));
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.repaint();
}
private JFrame creaFrameCongettura(String text) {
frameCongettura = new JFrame(text);
JPanel pannelloArmi = new JPanel(new GridLayout(3, 3));
JPanel pannelloAccusati = new JPanel(new GridLayout(3, 3));
ButtonGroup gruppoArmi = new ButtonGroup();
ButtonGroup gruppoAccusati = new ButtonGroup();
checkArmi = new ArrayList<JRadioButton>();
checkAccusati = new ArrayList<JRadioButton>();
for (int i = 0; i < ArmiEnum.values().length; i++) {
JRadioButton tmp = new JRadioButton(ArmiEnum.values()[i].toString());
pannelloArmi.add(tmp);
gruppoArmi.add(tmp);
checkArmi.add(tmp);
}
for (int i = 0; i < nomiGiocatori.size(); i++) {
JRadioButton tmp = new JRadioButton(nomiGiocatori.get(i));
pannelloAccusati.add(tmp);
gruppoAccusati.add(tmp);
checkAccusati.add(tmp);
}
JSplitPane pannelloCongetture = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
pannelloCongetture.add(pannelloAccusati, JSplitPane.LEFT);
pannelloCongetture.add(pannelloArmi, JSplitPane.RIGHT);
frameCongettura.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frameCongettura.add(pannelloCongetture, BorderLayout.NORTH);
pulsanteCongettura = new JButton("OK");
for (int i = 0; i < caselle.length; i++)
for (int j = 0; j < caselle[i].length; j++)
if (caselle[i][j].getCasella().getOccupante().equals(giocatore))
frameCongettura.add(new JLabel("Stanza: " + caselle[i][j].getCasella().getStanza().toString()), BorderLayout.CENTER);
frameCongettura.add(pulsanteCongettura, BorderLayout.SOUTH);
frameCongettura.pack();
mainFrame.repaint();
return frameCongettura;
}
private JPanel getPannelloPrincipale() {
if (pannelloPrincipale == null) {
pannelloPrincipale = new JPanel();
pannelloPrincipale.setLayout(new BorderLayout());
pannelloPrincipale.add(getPannelloCaselle(), BorderLayout.CENTER);
pannelloPrincipale.add(getPannelloUtente(), BorderLayout.EAST);
pannelloPrincipale.add(getPannelloStato(), BorderLayout.SOUTH);
}
mainFrame.repaint();
return pannelloPrincipale;
}
private JPanel getPannelloCaselle() {
if (pannelloCaselle == null) {
GridLayout gridLayout = new GridLayout();
gridLayout.setRows(caselle.length);
gridLayout.setColumns(caselle[0].length);
pannelloCaselle = new JPanel();
pannelloCaselle.setLayout(gridLayout);
for (int i = 0; i < caselle.length; i++)
for (int j = 0; j < caselle[i].length; j++)
pannelloCaselle.add(caselle[i][j]);
}
mainFrame.repaint();
return pannelloCaselle;
}
private JPanel getPannelloStato() {
if (pannelloStato == null) {
pannelloStato = new JPanel();
pannelloStato.setPreferredSize(new Dimension(0, 30));
if (labelStato == null)
labelStato = new JLabel();
pannelloStato.add(labelStato);
}
mainFrame.repaint();
return pannelloStato;
}
private JScrollPane getPannelloAppunti() {
if (elencoAppunti == null) {
elencoAppunti = new JList();
}
if (pannelloAppunti == null) {
pannelloAppunti = new JScrollPane();
pannelloAppunti.setViewportView(elencoAppunti);
}
mainFrame.repaint();
return pannelloAppunti;
}
private JList getElencoCarte() {
if (elencoCarte == null) {
elencoCarte = new JList();
}
mainFrame.repaint();
return elencoCarte;
}
private JPanel getPannelloAzioni() {
if (pannelloAzioni == null) {
pannelloAzioni = new JPanel();
pannelloAzioni.setLayout(new BoxLayout(getPannelloAzioni(), BoxLayout.Y_AXIS));
pannelloAzioni.setAlignmentY(JPanel.CENTER_ALIGNMENT);
for (PulsanteAzione pulsante : pulsantiAzione) {
pannelloAzioni.add(pulsante);
}
}
mainFrame.repaint();
return pannelloAzioni;
}
private JTabbedPane getPannelloUtente() {
if (pannelloUtente == null) {
pannelloUtente = new JTabbedPane();
pannelloUtente.setPreferredSize(new Dimension(300, 0));
pannelloUtente.addTab("Azioni", getPannelloAzioni());
pannelloUtente.addTab("Carte", getElencoCarte());
pannelloUtente.addTab("Appunti", getPannelloAppunti());
}
mainFrame.repaint();
return pannelloUtente;
}
public InterfacciaSwing() {
BufferedImage[] itemImages = splitImage(loadImage("itemSet.png"), 16, 16);
immaginiArmi = new HashMap<ArmiEnum, BufferedImage>();
immaginiArmi.put(ArmiEnum.ASCIA, itemImages[6]);
immaginiArmi.put(ArmiEnum.CORDA, itemImages[183]);
immaginiArmi.put(ArmiEnum.FIONDA, itemImages[22]);
immaginiArmi.put(ArmiEnum.PISTOLA, itemImages[17]);
immaginiArmi.put(ArmiEnum.PUGNALE, itemImages[8]);
immaginiArmi.put(ArmiEnum.BASTONE, itemImages[14]);
immaginiArmi.put(ArmiEnum.VELENO, itemImages[67]);
immaginiArmi.put(ArmiEnum.PICCONE, itemImages[184]);
immaginiArmi.put(ArmiEnum.SASSO, itemImages[146]);
BufferedImage[] tileSet = splitImage(loadImage("tileSet.png"), 1, 10);
sfondiStanze = new HashMap<StanzeEnum, BufferedImage>();
sfondiStanze.put(StanzeEnum.BAGNO, tileSet[8]);
sfondiStanze.put(StanzeEnum.BIBLIOTECA, tileSet[1]);
sfondiStanze.put(StanzeEnum.CAMERA_LETTO, tileSet[2]);
sfondiStanze.put(StanzeEnum.CANTINA, tileSet[3]);
sfondiStanze.put(StanzeEnum.CORRIDOIO, tileSet[0]);
sfondiStanze.put(StanzeEnum.CUCINA, tileSet[6]);
sfondiStanze.put(StanzeEnum.INGRESSO, tileSet[1]);
sfondiStanze.put(StanzeEnum.SALA, tileSet[7]);
sfondiStanze.put(StanzeEnum.SALA_GIOCHI, tileSet[5]);
sfondiStanze.put(StanzeEnum.STUDIO, tileSet[4]);
immaginePassSegreto = tileSet[9];
coloriGiocatori = new BufferedImage[8];
for (int i = 96; i < 104; i++)
coloriGiocatori[i - 96] = itemImages[i];
}
@Override
public void chiediAzione(String nomeGiocatore, AzioniEnum[] azione) {
for (int i = 0; i < pulsantiAzione.size(); i++)
for (int j = 0; j < azione.length; j++)
if (pulsantiAzione.get(i).getAzione().equals(azione[j]))
pulsantiAzione.get(i).setEnabled(true);
mainFrame.repaint();
}
@Override
public void chiediDestinazione(String nomeGiocatore, Point[] destinazioni) {
illuminati = new ArrayList<PulsanteCasella>();
for (Point point : destinazioni) {
caselle[point.y][point.x].setEnabled(true);
caselle[point.y][point.x].setBorder(BorderFactory.createLineBorder(Color.magenta, 3));
illuminati.add(caselle[point.y][point.x]);
}
mainFrame.repaint();
}
@Override
public void chiediNomiGiocatori() {
frameNumGioc = new JFrame("Inizio del Gioco");
frameNumGioc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JLabel lblText = new JLabel("In quanti volete giocare?", JLabel.CENTER);
frameNumGioc.setFont(new Font("Comic Sans MS", Font.BOLD, 20));
frameNumGioc.setPreferredSize(new Dimension(300, 300));
JPanel pannelloPulsanti = new JPanel();
pannelloPulsanti.setLayout(new GridLayout(4, 4));
frameNumGioc.add(lblText, BorderLayout.NORTH);
for (int i = 3; i < 10; i++) {
pannelloPulsanti.add(new PulsanteNumero(i));
}
frameNumGioc.add(pannelloPulsanti, BorderLayout.CENTER);
frameNumGioc.pack();
frameNumGioc.setVisible(true);
frameNumGioc.repaint();
}
@Override
public void disegnaTabellone(CasellaRidotta[][] tabellone) {
this.tabellone = tabellone;
this.caselle = new PulsanteCasella[tabellone.length][tabellone[0].length];
for (int i = 0; i < tabellone.length; i++) {
for (int j = 0; j < tabellone.length; j++) {
caselle[i][j] = new PulsanteCasella(tabellone[i][j]);
caselle[i][j].setPreferredSize(new Dimension(sfondiStanze.get(StanzeEnum.BAGNO).getWidth(), sfondiStanze.get(StanzeEnum.BAGNO).getHeight()));
caselle[i][j].setIcon(new ImageIcon(sfondiStanze.get(tabellone[i][j].getStanza())));
caselle[i][j].setDisabledIcon(new ImageIcon(sfondiStanze.get(tabellone[i][j].getStanza())));
if (tabellone[i][j].getTipo() == TipoCasellaEnum.PASSAGGIO) {
caselle[i][j].setIcon(new ImageIcon(immaginePassSegreto));
caselle[i][j].setDisabledIcon(new ImageIcon(immaginePassSegreto));
}
if (tabellone[i][j].getOccupante() != "") {
BufferedImage composita = null;
if (tabellone[i][j].getTipo() == TipoCasellaEnum.PASSAGGIO) {
try {
composita = ImageUtility.composeImage(immaginePassSegreto, immaginiArmi.get(ArmiEnum.valueOf(tabellone[i][j].getOccupante())));
} catch (Exception e) {
composita = ImageUtility.composeImage(immaginePassSegreto, immaginiGiocatori.get(tabellone[i][j].getOccupante()));
} finally {
caselle[i][j].setIcon(new ImageIcon(composita));
caselle[i][j].setDisabledIcon(new ImageIcon(composita));
}
} else {
try {
composita = ImageUtility.composeImage(sfondiStanze.get(tabellone[i][j].getStanza()), immaginiArmi.get(ArmiEnum.valueOf(tabellone[i][j].getOccupante())));
} catch (Exception e) {
composita = ImageUtility.composeImage(sfondiStanze.get(tabellone[i][j].getStanza()), immaginiGiocatori.get(tabellone[i][j].getOccupante()));
} finally {
caselle[i][j].setIcon(new ImageIcon(composita));
caselle[i][j].setDisabledIcon(new ImageIcon(composita));
}
}
}
paintBorder(caselle[i][j]);
caselle[i][j].setEnabled(false);
}
}
initFinalGui();
mainFrame.repaint();
}
private void paintBorder(PulsanteCasella pulsante) {
boolean bordoSx = false;
boolean bordoDx = false;
boolean bordoSup = false;
boolean bordoInf = false;
CasellaRidotta casella = pulsante.getCasella();
StanzeEnum stanzaCasella = casella.getStanza();
TipoCasellaEnum tipoCasella = casella.getTipo();
Point posizioneCasella = casella.getPosizione();
if (stanzaCasella == StanzeEnum.CORRIDOIO) {
pulsante.setBorder(null);
return;
}
if (posizioneCasella.y - 1 >= 0) {
if (tabellone[posizioneCasella.y - 1][posizioneCasella.x].getStanza() != (stanzaCasella))
bordoSup = true;
if (tipoCasella == TipoCasellaEnum.PORTA)
if (tabellone[posizioneCasella.y - 1][posizioneCasella.x].getTipo() == TipoCasellaEnum.PORTA)
bordoSup = false;
if (tipoCasella == TipoCasellaEnum.PASSAGGIO)
if (tabellone[posizioneCasella.y][posizioneCasella.x].getTipo() == TipoCasellaEnum.PASSAGGIO)
bordoSup = false;
} else
bordoSup = true;
if (posizioneCasella.y + 1 < tabellone.length) {
if (tabellone[posizioneCasella.y + 1][posizioneCasella.x].getStanza() != (stanzaCasella))
bordoInf = true;
if (tipoCasella == TipoCasellaEnum.PORTA)
if (tabellone[posizioneCasella.y + 1][posizioneCasella.x].getTipo() == TipoCasellaEnum.PORTA)
bordoInf = false;
if (tipoCasella == TipoCasellaEnum.PASSAGGIO)
if (tabellone[posizioneCasella.y + 1][posizioneCasella.x].getTipo() == TipoCasellaEnum.PASSAGGIO)
bordoInf = false;
} else
bordoInf = true;
if (posizioneCasella.x - 1 >= 0) {
if (tabellone[posizioneCasella.y][posizioneCasella.x - 1].getStanza() != (stanzaCasella))
bordoSx = true;
if (tipoCasella == TipoCasellaEnum.PORTA)
if (tabellone[posizioneCasella.y][posizioneCasella.x - 1].getTipo() == TipoCasellaEnum.PORTA)
bordoSx = false;
if (tipoCasella == TipoCasellaEnum.PASSAGGIO)
if (tabellone[posizioneCasella.y][posizioneCasella.x - 1].getTipo() == TipoCasellaEnum.PASSAGGIO)
bordoSx = false;
} else
bordoSx = true;
if (posizioneCasella.x + 1 < tabellone.length) {
if (tabellone[posizioneCasella.y][posizioneCasella.x + 1].getStanza() != (stanzaCasella))
bordoDx = true;
if (tipoCasella == TipoCasellaEnum.PORTA)
if (tabellone[posizioneCasella.y][posizioneCasella.x + 1].getTipo() == TipoCasellaEnum.PORTA)
bordoDx = false;
if (tipoCasella == TipoCasellaEnum.PASSAGGIO)
if (tabellone[posizioneCasella.y][posizioneCasella.x + 1].getTipo() == TipoCasellaEnum.PASSAGGIO)
bordoDx = false;
} else
bordoDx = true;
pulsante.setBorder(BorderFactory.createMatteBorder(bordoSup ? 3 : 0, bordoSx ? 3 : 0, bordoInf ? 3 : 0, bordoDx ? 3 : 0, Color.black));
}
@Override
public void formulaAccusa(String nomeGiocatore) {
creaFrameCongettura("Fai una accusa");
pulsanteCongettura.addActionListener(new PulsanteAccusaActionListener());
frameCongettura.setVisible(true);
}
@Override
public void forumlaIpotesi(String nomeGiocatore) {
creaFrameCongettura("Fai una ipotesi");
pulsanteCongettura.addActionListener(new PulsanteIpotesiActionListener());
frameCongettura.setVisible(true);
}
@Override
public void mostraAppunti(String nomeGiocatore, String[] note) {
elencoAppunti.setListData((Object[]) note);
}
@Override
public void mostraLancioDadi(int result) {
JOptionPane.showMessageDialog(null, "Hai fatto " + result, "Risultato Lancio", JOptionPane.INFORMATION_MESSAGE);
}
@Override
public void notificaErrore(String errore) {
JOptionPane.showMessageDialog(null, "Si e' verificato il seguente errore:\r\n" + errore, "ERRORE!!", JOptionPane.ERROR_MESSAGE);
}
@Override
public void notificaFineTurno(String nomeGiocatore) {
JOptionPane.showMessageDialog(null, nomeGiocatore + ", hai finito il turno", "Turno Finito", JOptionPane.INFORMATION_MESSAGE);
}
@Override
public void notificaGameOver(String nomeGiocatore) {
JOptionPane.showMessageDialog(null, "Spiacente " + nomeGiocatore + ", hai perso", "Hai Perso", JOptionPane.ERROR_MESSAGE);
}
@Override
public void notificaGiocoFinito(Soluzione sol) {
JOptionPane.showMessageDialog(null, "Spiacente, ma siete troppo scarsi\r\nIl gioco termina qui.\r\nIl colpevole � " + sol.getSospetto().getNome() + " con l'arma " + sol.getArma().getNome() + " nella stanza " + sol.getStanza().getNome() + ".", "Gioco Finito", JOptionPane.ERROR_MESSAGE);
mainFrame.dispose();
}
@Override
public void notificaGiocoVinto(String nomeGiocatore) {
JOptionPane.showMessageDialog(null, nomeGiocatore + " ha vinto!", "Gioco Finito", JOptionPane.INFORMATION_MESSAGE);
}
@Override
public void notificaInizioTurno(String nomeGiocatore) {
this.giocatore = nomeGiocatore;
JOptionPane.showMessageDialog(null, nomeGiocatore + ", e' il tuo turno", "Inizio Turno", JOptionPane.INFORMATION_MESSAGE);
}
@Override
public void refreshTabellone(CasellaRidotta[][] tabellone) {
CasellaRidotta[][] newTabellone = tabellone;
for (int i = 0; i < this.tabellone.length; i++) {
for (int j = 0; j < this.tabellone.length; j++) {
paintBorder(caselle[i][j]);
if (!this.tabellone[i][j].getOccupante().equals(newTabellone[i][j].getOccupante())) {
paintBorder(caselle[i][j]);
caselle[i][j].setEnabled(false);
caselle[i][j].setIcon(new ImageIcon(sfondiStanze.get(newTabellone[i][j].getStanza())));
caselle[i][j].setDisabledIcon(new ImageIcon(sfondiStanze.get(newTabellone[i][j].getStanza())));
if (tabellone[i][j].getTipo() == TipoCasellaEnum.PASSAGGIO) {
caselle[i][j].setIcon(new ImageIcon(immaginePassSegreto));
caselle[i][j].setDisabledIcon(new ImageIcon(immaginePassSegreto));
}
if (newTabellone[i][j].getOccupante() != "") {
BufferedImage composita = null;
if (tabellone[i][j].getTipo() == TipoCasellaEnum.PASSAGGIO) {
try {
composita = ImageUtility.composeImage(immaginePassSegreto, immaginiArmi.get(ArmiEnum.valueOf(tabellone[i][j].getOccupante())));
} catch (Exception e) {
composita = ImageUtility.composeImage(immaginePassSegreto, immaginiGiocatori.get(tabellone[i][j].getOccupante()));
} finally {
caselle[i][j].setIcon(new ImageIcon(composita));
caselle[i][j].setDisabledIcon(new ImageIcon(composita));
}
} else {
try {
composita = ImageUtility.composeImage(sfondiStanze.get(newTabellone[i][j].getStanza()), immaginiArmi.get(ArmiEnum.valueOf(newTabellone[i][j].getOccupante())));
} catch (Exception e) {
composita = ImageUtility.composeImage(sfondiStanze.get(newTabellone[i][j].getStanza()), immaginiGiocatori.get(newTabellone[i][j].getOccupante()));
} finally {
caselle[i][j].setIcon(new ImageIcon(composita));
caselle[i][j].setDisabledIcon(new ImageIcon(composita));
}
}
}
}
}
}
this.tabellone = newTabellone;
}
@Override
public void mostraCarte(String nomeGiocatore, String[] carte) {
elencoCarte.setListData((Object[]) carte);
}
}