Package ingsw.proj.cluedo.gui

Source Code of ingsw.proj.cluedo.gui.InterfacciaUtente

package ingsw.proj.cluedo.gui;

import ingsw.proj.cluedo.componenti.CongetturaRidotta;
import ingsw.proj.cluedo.componenti.Soluzione;
import ingsw.proj.cluedo.componenti.Casella.CasellaRidotta;
import ingsw.proj.cluedo.eventi.AccusaFormulataEvent;
import ingsw.proj.cluedo.eventi.AccusaFormulataListener;
import ingsw.proj.cluedo.eventi.AzioneSceltaEvent;
import ingsw.proj.cluedo.eventi.AzioneSceltaListener;
import ingsw.proj.cluedo.eventi.DestinazioneSceltaEvent;
import ingsw.proj.cluedo.eventi.DestinazioneSceltaListener;
import ingsw.proj.cluedo.eventi.IpotesiFormulataEvent;
import ingsw.proj.cluedo.eventi.IpotesiFormulataListener;
import ingsw.proj.cluedo.eventi.Listener;
import ingsw.proj.cluedo.eventi.NomiSceltiEvent;
import ingsw.proj.cluedo.eventi.NomiSceltiListener;
import ingsw.proj.cluedo.logica.AzioniEnum;

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;

/*******************************************************************************
* Classe astratta per la GUI.
*
* @author C&C
*/
public abstract class InterfacciaUtente {

  protected List<String> nomiGiocatori;
  protected CasellaRidotta[][] tabellone;
  protected List<Listener> listeners;

  /***************************************************************************
   * Costruttore
   */
  public InterfacciaUtente() {
    this.nomiGiocatori = new ArrayList<String>();
    this.listeners = new ArrayList<Listener>();
  }

  /***************************************************************************
   * Permette ai listeners di registrarsi agli eventi generati dalla classe
   *
   * @param l
   *            Listener che si vuole registrare
   *
   */
  public final synchronized void addListener(Listener l) {
    listeners.add(l);
  }

  /***************************************************************************
   * Permette ai listeners di de-registrarsi agli eventi generati dalla classe
   *
   * @param l
   *            Listener che si vuole de-registrare
   *
   */
  public final synchronized void removeListener(Listener l) {
    listeners.remove(l);
  }

  /***************************************************************************
   * Chiede all'utente una tra le possibili azioni
   *
   * @param nomeGiocatore
   *            il giocatore che deve compiere l'azione
   * @param azione
   *            le possibili azioni da compiere
   *
   */
  public abstract void chiediAzione(String nomeGiocatore, AzioniEnum[] azione);

  protected final synchronized void fireAzioneSceltaEvent(String giocatore, AzioniEnum azione) {
    AzioneSceltaEvent evento = new AzioneSceltaEvent(this, giocatore, azione);
    for (int i = 0; i < listeners.size(); i++)
      if (listeners.get(i) instanceof AzioneSceltaListener)
        ((AzioneSceltaListener) listeners.get(i)).notificaAzioneScelta(evento);
  }

  /***************************************************************************
   * Chiede i nomi dei giocatori all'utente
   */
  public abstract void chiediNomiGiocatori();

  protected final synchronized void fireNomiSceltiEvent(String[] nomi) {
    NomiSceltiEvent evento = new NomiSceltiEvent(this, nomi);
    for (int i = 0; i < listeners.size(); i++)
      if (listeners.get(i) instanceof NomiSceltiListener)
        ((NomiSceltiListener) listeners.get(i)).notificaNomiScelti(evento);
  }

  /***************************************************************************
   * Dice alla GUI di disegnare il tabellone
   *
   * @param tabellone
   *            il tabellone da disegnare
   */
  public abstract void disegnaTabellone(CasellaRidotta[][] tabellone);

  /***************************************************************************
   * Chiede all'utente di formulare un'accusa
   *
   * @param nomeGiocatore
   *            il giocatore che deve accusare
   */
  public abstract void formulaAccusa(String nomeGiocatore);

  protected final synchronized void fireAccusaFormulataEvent(String accusante, CongetturaRidotta accusa) {
    AccusaFormulataEvent evento = new AccusaFormulataEvent(this, accusante, accusa);
    for (int i = 0; i < listeners.size(); i++)
      if (listeners.get(i) instanceof AccusaFormulataListener)
        ((AccusaFormulataListener) listeners.get(i)).notificaAccusaFormulata(evento);
  }

  /***************************************************************************
   * Chiede all'utente di forumlare un'ipotesi
   *
   * @param nomeGiocatore
   *            il giocatore che deve fare l'ipotesi
   */
  public abstract void forumlaIpotesi(String nomeGiocatore);

  protected final synchronized void fireIpotesiFormulataEvent(String accusante, CongetturaRidotta ipotesi) {
    IpotesiFormulataEvent evento = new IpotesiFormulataEvent(this, accusante, ipotesi);
    for (int i = 0; i < listeners.size(); i++)
      if (listeners.get(i) instanceof IpotesiFormulataListener)
        ((IpotesiFormulataListener) listeners.get(i)).notificaIpotesiFormulata(evento);
  }

  /***************************************************************************
   * Informa la GUI circa gli appunti di un giocatore.
   *
   * @param nomeGiocatore
   *            il giocatore a cui appartengono gli appunti
   * @param note
   *            gli appunti del giocatore
   */
  public abstract void mostraAppunti(String nomeGiocatore, String[] note);

  /***************************************************************************
   * Informa la GUI circa le carte di un giocatore
   *
   * @param nomeGiocatore
   *            il giocatore a cui appartengono le carte
   * @param carte
   *            le carte del giocatore
   */
  public abstract void mostraCarte(String nomeGiocatore, String[] carte);

  /***************************************************************************
   * Informa la GUI circa l'esito del lancio dei dadi
   *
   * @param result
   *            il risultato ottenuto dal giocatore
   */
  public abstract void mostraLancioDadi(int result);

  /***************************************************************************
   * Informa la GUI circa il verificarsi di un errore
   *
   * @param errore
   *            il messaggio di errore
   */
  public abstract void notificaErrore(String errore);

  /***************************************************************************
   * Informa la GUI circa la fine del turno di un giocatore
   *
   * @param nomeGiocatore
   *            il giocatore che ha finito il turno
   */
  public abstract void notificaFineTurno(String nomeGiocatore);

  /***************************************************************************
   * Informa la GUI circa il Game Over di un giocatore
   *
   * @param nomeGiocatore
   *            il giocatore che ha perso
   */
  public abstract void notificaGameOver(String nomeGiocatore);

  /***************************************************************************
   * Informa la GUI circa la vittoria di un giocatore
   *
   * @param nomeGiocatore
   *            il giocatore che ha vinto
   */
  public abstract void notificaGiocoVinto(String nomeGiocatore);

  /***************************************************************************
   * Informa la GUI circa l'inizio del turno di un giocatore
   *
   * @param nomeGiocatore
   *            il giocatore che inizia il turno
   */
  public abstract void notificaInizioTurno(String nomeGiocatore);

  /***************************************************************************
   * Informa la GUI circa la fine del gioco
   */
  public abstract void notificaGiocoFinito(Soluzione sol);

  /***************************************************************************
   * Informa la GUI circa le destinazioni raggiungibili da un giocatore
   *
   * @param nomeGiocatore
   *            il giocatore che deve muoversi
   * @param destinazioni
   *            le destinazioni che puo' raggiungere
   */
  public abstract void chiediDestinazione(String nomeGiocatore, Point[] destinazioni);

  /***************************************************************************
   * Dice alla GUI di effettuare un refresh di solo alcune caselle
   *
   * @param tabellone
   *            il nuovo tabellone di gioco
   */
  public abstract void refreshTabellone(CasellaRidotta[][] tabellone);

  protected final synchronized void fireDestinazioneSceltaEvent(String giocatore, Point destinazione) {
    DestinazioneSceltaEvent evento = new DestinazioneSceltaEvent(this, giocatore, destinazione);
    for (int i = 0; i < listeners.size(); i++)
      if (listeners.get(i) instanceof DestinazioneSceltaListener)
        ((DestinazioneSceltaListener) listeners.get(i)).notificaDestinazioneScelta(evento);
  }

}
TOP

Related Classes of ingsw.proj.cluedo.gui.InterfacciaUtente

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.