-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUIController.java
More file actions
252 lines (216 loc) · 9.26 KB
/
UIController.java
File metadata and controls
252 lines (216 loc) · 9.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
package Interface;
import javax.swing.*;
import Domini.*;
import Dades.*;
import com.google.gson.Gson;
public class UIController {
//Dades auxiliars per al funcionament de la partida
private Ranking ranking;
private int dificultat;
private String nomJugador;
private boolean jugador; // True = Màquina VS Màquina; False Jugador VS Màquina
private int torn, conf, fase;
//Tots els frames necessaris per a l'aplicació, a ampliar
private JFrame frameMenu;
private JFrame frameHelp;
private JFrame frameConfig;
private JFrame frameTauler;
private JFrame frameRanking;
private JFrame frameFinal;
private RankForm rankForm;
private TaulerPanel taulerPanel;
private PantallaFinal pantallaFinal;
/**Constructora de la classe. Prepara totes les vistes de l'aplicacio.*/
public UIController(){
//Inicialitzem classes complementaries necessaries
rankForm = new RankForm(this);
pantallaFinal = new PantallaFinal(this);
//Inicialitzem els frames necessaris en el seu estat inicial
//TODO: Ampliar segons anem implementant noves vistes
frameMenu = new JFrame("Menu Principal");
frameMenu.setContentPane(new PrincipalMenu(this).getPanel());
frameMenu.setDefaultCloseOperation(frameMenu.EXIT_ON_CLOSE);
frameMenu.pack();
frameHelp = new JFrame("Ajuda");
frameHelp.setContentPane(new HelpForm(this).getPanel());
frameHelp.setDefaultCloseOperation(frameHelp.EXIT_ON_CLOSE);
frameHelp.pack();
frameConfig = new JFrame("Configuració de Partida");
frameConfig.setContentPane(new Configurations(this).getPanel());
frameConfig.setDefaultCloseOperation(frameHelp.EXIT_ON_CLOSE);
frameConfig.pack();
/*NO S'HAURIA DE GENERAR ARA, PERO DE MOMENT ES QUEDA AIXI*/
frameTauler = new JFrame("Tauler");
frameTauler.setContentPane(new TaulerPanel(15, 4, 5, this, "Placeholder")); //TODO: valors experimentals
frameTauler.setDefaultCloseOperation(frameHelp.EXIT_ON_CLOSE);
frameTauler.pack();
frameRanking = new JFrame("Ranking");
frameRanking.setContentPane(rankForm.getPanel());
frameRanking.setDefaultCloseOperation(frameHelp.EXIT_ON_CLOSE);
frameRanking.pack();
//TAMPOC S'HAURIA DE GENERAR AQUI*/
frameFinal = new JFrame("PantallaFinal");
frameFinal.setContentPane(pantallaFinal.getPanel());
frameFinal.setDefaultCloseOperation(frameHelp.EXIT_ON_CLOSE);
frameFinal.pack();
}
/**Funció per a iniciar la visibilitat de les vistes necessàries.*/
public void inicialitza(){
//TODO: Aquesta secció s'ha d'ampliar amb els frames necessaris
frameMenu.setVisible(true);
frameHelp.setVisible(false);
frameConfig.setVisible(false);
frameTauler.setVisible(false);
frameRanking.setVisible(false);
frameFinal.setVisible(false);
}
//---------------------FUNCIONS DE CANVI DE FRAME---------------------------//
/** Funció que permet canviar entre el frame d'ajuda i el menú principal.*/
public void helpToMenu(){
frameHelp.setVisible(false);
frameMenu.setVisible(true);
}
/** Funció que permet canviar entre el frame del menú principal i l'ajuda.*/
public void menuToHelp(){
frameMenu.setVisible(false);
frameHelp.setVisible(true);
}
/** Funció que permet canviar entre el frame de configuració i el menú principal.*/
public void configurationsToMenu(){
frameConfig.setVisible(false);
frameMenu.setVisible(true);
}
/** Funció que permet canviar entre el menú principal i el frame de configuració.
* En cas d'existir una partida guardada, dona l'opcio de restaurar-la. Si no es
* restaura, es borra.*/
public void menuToConfigurations(){
//Comprovem si existeix una partida guardada.
SaveGame savegame = new SaveGame();
if(savegame.exists()){
//TODO: dialog que retorna opcio
Object[] options = {"Sí", "No"};
JDialog dialog = new JDialog();
int opcio = JOptionPane.showOptionDialog(dialog,
"S'ha detectat una aprtida guardada. Vols restaurar-la?\n" +
"(No restaurar-la implica borrar les dades de guardat)",
"Restaurar partida",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[1]);
if(opcio == 0){
//Llegim partida guardada, creem frame de tauler i restaurem el contingut visual
String stringJSON;
Gson gson = new Gson();
stringJSON = savegame.load();
Partida partida = gson.fromJson(stringJSON, Partida.class);
taulerPanel = new TaulerPanel(15, partida.getLineSize(), partida.getNumColors(), this, partida.getNomHuma());
frameTauler = new JFrame("Tauler");
frameTauler.setContentPane(taulerPanel);
frameTauler.setDefaultCloseOperation(frameHelp.EXIT_ON_CLOSE);
frameTauler.pack();
taulerPanel.restauraPartida(partida);
//Anem al frame del tauler directament
frameMenu.setVisible(false);
frameTauler.setVisible(true);
}else{
savegame.clear();
frameMenu.setVisible(false);
frameConfig.setVisible(true);
}
}else{
frameMenu.setVisible(false);
frameConfig.setVisible(true);
}
}
/** Funció que permet canviar entre el menú de configuració i el tauler del joc*/
public void configurationsToTauler(){
//TODO: falta passar els parametres de humaVSpc o pcVSpc
int numLinies, numColumnes, numColors;
numLinies = 15;
switch(dificultat){
case 0: //Easy
numColumnes = 3;
numColors = 4;
break;
case 1: //Normal
numColumnes = 4;
numColors = 5;
break;
case 2: //Difficult
numColumnes = 5;
numColors = 6;
break;
default:
numColumnes = 4;
numColors = 5;
break;
}
//Generació nova vista de tauler personalitzada
frameTauler = new JFrame("Tauler");
taulerPanel = new TaulerPanel(numLinies, numColumnes, numColors, this, nomJugador);
frameTauler.setContentPane(taulerPanel);
frameTauler.setDefaultCloseOperation(frameHelp.EXIT_ON_CLOSE);
frameTauler.pack();
frameConfig.setVisible(false);
frameTauler.setVisible(true);
}
/** Funció que permet canviar entre el menú principal i el frame de ranking.*/
public void menuToRanking(){
frameMenu.setVisible(false);
frameRanking.setVisible(true);
}
/**Funcio que permet canviar entre el frame de ranking i el menu principal*/
public void rankingToMenu(){
frameRanking.setVisible(false);
frameMenu.setVisible(true);
}
/**Funcio que permet canviar entre el frame Final i el menu principal*/
public void finalToMenu(){
frameFinal.setVisible(false);
frameMenu.setVisible(true);
}
/** Funció que permet passar del tauler al menú principal. Guarda l'estat de la partida si és necessari.
* @param guardar Si volem guardar la partida, guardar = 1. 0 altrament.*/
public void taulerToMenu(boolean guardar){
if (guardar){
taulerPanel.guardaPartida();
}
//No destruim el tauler ja que s'haurà de recrear per arribar aquí un altre cop i ja es farà llavors.
frameTauler.setVisible(false);
frameMenu.setVisible(true);
}
/** Funció que permet passar del tauler a la pantalla de final de partida.*/
public void taulerToFinal(String nom1, String nom2, int punts1, int punts2){
pantallaFinal.setLabels(nom1, nom2, punts1, punts2);
//Fem update del ranking de la GUI
refreshRanking();
//Canviem el frame
frameTauler.setVisible(false);
frameFinal.setVisible(true);
}
//-------------------------PAS DE PARAMETRES---------------------------------//
public void setDificultat(int n){
dificultat = n;
}
public void setNomJugador(String nom) {nomJugador = nom;}
public void setJugador(boolean b){
jugador = b;
}
//------------------------FUNCIONS AUXILIARS---------------------------------//
/** Funció que llegeix el ranking i fa refresh de la taula gràfica*/
public void refreshRanking(){
ranking = new Ranking();
ranking.inicialitza();
rankForm.updateRankTable(ranking.toString());
}
//-----------------------------MAIN------------------------------------------//
//Funció main, potser en un futur la implementem en una classe a part.
//Fins que no trobem raons per no fer-ho, s'implementarà aquí.
public static void main(String args[]){
UIController control = new UIController();
control.inicialitza();
control.refreshRanking();
}
}