PartidaManager.java :  » Game » superpalitos » org » pvs » superpalitos » Java Open Source

Java Open Source » Game » superpalitos 
superpalitos » org » pvs » superpalitos » PartidaManager.java
/*
 * PartidaManager
 * 
 * Pollo Verde Software
 * 
 * Created on 15-06-2006
 * 
 * Este programa se distribuye segun la licencia GPL v.2 o posteriores y no
 * tiene garantias de ningun tipo. Puede obtener una copia de la licencia GPL o
 * ponerse en contacto con la Free Software Foundation en http://www.gnu.org
 */
package org.pvs.superpalitos;

import java.util.LinkedList;

import org.pvs.palitos.Jugador;
import org.pvs.palitos.Partida;
import org.pvs.palitos.PartidaListener;
import org.pvs.palitos.Tablero;

/**
 * 
 * @author Angel Luis Calvo Ortega
 */
public class PartidaManager implements PartidaListener {
  private static long ID_COUNT = 0;
  
  /* Modo de la partida */
  public static final int PARTIDA_FREE = 0;
  public static final int PARTIDA_TIMEATTACK = 1;
  public static final int PARTIDA_2 = 2;
  
  private Jugador j1, j2;
  private Tablero tablero;
  //private int type;
  // private int mode;
  private Partida partida;
  
  // accounting
  private long time;
  private int j1Score, j2Score;
  private long id;
  
  private boolean jugando, j1Turn;
  private LinkedList<PartidaListener> partidaListeners;
  private SuperPalitos sp;
  
  /**
   * @param j1 Jugador uno
   * @param j2 Jugador dos
   * @param tablero El tablero
   */
  public PartidaManager(Jugador j1, Jugador j2, Tablero tablero, SuperPalitos sp) {
    this(j1, j2, tablero, true, sp);
  }
  
  /**
   * @param j1 Jugador uno
   * @param j2 Jugadoro dos
   * @param tablero El tablero
   * @param j1Turn Indica si mueve el jugador uno primero
   */
  public PartidaManager(Jugador j1, Jugador j2, Tablero tablero, boolean j1Turn, SuperPalitos sp) {
    id = ID_COUNT++;
    
    this.j1 = j1;
    this.j2 = j2;
    this.tablero = tablero;
    this.j1Turn = j1Turn;
    this.sp = sp;
    
    this.tablero.setId(id);
    
    partidaListeners = new LinkedList<PartidaListener>();
    jugando = false;
  }
  
  /**
   * Comienza la partida
   */
  public void play() {
    if(!jugando) {
      partida = new Partida(j1, j2, tablero, j1Turn);
      partida.addPartidaListener(this);
      tablero.setMarcador(j1.getNombre() + "  " + j1Score + " - " + j2Score + "  " + j2.getNombre());
      /*Iterator it = partidaListeners.iterator();
      while(it.hasNext()) {
        partida.addPartidaListener((PartidaListener)it.next());
      }*/
      partida.start();
      time = System.currentTimeMillis();
      jugando = true;
      j1Turn = !j1Turn;
    }
  }

  @Override
  public void cambiaTurno(String s) {
  }

  @Override
  public void finPartida(boolean j1Winner) {
    time = System.currentTimeMillis() - time;
    jugando = false;
    if(j1Winner) {
      j1Score++;
    } else {
      j2Score++;
    }
    
    int opt = sp.finJuego((j1Winner)?j1.getNombre():j2.getNombre(), time);
    if(opt == SuperPalitos.FIN_JUEGO_CONTINUAR) {
      replay();
    } else if(opt == SuperPalitos.FIN_JUEGO_TERMINAR) {
      sp.removePartida(this);
      end();
    }
  }
  
  /**
   * Comienza una nueva partida
   */
  public void replay() {
    if(!jugando) {
      play();
    }
  }
  
  /**
   * Termina la partida
   */
  public void end() {
    j1.terminar();
    j2.terminar();
    tablero.terminar();
  }
  
  public void addPartidaListener(PartidaListener partidaListener) {
    partidaListeners.addLast(partidaListener);
  }

  public long getId() {
    return id;
  }
  
  public boolean estaJugandgo(Jugador j) {
    return j1 == j || j2 == j;
  }
  
  @Override
  public boolean equals(Object obj) {
    if(!(obj instanceof PartidaManager)) {
      return false;
    }
    
    PartidaManager pm = (PartidaManager)obj;
    return id == pm.getId();
  }

  @Override
  public int hashCode() {
    return (int)id;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.