DomainLayer.DomainControllers.CtrlJugarPartida.java Source code

Java tutorial

Introduction

Here is the source code for DomainLayer.DomainControllers.CtrlJugarPartida.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 DomainLayer.DomainControllers;

import DomainLayer.DataInterface.*;
import DomainLayer.DomainModel.*;
import TuplePair.TuplePair;
import TuplePair.TuplePairComparator;
import java.util.ArrayList;
import static java.util.Collections.sort;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.javatuples.*;

/**
 *
 * @author Bernat Montseny
 */
public class CtrlJugarPartida {
    /**
     * ctrl que parla amb la vista y crea el de login y ranking
     */
    private ControlerFactory controlerFactory;
    private DataFactory dataFactory;
    private ServiceFactory serviceFactory;
    private Partida dlPartidaActual;
    private Jugador JugadorConnectat;

    public CtrlJugarPartida() {
        controlerFactory = new ControlerFactory();
        dataFactory = new DataFactory();
        serviceFactory = new ServiceFactory();
        dlPartidaActual = null;
        JugadorConnectat = null;
    }

    /**
     *
     * @return
     * @throws Exception
     */
    public Triplet<Integer, Integer, Set<Triplet<Integer, Integer, Integer>>> crearPartida() {
        CtrlJoc2048 cJ2048 = dataFactory.getCtrlJoc2048();
        Joc2048 J2048 = cJ2048.get();
        Integer i = J2048.getIdPartida();
        J2048.setIdPartida(i + 1);
        Set<Triplet<Integer, Integer, Integer>> casellesAmbNum = JugadorConnectat.crearPartida(i);
        Integer mpunt = JugadorConnectat.getMillorPuntuacio();
        dlPartidaActual = JugadorConnectat.getPartidaActual();
        actualitzarDB(dlPartidaActual, JugadorConnectat, true, J2048);
        return Triplet.with(0, mpunt, casellesAmbNum);
    }

    public void ferAutenticacio(String userN, String password) throws Exception {
        CtrlLogin cL = controlerFactory.getCtrlLogin();
        cL.Login(userN, password);
        CtrlJugador cJ = dataFactory.getCtrlJugador();
        JugadorConnectat = cJ.getU(userN);
        System.out.println("aut");
    }

    public Quartet<Boolean, Boolean, Integer, Set<Triplet<Integer, Integer, Integer>>> FerMoviment(
            String tipusMov) {
        if (tipusMov.equals("amunt")) {
            dlPartidaActual.movimentAmunt();
        } else if (tipusMov.equals("avall")) {
            dlPartidaActual.movimentAvall();
        } else if (tipusMov.equals("dreta")) {
            dlPartidaActual.movimentDreta();
        } else if (tipusMov.equals("esquerra")) {
            dlPartidaActual.movimentEsquerra();
        }
        boolean eA = dlPartidaActual.getEstaAcabada();
        if (!eA) {
            String missatge = dlPartidaActual.comprovarPartidaGuanyada();
            if (!missatge.isEmpty()) {
                ServiceMissatgeAdapter SA = serviceFactory.getServiceMissatgeAdapter();
                SA.enviarMissatge();
                eA = true;
            }
        }
        if (!eA) {
            dlPartidaActual.nouNumero();
            dlPartidaActual.ComprovarPartidaPerduda();
            eA = dlPartidaActual.getEstaAcabada();
        }
        if (eA) {
            Integer p = dlPartidaActual.getPuntuacio();
            JugadorConnectat.actualitzaMillorPuntuacio(p);
            JugadorConnectat.switchPartida(dlPartidaActual);
        }
        boolean eG = dlPartidaActual.getEstaGuanyada();
        Integer p = dlPartidaActual.getPuntuacio();
        Set<Triplet<Integer, Integer, Integer>> CI = dlPartidaActual.casellesAmbNum();
        actualitzarDB(dlPartidaActual, JugadorConnectat, false, null);
        return Quartet.with(eA, eG, p, CI);
    }

    public ArrayList<TuplePair<String, Integer>> ObtenirRanking() throws Exception {
        CtrlRanking cR = controlerFactory.getCtrlRanking();
        return cR.ConsultarRanking(dlPartidaActual.getStrategyPuntuacio());
    }

    private void actualitzarDB(Partida p, Jugador jg, Boolean crea, Joc2048 joc) {
        AnnotationConfiguration config = new AnnotationConfiguration();
        config.addAnnotatedClass(Partida.class);
        config.addAnnotatedClass(Casella.class);
        config.addAnnotatedClass(Jugador.class);
        config.addAnnotatedClass(UsuariRegistrat.class);
        config.addAnnotatedClass(Joc2048.class);
        config.configure("hibernate.cfg.xml");
        SessionFactory factory = config.buildSessionFactory();
        Session session = factory.getCurrentSession();
        session.beginTransaction();
        if (crea) {
            session.save(p);
            session.update(joc);
        } else
            session.update(p);
        session.update(jg);
        Casella caselles[][] = p.getMatriu();
        for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 4; ++j) {
                if (crea)
                    session.save(caselles[i][j]);
                else
                    session.update(caselles[i][j]);
            }
        }
        session.getTransaction().commit();
        factory.close();
    }
}