Package aplicacio

Source Code of aplicacio.Controlador

/*
* Controlador.java
*/
package aplicacio;

import domini.Carta;
import domini.Jugador;
import domini.Marcador;
import domini.Partida;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JButton;
import presentacio.Gui;

/**
* Modela el controlador façana de l'aplicació.
* @author acots jamoros
*/
public class Controlador implements Runnable {

    private List<Gui> llistaGuis;
    private Partida partida;
    private List<Jugador> jugadors;  //No sé si ho hauria de posar aquí
    private List<CartaTapet> cartesTapet; //posaré les 4 cartes del tapet

    public Controlador() {
         //modificacio Julio per a la resolucio (linies passades per Quim)
        //Podríem estudiar quina és la resolució de la pantalla que juga i en funció d'aquesta
        //fer una geometria variable de les cartes i posició al taulell de tots els elements.

        final Toolkit t = Toolkit.getDefaultToolkit();
        final int ppp = t.getScreenResolution(); // Píxels per posada
        final int w = t.getScreenSize().width;  // Amplada en píxels
        final int h = t.getScreenSize().height;  // Altura en píxels
        System.out.println("Resolució de la pantalla ");
        System.out.println("Width = " + w);
        System.out.println("Height = " + h);
        System.out.println("Píxels per polsada = " + ppp);


        //creo els 4 jugadors
        jugadors = new LinkedList<Jugador>();
        for (int i = 0; i < 4; i++) {
            jugadors.add(new Jugador()); //lhaure de definir judador per tenir més informació
        }

        //creo les 4 gui  (hauria de passar informació dels jugadors..)
        llistaGuis = new LinkedList<Gui>();

        //Creo les cartes del tapet (s'ahuria de fer una classe amb gui-jugador i cartaTapet??? No pq nomès tindré una gui
        cartesTapet = new LinkedList<CartaTapet>();

        EventQueue.invokeLater(this);
        this.run();
    }

    public void run() {
        iniciarComponents();
        //He d'haver creat els jugadors i passar-li'
        //partida = new Partida();

    }

  
    private void iniciarComponents() {

        //així és molt cutre però si ho faig amb for tinc problemes amb el eoid de la gui
        Gui g1 = new Gui(0, this);
        Gui g2 = new Gui(1, this);
        Gui g3 = new Gui(2, this);
        Gui g4 = new Gui(3, this);
        llistaGuis.add(g1);
        llistaGuis.add(g2);
        llistaGuis.add(g3);
        llistaGuis.add(g4);

        /*        //Crea una llista de 8 guis, però amb les eoid que toca. COMPROVACIÓ
        System.out.println("size llistaGuis " + llistaGuis.size());
        for (int i = 0; i < 4; i++){
        System.out.println(llistaGuis.get(i).getEoid());
        }
         */
       
        llistaGuis.get(0).getJlParella1NomJugador1().setOpaque(true);
        llistaGuis.get(0).getJlParella1NomJugador1().setForeground(Color.red);
        llistaGuis.get(2).getJlParella1NomJugador2().setForeground(Color.red);
        llistaGuis.get(1).getJlParella2NomJugador1().setForeground(Color.red);
        llistaGuis.get(3).getJlParella2NomJugador2().setForeground(Color.red);
        llistaGuis.get(0).setLocation(10, 20);
        llistaGuis.get(1).setLocation(160, 20);
        llistaGuis.get(2).setLocation(310, 20);
        llistaGuis.get(3).setLocation(460, 20);
        llistaGuis.get(0).setVisible(true);
        llistaGuis.get(1).setVisible(true);
        llistaGuis.get(2).setVisible(true);
        llistaGuis.get(3).setVisible(true);

        //Creo un arrai de cartesTapet (poso una cartatapet per cada jugador)
        for (int i = 0; i < 4; i++) {
            cartesTapet.add(new CartaTapet(llistaGuis, i));
        }

        //inicialitzo les 4 cartaTapet a null
        for (int i = 0; i < 4; i++) {
            cartesTapet.get(i).pintaCartaTapet(null);
        }

        //Creo un marcador perqè la partida encara no s'ha creat
        Marcador m = new Marcador();
        pintaMarcador(m);
    }

    public void gestionarAccioBotoCarta1(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 1 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta1());
        gui.getJbCarta1().setEnabled(false);
    }

    public void gestionarAccioBotoCarta2(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 2 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta2());
        gui.getJbCarta2().setEnabled(false);
    }

    public void gestionarAccioBotoCarta3(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 3 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta3());
        gui.getJbCarta3().setEnabled(false);
    }

    public void gestionarAccioBotoCarta4(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 4 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta4());
        gui.getJbCarta4().setEnabled(false);
    }

    public void gestionarAccioBotoCarta5(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 5 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta5());
        gui.getJbCarta5().setEnabled(false);
    }

    public void gestionarAccioBotoCarta6(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 6 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta6());
        gui.getJbCarta6().setEnabled(false);
    }

    public void gestionarAccioBotoCarta7(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 7 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta7());
        gui.getJbCarta7().setEnabled(false);
    }

    public void gestionarAccioBotoCarta8(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 8 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta8());
        gui.getJbCarta8().setEnabled(false);
    }

    public void gestionarAccioBotoCarta9(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 9 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta9());
        gui.getJbCarta9().setEnabled(false);
    }

    public void gestionarAccioBotoCarta10(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 10 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta10());
        gui.getJbCarta10().setEnabled(false);
    }

    public void gestionarAccioBotoCarta11(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 11 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta11());
        gui.getJbCarta11().setEnabled(false);
    }

    public void gestionarAccioBotoCarta12(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de la carta 12 del jugador" + gui.getEoid());
        tirarJBCarta(gui, gui.getJbCarta12());
        gui.getJbCarta12().setEnabled(false);
    }

    public void gestionarAccioBotoCantarOros(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar oros.");
        accioCantarTrumfo(0, gui);
    }

    public void gestionarAccioBotoCantarCopes(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar Copes.");
        accioCantarTrumfo(1, gui);
    }

    public void gestionarAccioBotoCantarEspases(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar Espases.");
        accioCantarTrumfo(3, gui);
    }

    public void gestionarAccioBotoCantarBastos(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar Bastos.");
        accioCantarTrumfo(2, gui);
    }

    public void gestionarAccioBotoCantarButifarra(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar Butifarra.");
        accioCantarTrumfo(4, gui);
    }

    public void gestionarAccioBotoPassar(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar Passar.");
        //desactivem els botons del trumfo i del propi botó passar
        desActivarBotonsCantar(gui);
        gui.getJbPassar().setEnabled(false);

        //activem els botons de cantar trumfo del company
        int company = (gui.getEoid() + 2) % 4;
        Gui guiCompany = llistaGuis.get(company);
        activarBotonsCantar(guiCompany);

        //deixem d'estar a primer pla i passa a estar-ho el company
        gui.setAlwaysOnTop(false);
        guiCompany.setAlwaysOnTop(true);
        guiCompany.toFront();
    }

    //Es poden ordenar les cartes en qualsevol moment. Quan s'han ordenat es desactiva
    public void gestionarAccioBotoOrdenar(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar Contar.");
        int jugador = gui.getEoid();
        Collections.sort(jugadors.get(jugador).getCartesJugador());
        pintaCartes(gui, jugadors.get(jugador));
        gui.getJbOrdenar().setEnabled(false);
    }

    //Nomès estarà actiu pel jugador quiComenca (variable del datActual)
    //Activarà les seves cartes perquè pugui clicar-les
    public void gestionarAccioBotoNovaBasa(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de cantar nova Basa.");

        //Primer mirem si ja és la última basa (s'ha d'apretar el botó una vegada s'han acabat les cartes)
        //ACABEM EL DAT
        if (partida.getDatActual().sHaAcabatElDat()) {
            System.out.println("S'ha acabat el dat.");
            //retirem les cartes del tapet
            retirarCartesTapet();

            //desactivar el botó de nova baza i les gui (els desactivo tots) fins que no es torni a repartir
            for (Gui g : llistaGuis) {
                g.getJbNovaBasa().setEnabled(false);
                g.setAlwaysOnTop(false);
            }

             //S'ha d'activar el botó de qui repartirà desprès i la seva gui
            Gui g = llistaGuis.get((partida.getQuiReparteix() + 1) % 4);
            g.getJbRepartir().setEnabled(true);
            g.setAlwaysOnTop(true);
            g.toFront();

            //Actualitzo el marcador de la partida
            partida.actualitzaMarcador();
            pintaMarcador(partida.getMarcador());
            System.out.println("Marcador de la partida: " + partida.getMarcador());
        }
        //Si no és la última, faig la basa
        else {
            System.out.println("Ha de començar el jugador" + partida.getDatActual().getjugadorQueComenca());
         
            //Ull viu: modificacio Julio
            //Passem a primer pla el taulell que començara
            llistaGuis.get(partida.getDatActual().getjugadorQueComenca()).toFront();

            //truquillo per fer que l'anterior tapet no estigui a primer pla
            //llistaGuis.get( (partida.getDatActual().getjugadorQueComenca() +3 ) % 4 ).setAlwaysOnTop(false);

            llistaGuis.get(partida.getDatActual().getjugadorQueComenca()).setAlwaysOnTop(true);

            retirarCartesTapet();

            //Fem una baza
            partida.getDatActual().baza();

            //Desactivar el botó novaBasa  (Activar el del que ha guanyat ho fan les cartes)
            gui.getJbNovaBasa().setEnabled(false);
        }
    }

    public void gestionarAccioIniciarPartida(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó de iniciar la partida.");
        partida = new Partida(jugadors);
        partida.iniciaPartida();
        //Falta desactivar tots els botons excepte el de repartir del jugador 0
        //que es quiReparteix de moment
        System.out.println("Comencem la partida, reparteix " + partida.getQuiReparteix());
        //Desactivem els botons iniciarPartida de totes les gui

        for (Gui a : llistaGuis) {
            a.getJbSIniciarPartida().setEnabled(false);

        }
        int nosecomferquivullquecomenci = 0;
        //Activem el botó de repartir les cartes del quiReparteix (del jugador 0)
        Gui r = llistaGuis.get(nosecomferquivullquecomenci);
        r.getJbRepartir().setEnabled(true);
        //ATENCIO: en comptes del 0 hi hauria d'haver
        // partida.getQuiReparteix() però no em va bé pq quiReparteix està inicialitzat a -1

        //Poso a primer pla la gui del jugador que ha de repartir
        r.setAlwaysOnTop(true);
        r.toFront();
    }

    //Hauria de dir-se Nou Dat
    //Nomès estarà actiu pel jugador (quiReparteix) (el que reparteix)
    public void gestionarAccioBotoRepartir(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click al botó repartir.");

        partida.nouDat();
        //Pinto les cartes per cada gui i acciono els botons
        for (int i = 0; i < 4; i++) {
            Gui g = llistaGuis.get(i);
            pintaCartes(g, jugadors.get(i));
            g.getJbCarta1().setEnabled(true);
            g.getJbCarta2().setEnabled(true);
            g.getJbCarta3().setEnabled(true);
            g.getJbCarta4().setEnabled(true);
            g.getJbCarta5().setEnabled(true);
            g.getJbCarta6().setEnabled(true);
            g.getJbCarta7().setEnabled(true);
            g.getJbCarta8().setEnabled(true);
            g.getJbCarta9().setEnabled(true);
            g.getJbCarta10().setEnabled(true);
            g.getJbCarta11().setEnabled(true);
            g.getJbCarta12().setEnabled(true);
        }
        System.out.println("Comencem el dat, reparteix " + partida.getQuiReparteix());

        //desactivar el botó repartir que estava activat
        llistaGuis.get(partida.getQuiReparteix()).getJbRepartir().setEnabled(false);

        //gestionar els botons contro, passo
        activarBotonsCantar(gui);
        gui.getJbPassar().setEnabled(true);

        //activar tots els botons ordenar
        for (int i = 0; i < 4; i++) {
            llistaGuis.get(i).getJbOrdenar().setEnabled(true);
        }
    }

    //Hauria de començar la partida aquí
    public void gestionarAccioMenuItemNovaPartiva(Gui gui, ActionEvent evt) {
        System.out.println("S'ha fet un click menú item Nova Partida.");
    }

    public static void main(String args[]) {
        new Controlador();
    }

    private void pintaCartes(Gui gui, Jugador jugador) {
        //Per cada carta la posem al seu botó
        //No controlem exceptions perquè segur que n'hi ha 12
        List<Carta> cartes12 = jugador.getCartesJugador();
        gui.getJbCarta1().setIcon((cartes12.get(0).getImatge()));
        gui.getJbCarta2().setIcon((cartes12.get(1).getImatge()));
        gui.getJbCarta3().setIcon((cartes12.get(2).getImatge()));
        gui.getJbCarta4().setIcon((cartes12.get(3).getImatge()));
        gui.getJbCarta5().setIcon((cartes12.get(4).getImatge()));
        gui.getJbCarta6().setIcon((cartes12.get(5).getImatge()));
        gui.getJbCarta7().setIcon((cartes12.get(6).getImatge()));
        gui.getJbCarta8().setIcon((cartes12.get(7).getImatge()));
        gui.getJbCarta9().setIcon((cartes12.get(8).getImatge()));
        gui.getJbCarta10().setIcon((cartes12.get(9).getImatge()));
        gui.getJbCarta11().setIcon((cartes12.get(10).getImatge()));
        gui.getJbCarta12().setIcon((cartes12.get(11).getImatge()));
    }

    private void tirarJBCarta(Gui gui, JButton jBCarta) {

        //Miro de quin jugador és la gui (AQUI NECESSITARIA LA CLASSE GUIjUGADOR)
        int jugadorQueTira = gui.getEoid();

        //pinto la carta a tots els tapets en la posició del eoid
        cartesTapet.get(jugadorQueTira).pintaCartaTapet(jBCarta.getIcon());

        //afegeixo la carta a la llista de la basa
        Carta c = new Carta(jBCarta.getIcon());
        partida.getDatActual().getBasaActual().add(c);

        //trec la icona del botó de la carta de la gui que l'acciona
        jBCarta.setIcon(null);

        //si és l'última carta de la basa, gestiono el que s'ha de fer
        //ACABEM LA BASA
        if (partida.getDatActual().eslUltimaCartaDeLaBasa()) {
            System.out.println("S'ha acabat la basa");
            partida.getDatActual().acabarBasa();

            //activo novaBasa del guanyador i la seva gui
            //(primer desactivo totes les gui)
            for (Gui g : llistaGuis) {
                g.setAlwaysOnTop(false);
            }
            Gui r = llistaGuis.get(partida.getDatActual().getjugadorQueComenca());
            r.getJbNovaBasa().setEnabled(true);
            r.setAlwaysOnTop(true);
            r.toFront();
        }
        //Si no, activo la gui seguent
        else {
            //temporitzador:
            //for (long i = 0L; i < 1000000000L; i++) {
            //}
            gui.setAlwaysOnTop(false);
            Gui r = llistaGuis.get((jugadorQueTira + 1) % 4);
            r.setAlwaysOnTop(true);
            r.toFront();
        }
    }

    private void pintaMarcador(Marcador m) {
        String pNos = new Integer(m.getNos()).toString();
        String pVos = new Integer(m.getVos()).toString();
        for (Gui gui : llistaGuis) {
            gui.getJlParella1Punts().setText(pNos);
            gui.getJlParella2Punts().setText(pVos);
        }
    }

    //Activo tots els botons dels possibles trumfo
    private void activarBotonsCantar(Gui gui) {
        gui.getJbCantarBastos().setEnabled(true);
        gui.getJbCantarButifarra().setEnabled(true);
        gui.getJbCantarCopes().setEnabled(true);
        gui.getJbCantarEspases().setEnabled(true);
        gui.getJbCantarOros().setEnabled(true);
    }

    //Activo tots els botons dels possibles trumfo
    private void desActivarBotonsCantar(Gui gui) {
        gui.getJbCantarBastos().setEnabled(false);
        gui.getJbCantarButifarra().setEnabled(false);
        gui.getJbCantarCopes().setEnabled(false);
        gui.getJbCantarEspases().setEnabled(false);
        gui.getJbCantarOros().setEnabled(false);
    }

    private void accioCantarTrumfo(int pal, Gui gui) {
        //Poso el trumfo del dat
        partida.getDatActual().setTrumfo(pal);

        //activo i desactivo els botons pertinents
        desActivarBotonsCantar(gui);
        gui.getJbPassar().setEnabled(false);

        //Ha de posar-se actiu nomès el botó novaBasa de quiReparteix + 1
        Gui r = llistaGuis.get((partida.getQuiReparteix() + 1) % 4);
        r.getJbNovaBasa().setEnabled(true);

        //Es posa a davant la gui de qui reparteix + 1. Per fer-ho primer les desactivo totes
        for (Gui g : llistaGuis) {
            g.setAlwaysOnTop(false);
        }
        r.setAlwaysOnTop(true);
        r.toFront();

    }

    public void retirarCartesTapet() {
        for (int i = 0; i < 4; i++) {
            cartesTapet.get(i).pintaCartaTapet(null);
        }
    }
}
TOP

Related Classes of aplicacio.Controlador

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.