Come algoritmo di controllo puoi fare un metodo ricorsivo del tipo
Codice:
boolean funzione_ricorsiva(matrice, riga, colonna, riga_pr, colonna_pr, giocatore){
if giocatore == "X" && ultima riga || giocatore == "O" && ultima colonna
return true; // vuol dire che ha raggiunto la fine
//controlli tutti i lati escluso quello da cui vieni altrimenti torni indietro(quindi riga_pr e colonna_pr)
//quindi dovrai prevedere almeno gli 8 casi nella funzione e scartare eventuali limiti di riga e colonna
//esempio
if( riga + 1 < max_righe && matrice[riga + 1][colonna] == giocatore )
return funzione_ricorsiva(matrice, riga + 1, colonna, riga, colonna, giocatore)
if( colonna + 1 <= max_colonne && matrice[riga][colonna + 1] == giocatore )
return funzione_ricorsiva(matrice, riga, colonna + 1, riga, colonna, giocatore)
..... //e così via tenendo conto ovviamente nei controlli
return false;
Ovviamente questo algoritmo è valido anche per quanto l'altro giocatore, basta usare una variabile giocatore che può essere X o O
Non so se funziona bene ma di sicuro ha bisogno di ritocchi, ma l'idea di base dovrebbe essere giusta