Salve a tutti
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:
CLASSE PRINCIPALE (con main)
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 DI CONTROLLO (thread)
codice:
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();
}
}
CLASSE DEL CAMPO
codice:
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-----------");
}
}
}
}
Grazie in anticipo a tutti per l'aiuto 