codice:
package soup;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
@SuppressWarnings("serial")
public class Partita extends JPanel{
private Tessera[] ts; //Contiene le tessere visualizzate
private ImageIcon[] v; //contiene le immagini da associare alle tessere
private int[]cont; //Tiene conto del numero di assegnazioni di un'immagine
private Tessera[]confronto=new Tessera[2]; //contiene le tessere selezionate
private GridLayout gl;
private ScorePanel s; //Pannello con le informazioni di gioco
private Suono ok;
private Suono end;
private JDialog avviso;
private JDialog avviso2;
private int numCoppie; //Numero di coppie visualizzate
private int sel=0; //Numero di tessere selezionate
private int punteggio;
private int tentativi;
private int finePartita; //Coppie trovate
private Timer pausa; //Timer per aiuto "svela tessere per 2 secondi"
/**
* @param tes
* Numero totale di tessere da visualizzare
* @param imgs
* Numero di immagini da utilizzare
* @param righe
* Numero di righe dell'area di gioco
* @param col
* Numero di colonne dell'area di gioco
*/
public Partita(int tes,int imgs,int righe,int col){
this.s=new ScorePanel();
this.ts=new Tessera[tes];
this.v=new ImageIcon[10];
this.cont=new int[10];
this.confronto=new Tessera[2];
this.numCoppie=(tes/2);
this.gl=new GridLayout(righe,col);
setBackground(new Color(45,105,238));
setLayout(gl);
gl.setVgap(37);
gl.setHgap(20);
this.ok=new Suono("Data/Cashreg.wav");
this.end=new Suono("Data/Applause.wav");
this.punteggio=0;
this.tentativi=0;
this.finePartita=0;
v[0]=new ImageIcon("prof/.....jpg");
v[1]=new ImageIcon("prof/.....jpg");
v[2]=new ImageIcon("prof/.....jpg");
v[3]=new ImageIcon("prof/.....jpg");
v[4]=new ImageIcon("prof/.....jpg");
v[5]=new ImageIcon("prof/.....jpg");
v[6]=new ImageIcon("prof/.....jpg");
v[7]=new ImageIcon("prof/.....jpg");
v[8]=new ImageIcon("prof/.....jpg");
v[9]=new ImageIcon("prof/.....jpg");
Random r=new Random(); //Generatore di numeri casuali
for(int i=0;i<cont.length;i++)
cont[i]=0;
int conteggio=0; //Numero di ripetizioni della stessa immagine
if(imgs==4) //Se la difficoltà è facile
conteggio=4;
else //Difficoltà intermedia o difficile DA AGGIUSTARE
conteggio=2;
c: for(int i=0;i<ts.length;i++){
int x=r.nextInt(imgs); //Sceglie casualmente un'immagine
if(cont[x]<conteggio){
ts[i]=new Tessera(v[x],x,i);
cont[x]++;
}
if(ts[i]==null){ //Se non è stata associata un'immagine alla tessera
i--;
continue c;
}
final int a=i;
ts[i].getTB().addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
ts[a].getTB().setEnabled(false);
if(!s.isRunning()) //La selezione della prima
s.startTimer(); //tessera fa partire il Timer
if(sel==0){ //Se non ci sono tessere selezionate
confronto[sel++]=ts[a];
}
else{ //E' già attiva un'altra tessera
confronto[sel]=ts[a]; //quindi si esegue il confronto
if(confronto[0].getEQ()==confronto[1].getEQ()){
//Le Tessere sono uguali
confronto[0].getTB().setEnabled(false);
confronto[1].getTB().setEnabled(false);
confronto[0].getTB().setVisible(false);
confronto[1].getTB().setVisible(false);
tentativi++;
punteggio+=10;
sel=0;
finePartita++;
ok.play();
s.aggiornaPunti(punteggio,tentativi);
}
else{
//Tessere diverse
confronto[0].getTB().setEnabled(true);
confronto[1].getTB().setEnabled(true);
confronto[0].getTB().setSelected(false);
confronto[1].getTB().setSelected(false);
tentativi++;
punteggio-=2;
sel=0;
s.aggiornaPunti(punteggio,tentativi);
}
}
if(finePartita==numCoppie){
//Tutte le coppie sono state trovate
terminaPartita();
}
}
});
}
for(int i=0;i<ts.length;i++){ //Aggiunge le tessere al JPanel
add(ts[i].getTB());
ts[i].getTB().setEnabled(false);
}
ActionListener a1=new ActionListener(){ //Aiuto 1
public void actionPerformed(ActionEvent e) {
if(!s.isRunning())
s.startTimer();
svelaTessere();
}
};
ActionListener a2=new ActionListener(){ //Aiuto 2
public void actionPerformed(ActionEvent e) {
if(!s.isRunning())
s.startTimer();
trovaCoppia();
}
};
ActionListener a3=new ActionListener(){ //Aiuto 3
public void actionPerformed(ActionEvent e) {
if(!s.isRunning())
s.startTimer();
trovaCorrispondente();
}
};
//Aggiunge gli actionListener agli aiuti nello ScorePanel
s.addListeners(a1, a2, a3);
}//Costruttore
public void terminaPartita(){
end.play();
s.stopTimer();
int [] time=s.getTime();
FinePartita fp=new FinePartita(punteggio,time[0],time[1]);
fp.setVisible(true);
s.disattivaAiuti();
//oracle
}
public ScorePanel getScorePanel(){
return this.s;
}
public void attivaTessere(){
for(int i=0;i<ts.length;i++)
ts[i].getTB().setEnabled(true);
}
public void setNomeGiocatore(String n){
s.setNomeGiocatore(n);
}
public void svelaTessere(){
if(sel==1){
//se c'è una tessera già selezionata non è possibile usare questo aiuto
avviso2=new JDialog();
avviso2.setLayout(null);
avviso2.setResizable(false);
avviso2.setModal(true);
avviso2.setTitle("Avviso !");
avviso2.setBounds(300,300,210,130);
JLabel msg=new JLabel("C'è una tessera selezionata !");
msg.setBounds(20,10,200,20);
msg.setFont(new Font("Calibri",1,14));
JButton ok=new JButton("OK");
ok.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
avviso2.setVisible(false);
}
});
ok.setBounds(50,50,100,30);
avviso2.add(msg);
avviso2.add(ok);
avviso2.setVisible(true);
}
else{
s.setEnabledAiuto1(false);
punteggio-=3;
s.aggiornaPunti(punteggio, tentativi);
this.pausa=new Timer(2000,new ActionListener(){
public void actionPerformed(ActionEvent e) {
for(int i=0;i<ts.length;i++){
ts[i].getTB().setEnabled(true);
ts[i].getTB().setSelected(false);
}
pausa.stop();
}
});
for(int i=0;i<ts.length;i++){
ts[i].getTB().setEnabled(false);
ts[i].getTB().setSelected(true);
}
pausa.start();
}
}
public void trovaCoppia(){
boolean trovato=false;
s.setEnabledAiuto2(false);
for(int i=0;i<ts.length;i++){
for(int j=0;j<ts.length;j++){
if(ts[i].getTB().isVisible()&&ts[j].getTB().isVisible()&&ts[i].getEQ()==ts[j].getEQ()&&i!=j){
trovato=true;
ts[i].getTB().setEnabled(false);
ts[j].getTB().setEnabled(false);
ts[i].getTB().setVisible(false);
ts[j].getTB().setVisible(false);
tentativi++;
punteggio+=5;
finePartita++;
ok.play();
s.aggiornaPunti(punteggio,tentativi);
}
if(trovato)break;
}
if(trovato)break;
}
if(finePartita==numCoppie){
terminaPartita();
}
}
public void trovaCorrispondente(){
if(sel==0){
//Non è possibile usare questo aiuto senza una tessera già selezionata
this.avviso=new JDialog();
avviso.setLayout(null);
avviso.setResizable(false);
avviso.setModal(true);
avviso.setTitle("Avviso !");
avviso.setBounds(300,300,210,130);
JLabel msg=new JLabel("Selezionare prima una tessera !");
msg.setBounds(10,10,200,30);
msg.setFont(new Font("Calibri",1,14));
JButton ok=new JButton("OK");
ok.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
avviso.setVisible(false);
}
});
ok.setBounds(50,50,100,30);
avviso.add(msg);
avviso.add(ok);
avviso.setVisible(true);
}
else{
s.setEnabledAiuto3(false);
for(int i=0;i<ts.length;i++){
if(ts[i].getTB().isVisible()&&confronto[0].getEQ()==ts[i].getEQ()&&ts[i].getID()!=confronto[0].getID()){
confronto[1]=ts[i];
confronto[0].getTB().setEnabled(false);
confronto[1].getTB().setEnabled(false);
confronto[0].getTB().setVisible(false);
confronto[1].getTB().setVisible(false);
tentativi++;
punteggio+=5;
finePartita++;
sel=0;
ok.play();
s.aggiornaPunti(punteggio,tentativi);
break;
}
}
if(finePartita==numCoppie){
terminaPartita();
}
}
}
}
class Tessera{
private JToggleButton tb; //Rappresenta graficamente la tessera
private ImageIcon def; //Immagine di default della tessera non selezionata
private int eq; //Le tessere con la stessa immagine hanno eq uguale
private int id; //Identifica univocamente una tessera
public Tessera(ImageIcon selected,int a,int id){
this.def=new ImageIcon("Data/QmBlu.jpg");
this.tb=new JToggleButton(def,false);
this.tb.setSelectedIcon(selected);
this.tb.setDisabledSelectedIcon(selected);
this.tb.setSize(100,100);
this.eq=a;
this.id=id;
}
public JToggleButton getTB(){
return this.tb;
}
public int getEQ(){
return this.eq;
}
public int getID(){
return this.id;
}
}