Package ingsw.proj.cluedo.gui.swing

Source Code of ingsw.proj.cluedo.gui.swing.InterfacciaSwing$PulsanteNumeroActionListener

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);
  }
}
TOP

Related Classes of ingsw.proj.cluedo.gui.swing.InterfacciaSwing$PulsanteNumeroActionListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.