ar.laboratorio.software.jbom.domain.JBomCore.java Source code

Java tutorial

Introduction

Here is the source code for ar.laboratorio.software.jbom.domain.JBomCore.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ar.laboratorio.software.jbom.domain;

import ar.laboratorio.software.jbom.connection.JBomConnectionManager;
import ar.laboratorio.software.jbom.core.state.JBomCoreState;
import ar.laboratorio.software.jbom.core.state.JBomCoreStateWaiting;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.joda.time.DateTime;

/**
 *
 * @author Francisco Blanco <blanco.jose.francisco@gmail.com>
 */
public class JBomCore {

    private static JBomCore instance;

    private JBomGUI jBomGUI;
    private JBomConfig jBomConfig;
    private JBomClock jBomClock;
    private JBomCoreState jBomCoreState;
    private JBomConnectionManager jBomConnectionManager;
    private Boolean jugando = true;
    private Boolean recalcularGrafo = false;
    private DateTime startTime;
    private DateTime endTime;
    private DateTime currentTime;
    private Pregunta currentQuestion;
    private Integer currentRound = 1;
    private JBomUser bomberMan;
    private List<Pregunta> preguntas = new ArrayList<Pregunta>();
    private List<JBomUser> jugadores = new ArrayList<JBomUser>();
    private List<JBomUser> jugadoresEnEspera = new ArrayList<JBomUser>();

    private JBomCore() {

    }

    public static JBomCore getInstance() {
        if (instance == null)
            instance = new JBomCore();
        return instance;
    }

    public void iniciarJBomCore() {
        jBomGUI = new JBomGUI();
        jBomConfig = new JBomConfig();
        jBomConfig.cargar();
        jBomClock = new JBomClock(instance);
        jBomCoreState = new JBomCoreStateWaiting();
        jBomConnectionManager = new JBomConnectionManager();
        jBomClock.start();
        generateRandomQuestion();
    }

    public void generateRandomQuestion() {
        currentQuestion = JBomCore.getInstance().getPreguntas()
                .get(new Random().nextInt(JBomCore.getInstance().getPreguntas().size()));
    }

    public void recalcularGrafoDeJuego() {
        for (JBomUser jBomUser : this.jugadores) {
            jBomUser.setVecinoNorte(jugadores.get(new Random().nextInt(jugadores.size())));
            jBomUser.setVecinoSur(jugadores.get(new Random().nextInt(jugadores.size())));
            jBomUser.setVecinoEste(jugadores.get(new Random().nextInt(jugadores.size())));
            jBomUser.setVecinoOeste(jugadores.get(new Random().nextInt(jugadores.size())));
        }
    }

    public void comenzarJuego() {
        jBomGUI.mostrarMensaje("Todo listo, comenzando el juego");
        startTime = DateTime.now();
        endTime = startTime.plusMinutes(
                Integer.valueOf(jBomGUI.getPantallaInicial().getInputTiempoDeJuego().getText().split(":")[0]));
        jBomGUI.getPantallaJuego().getTiempoDeJuego().setText(startTime.toString("mm:ss"));
        jBomGUI.getPantallaJuego().setNumeroDeRonda(currentRound);
        this.setUserWithBomb();
        jBomCoreState.changeState();
    }

    public void comenzarContadorNuevaRonda() {
        jBomGUI.mostrarMensaje("Nueva Ronda");
        startTime = DateTime.now();
        endTime = startTime.plusMinutes(
                Integer.valueOf(jBomGUI.getPantallaInicial().getInputTiempoDeJuego().getText().split(":")[0]));
        jBomGUI.getPantallaJuego().setNumeroDeRonda(currentRound);
        this.setUserWithBomb();
    }

    public void comenzarNuevaRonda() {
        jBomGUI.mostrarMensaje("Ronda finalizada");
        startTime = DateTime.now();
        endTime = startTime.plusSeconds(10);
        jBomGUI.getPantallaJuego().getTiempoDeJuego().setText(startTime.toString("mm:ss"));
        jBomGUI.getPantallaJuego().setNumeroDeRonda(currentRound);
        this.explodeBoom();
    }

    private void explodeBoom() {
        generateRandomQuestion();
        if (jugadores.size() > 0) {
            try {
                this.broadCastMessage("La Bombar le exploto a: " + bomberMan.getUsername());
                bomberMan.theBoomHaveExplodeOnYou();
            } catch (IOException ex) {
                jugadores.remove(bomberMan);
                Logger.getLogger(JBomCore.class.getName()).log(Level.INFO,
                        "El jugador: " + bomberMan.getUsername() + " esta caido, se procede a eliminarlo", ex);
                this.setUserWithBomb();
            }
        }
    }

    public void setUserWithBomb() {
        generateRandomQuestion();
        if (jugadores.size() > 0) {
            try {
                bomberMan = jugadores.get(new Random().nextInt(jugadores.size()));
                bomberMan.youHaveTheBomb();
            } catch (IOException ex) {
                jugadores.remove(bomberMan);
                Logger.getLogger(JBomCore.class.getName()).log(Level.INFO,
                        "El jugador: " + bomberMan.getUsername() + " esta caido, se procede a eliminarlo", ex);
                this.setUserWithBomb();
            }
        }
    }

    public void updatePlaying() {
        currentTime = DateTime.now();
        jBomGUI.getPantallaJuego().getTiempoDeJuego()
                .setText(endTime.minus(currentTime.getMillis()).toString("mm:ss"));
        if (endTime.minus(currentTime.getMillis()).getMillis() <= 0.0)
            jBomCoreState.changeState();
    }

    public void updateWaitingNewRound() {
        currentTime = DateTime.now();
        jBomGUI.getPantallaJuego().getTiempoDeJuego()
                .setText(endTime.minus(currentTime.getMillis()).toString("mm:ss"));
        if (endTime.minus(currentTime.getMillis()).getMillis() <= 0.0)
            jBomCoreState.changeState();
    }

    public void broadCastMessage(String message) {
        for (JBomUser jBomUser : jugadores) {
            jBomUser.sendMessage(message, "info", currentQuestion.toJSON());
        }
    }

    public void answerRigth() {
        bomberMan.sendMessage("Respuesta correcta, usa las flechas para deshacerte de la bomba", "rigth",
                currentQuestion.toJSON());
    }

    public void answerWrong() {
        this.broadCastMessage(bomberMan.getUsername() + " contesto incorrectamente");
        generateRandomQuestion();
        bomberMan.sendMessage("La Respesta es incorrecta!!", "wrong", currentQuestion.toJSON());
    }

    public JBomGUI getjBomGUI() {
        return jBomGUI;
    }

    public void setjBomGUI(JBomGUI jBomGUI) {
        this.jBomGUI = jBomGUI;
    }

    public void abrirPuerto() {
        JBomCore.getInstance().getjBomGUI().mostrarMensaje("Esperando por Jugadores...");
        new Thread(jBomConnectionManager).start();
    }

    public void tick() {
        this.jBomCoreState.update();
    }

    public JBomConfig getjBomConfig() {
        return jBomConfig;
    }

    public void setjBomConfig(JBomConfig jBomConfig) {
        this.jBomConfig = jBomConfig;
    }

    public Boolean getJugando() {
        return jugando;
    }

    public void setJugando(Boolean jugando) {
        this.jugando = jugando;
    }

    public List<Pregunta> getPreguntas() {
        return preguntas;
    }

    public void setPreguntas(List<Pregunta> preguntas) {
        this.preguntas = preguntas;
    }

    public void closeCore() {
        System.out.println("Cerrando El core de JBom");
        jBomClock.stop();
        System.out.println("Listo");
        System.exit(0);
    }

    public JBomClock getjBomClock() {
        return jBomClock;
    }

    public void setjBomClock(JBomClock jBomClock) {
        this.jBomClock = jBomClock;
    }

    public JBomCoreState getjBomCoreState() {
        return jBomCoreState;
    }

    public void setjBomCoreState(JBomCoreState jBomCoreState) {
        this.jBomCoreState = jBomCoreState;
    }

    public JBomConnectionManager getjBomConnectionManager() {
        return jBomConnectionManager;
    }

    public void setjBomConnectionManager(JBomConnectionManager jBomConnectionManager) {
        this.jBomConnectionManager = jBomConnectionManager;
    }

    public List<JBomUser> getJugadores() {
        return jugadores;
    }

    public void setJugadores(List<JBomUser> jugadores) {
        this.jugadores = jugadores;
    }

    public List<JBomUser> getJugadoresEnEspera() {
        return jugadoresEnEspera;
    }

    public void setJugadoresEnEspera(List<JBomUser> jugadoresEnEspera) {
        this.jugadoresEnEspera = jugadoresEnEspera;
    }

    public Boolean getRecalcularGrafo() {
        return recalcularGrafo;
    }

    public void setRecalcularGrafo(Boolean recalcularGrafo) {
        this.recalcularGrafo = recalcularGrafo;
    }

    public DateTime getStartTime() {
        return startTime;
    }

    public void setStartTime(DateTime startTime) {
        this.startTime = startTime;
    }

    public DateTime getCurrentTime() {
        return currentTime;
    }

    public void setCurrentTime(DateTime currentTime) {
        this.currentTime = currentTime;
    }

    public DateTime getEndTime() {
        return endTime;
    }

    public void setEndTime(DateTime endTime) {
        this.endTime = endTime;
    }

    public Pregunta getCurrentQuestion() {
        return currentQuestion;
    }

    public void setCurrentQuestion(Pregunta currentQuestion) {
        this.currentQuestion = currentQuestion;
    }

    public JBomUser getBomberMan() {
        return bomberMan;
    }

    public void setBomberMan(JBomUser bomberMan) {
        this.bomberMan = bomberMan;
    }

    public Integer getCurrentRound() {
        return currentRound;
    }

    public void setCurrentRound(Integer currentRound) {
        this.currentRound = currentRound;
    }

    public void endGame() {
        this.broadCastMessage("El Juego termino, el jugador ganador es: " + jugadores.get(0).getUsername());
        jugadores.get(jugadores.size() - 1).youWon();
        JBomCore.getInstance().getjBomGUI().mostrarMensaje("Juego Finalizado");
        JBomCore.getInstance().getjBomGUI().mostrarMensaje("----------------");
        JBomCore.getInstance().getjBomGUI().mostrarMensaje(" ");
        for (JBomUser jugador : jugadores) {
            JBomCore.getInstance().getjBomGUI()
                    .mostrarMensaje(jugador.getUsername() + ": " + jugador.getRondasPerdidas());
        }
    }
}