avevo fatto questo codice(quotato sotto) per gestire il gioco del tris(tic tac toe) ma ho dei problemi nella visualizzazione del cerchio o x al click del mouse xke la repaint non viene chiamata quando la invoco io da codice, ma alla fine del metodo, quindi visto che chiamo la funzione per cambiare il giocatore corrente, se devo disegnare una x mi disegna un cerchio, e viceversa.
sapete consigliarmi un modo per ovviare a questo problema?
grazie in anticipo!
codice:
public void mouseClicked(MouseEvent e) {
if(started==false){
JOptionPane.showMessageDialog(null,"Inizia una nuova partita!");
return;
}
int x,y;
TrisPan p=(TrisPan)e.getSource();
if(p.isClicked()){
JOptionPane.showMessageDialog(null,"Già premuto!");
return;
}
x=p.getXc();
y=p.getYc();
game.mossa(x,y);
/*try {
game.mossa(x,y);
} catch (TrisException ex) {
JOptionPane.showConfirmDialog(null,"ERRORE!");
}*/
p.setClicked(true);
JOptionPane.showMessageDialog(null,"Simbolo corrente:"+game.getGiocatorecorrente().getSimbolo());
p.repaint();
game.checkVittoria();
if(game.isPareggio()){
setAllClicked();
started=false;
JOptionPane.showMessageDialog(null,"Partita Pareggiata!");
int r=JOptionPane.showConfirmDialog(null, "Fare un altra partita?");
if(r==JOptionPane.YES_OPTION){
game=new Tris(p1,p2);
nameField.setText(game.getGiocatorecorrente().getNome());
symbolField.setText(""+game.getGiocatorecorrente().getSimbolo());
started=true;
//JOptionPane.showMessageDialog(null,game.getGiocatorecorrente().getNome()+game.getGiocatorecorrente().getSimbolo()+started);
repaintAll();
return;
}
if(r==JOptionPane.NO_OPTION){
repaintAll();
nameField.setText("");
return;
}
}
if(game.getVincitore()!=null){
if(p1==game.getVincitore()){
setAllClicked();
started=false;
p1Field.setText(""+(Integer.parseInt(p1Field.getText())+1));
JOptionPane.showMessageDialog(null,game.getVincitore().getNome()+" ( "+game.getVincitore().getSimbolo()+" ) Wins!");
int r=JOptionPane.showConfirmDialog(null, "Fare un altra partita?");
if(r==JOptionPane.YES_OPTION){
game.setGiocatorecorrente(null);
repaintAll();
game=new Tris(p1,p2);
nameField.setText(game.getGiocatorecorrente().getNome());
symbolField.setText(""+game.getGiocatorecorrente().getSimbolo());
started=true;
return;
}
if(r==JOptionPane.NO_OPTION){
repaintAll();
nameField.setText("");
symbolField.setText("");
return;
}
}
}
game.cambiaGiocatoreCorrente();
nameField.setText(game.getGiocatorecorrente().getNome());
symbolField.setText(""+game.getGiocatorecorrente().getSimbolo());
}