/*
* 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.event.ActionEvent;
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() {
//creo els 4 jugadors
jugadors = new LinkedList();
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();
}
//Activa les cartes que no han estat tirades de la gui
/* private void activarJbCartes(Gui gui) {
//Afegir un if getJbCarta..getIcon != null
gui.getJbCarta1().setEnabled(true);
gui.getJbCarta2().setEnabled(true);
gui.getJbCarta3().setEnabled(true);
gui.getJbCarta4().setEnabled(true);
gui.getJbCarta5().setEnabled(true);
gui.getJbCarta6().setEnabled(true);
gui.getJbCarta7().setEnabled(true);
gui.getJbCarta8().setEnabled(true);
gui.getJbCarta9().setEnabled(true);
gui.getJbCarta10().setEnabled(true);
gui.getJbCarta11().setEnabled(true);
gui.getJbCarta12().setEnabled(true);
}
*/
private void iniciarComponents() {
/*//PQ S'EXECUTA 2 VEGADES I LES I I LES EOID NO COINCIDEIXEN??
for (int i = 0; i < 4; i++) {
Gui g = new Gui(i, this);
llistaGuis.add(g);
System.out.println(g.getEoid() +" eiods " + llistaGuis.get(i).getEoid() + " "+ i);
}
for (Gui g : llistaGuis){
System.out.println("De la llista" + g.getEoid());
}
*/
//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());
}
*/
//FALTA POSAR BÉ UTILITZANT L'ARRAI
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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());
}
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(2, gui);
}
public void gestionarAccioBotoCantarBastos(Gui gui, ActionEvent evt) {
System.out.println("S'ha fet un click al botó de cantar Bastos.");
accioCantarTrumfo(3, 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);
}
public void gestionarAccioBotoContrar(Gui gui, ActionEvent evt) {
System.out.println("S'ha fet un click al botó de cantar Contar.");
}
//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();
//Em falta repassar a tot arreu on faig quiReparteix%4 !!!!!!
//S'ha d'activar el botó de qui repartirà desprès
llistaGuis.get((partida.getQuiReparteix() + 1) % 4).getJbRepartir().setEnabled(true);
//desactivar el botó de nova baza (els desactivo tots) fins que no es torni a repartir
for (Gui g : llistaGuis) {
System.out.println("deasctivant novA BASA n: " + g.getEoid());
g.getJbNovaBasa().setEnabled(false);
}
//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());
//Activem les cartes del jugador quiComenca (Nomès les que no s'han tirat)
//activarJbCartes(llistaGuis.get(partida.getDatActual().getjugadorQueComenca()));
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)
llistaGuis.get(nosecomferquivullquecomenci).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
//
}
//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.");
//Falta treure les cartes del tapet
partida.nouDat();
//Pinto les cartes per cada gui
for (int i = 0; i < 4; i++) {
pintaCartes(llistaGuis.get(i), jugadors.get(i));
}
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);
}
//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
//System.out.println(cartes12.get(0));
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
llistaGuis.get(partida.getDatActual().getjugadorQueComenca()).getJbNovaBasa().setEnabled(true);
}
}
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
llistaGuis.get((partida.getQuiReparteix() + 1) % 4).getJbNovaBasa().setEnabled(true);
}
public void retirarCartesTapet(){
for (int i = 0; i < 4; i++) {
cartesTapet.get(i).pintaCartaTapet(null);
}
}
}