Salve a tuttiho un problema con questo programma in Java: quando vince il giocatore o vince il computer il settaggio della variabile "static boolean vinto" a true (così da non far più inserire nulla) non avviene, nonostante io richiami la funzione. Vi allego qui sotto le tre classi così da potermi aiutare a capire meglio:
CLASSE PRINCIPALE (con main)
CLASSE DI CONTROLLO (thread)codice:import java.io.*; public class Gioco { public static void main() { BufferedReader t=new BufferedReader(new InputStreamReader(System.in)); char scelta, avv; int n=0, r, c, nav, ctTurni=0; System.out.println("Inserisci 0 per X, 1 per O: "); try { String s=t.readLine(); n=Integer.parseInt(s); } catch (Exception e) { System.out.println("Errore, scelta non numerica!"); } if(n==0) { scelta='X'; avv='O'; nav=1; } else { scelta='O'; avv='X'; nav=0; } Schema m=new Schema(); do { ctTurni++; m.faiMossa(scelta); Thread Vince1[]=new Thread[8]; for (int ct=0; ct<8; ct++) { Vince1[ct]=new ThreadTris(n, m, scelta); Vince1[ct].start(); } //stampa status variabile vinto System.out.println(m.getVinto()); if(m.getVinto()==false) { ctTurni++; m.mossaAvv(avv); Thread Vince2[]=new Thread[8]; for (int ct=0; ct<8; ct++) { Vince2[ct]=new ThreadTris(nav, m, avv); Vince2[ct].start(); } } //System.out.println("\f"); m.vedi(); }while(m.getVinto()==false); System.out.println("\nVince "+m.getVincitore()); } }
CLASSE DEL CAMPOcodice:public class ThreadTris extends Thread { int t, n; char scelta; protected Schema m=null; static char car[]=new char[2]; public ThreadTris(int turno, Schema m, char s) { this.m=m; this.t=turno; this.scelta=s; } public void run() { if(m.getVinto()) { this.yield(); } if(m.matrice[0][0]==m.matrice[0][1] && m.matrice[0][0]==m.matrice[0][2]) { vittoria(); } if(m.matrice[1][0]==m.matrice[1][1] && m.matrice[1][0]==m.matrice[1][2]) { vittoria(); } if(m.matrice[2][0]==m.matrice[2][1] && m.matrice[2][0]==m.matrice[2][2]) { vittoria(); } if(m.matrice[0][0]==m.matrice[1][0] && m.matrice[0][0]==m.matrice[2][0]) { vittoria(); } if(m.matrice[0][1]==m.matrice[1][1] && m.matrice[0][1]==m.matrice[2][1]) { vittoria(); } if(m.matrice[0][2]==m.matrice[1][2] && m.matrice[0][2]==m.matrice[2][2]) { vittoria(); } if(m.matrice[0][0]==m.matrice[1][1] && m.matrice[0][0]==m.matrice[2][2]) { vittoria(); } if(m.matrice[0][2]==m.matrice[1][1] && m.matrice[0][2]==m.matrice[2][0]) { vittoria(); } } public void vittoria() { m.setVincitore(scelta); m.setVinto(); } }
Grazie in anticipo a tutti per l'aiutocodice:import java.util.Random; import java.io.*; public class Schema { static char matrice[][]=new char[3][3]; static boolean vinto; static char vincitore; BufferedReader t=new BufferedReader(new InputStreamReader(System.in)); public Schema() { matrice[0][0]='?'; matrice[0][1]='?'; matrice[0][2]='?'; matrice[1][0]='?'; matrice[1][1]='?'; matrice[1][2]='?'; matrice[2][0]='?'; matrice[2][1]='?'; matrice[2][2]='?'; vinto=false; vedi(); } public boolean getVinto() { return vinto; } public synchronized void setVinto() { this.vinto=vinto; } public synchronized void setVincitore(char segno) { this.vincitore=segno; } public char getVincitore() { return vincitore; } public void faiMossa(char scelta) { int r=0, c=0; do { System.out.println("\nInserisci la righa: "); try { String s=t.readLine(); r=Integer.parseInt(s); } catch (Exception e) { System.out.println("Errore, scelta non numerica!"); } System.out.println("Inserisci la colonna: "); try { String s=t.readLine(); c=Integer.parseInt(s); } catch (Exception e) { System.out.println("Errore, scelta non numerica!"); } if(matrice[r][c]!='?') { System.out.println("Errore, casella occupata!"); } }while(matrice[r][c]!='?'); matrice[r][c]=scelta; } public void mossaAvv(char avv) { Random rnd=new Random(); int r=0, c=0; do { r=rnd.nextInt(3); c=rnd.nextInt(3); }while(matrice[r][c]!='?'); matrice[r][c]=avv; } public void vedi() { for(int r=0; r<3; r++) { for(int c=0; c<3; c++) { System.out.print(" "+matrice[r][c]+" "); if(c!=2) { System.out.print("|"); } } if(r!=2) { System.out.println("\n-----------"); } } } }![]()

ho un problema con questo programma in Java: quando vince il giocatore o vince il computer il settaggio della variabile "static boolean vinto" a true (così da non far più inserire nulla) non avviene, nonostante io richiami la funzione. Vi allego qui sotto le tre classi così da potermi aiutare a capire meglio:
Rispondi quotando

