enum STATUS_IGRE { U_TOKU, POBEDIO_X, POBEDIO_O, NERESENO } public class XO { /* x -> 1 o -> -1 */ private int[][] polja = new int[3][3]; private int naPotezu; private STATUS_IGRE statusIgre; private int brojOdigranihPoteza; public XO() { inicijalizuj(); } public void inicijalizuj() { naPotezu = 1; statusIgre = STATUS_IGRE.U_TOKU; brojOdigranihPoteza = 0; for (int i = 0; i < polja.length; i++) { for (int j = 0; j < polja.length; j++) { polja[i][j] = 0; } } } public STATUS_IGRE odigrajPotez(int i, int j) { STATUS_IGRE status = STATUS_IGRE.U_TOKU; if(polja[i][j] == 0) { brojOdigranihPoteza++; polja[i][j] = naPotezu; naPotezu *= -1; status = provera(); } statusIgre = status; return status; } private int suma(int a, int b, int c) { return a+b+c; } private boolean pobedioX(int a, int b, int c) { if(suma(a,b,c) == 3) return true; else return false; } private boolean pobedioO(int a, int b, int c) { if(suma(a,b,c) == -3) return true; else return false; } private STATUS_IGRE provera() { STATUS_IGRE status = STATUS_IGRE.U_TOKU; if(pobedioX(polja[0][0], polja[0][1], polja[0][2]) || pobedioX(polja[0][0], polja[1][0], polja[2][0]) || pobedioX(polja[0][0], polja[1][1], polja[2][2]) || pobedioX(polja[2][0], polja[1][1], polja[0][2]) || pobedioX(polja[0][2], polja[1][2], polja[2][2]) || pobedioX(polja[0][1], polja[1][1], polja[2][1]) || pobedioX(polja[1][0], polja[1][1], polja[1][2]) || pobedioX(polja[2][0], polja[2][1], polja[2][2])) status = STATUS_IGRE.POBEDIO_X; else { if(pobedioO(polja[0][0], polja[0][1], polja[0][2]) || pobedioO(polja[0][0], polja[1][0], polja[2][0]) || pobedioO(polja[0][0], polja[1][1], polja[2][2]) || pobedioO(polja[2][0], polja[1][1], polja[0][2]) || pobedioO(polja[0][2], polja[1][2], polja[2][2]) || pobedioO(polja[0][1], polja[1][1], polja[2][1]) || pobedioO(polja[1][0], polja[1][1], polja[1][2]) || pobedioO(polja[2][0], polja[2][1], polja[2][2])) status = STATUS_IGRE.POBEDIO_O; else if(brojOdigranihPoteza == 9) status = STATUS_IGRE.NERESENO; } return status; } @Override public String toString() { String polja = ""; if(statusIgre == STATUS_IGRE.POBEDIO_X) polja += "POBEDIO JE X!\n"; else if(statusIgre == STATUS_IGRE.POBEDIO_O) polja += "POBEDIO JE O!\n"; else if(statusIgre == STATUS_IGRE.NERESENO) polja += "Igra je neresena!\n"; else polja += "Na potezu je: " + koJeNaPotezu() + "\n"; for (int i = 0; i < this.polja.length; i++) { polja += "\n"; for (int j = 0; j < this.polja.length; j++) { polja += dajOznakuPolja(i, j); } } polja += "\n------------------------"; return polja; } private String dajOznakuPolja(int i, int j) { if(polja[i][j] == 1) return " X "; else if(polja[i][j] == -1) return " O "; else return " - "; } public String koJeNaPotezu() { if(naPotezu == 1) return "X"; else //if (naPotezu == -1) return "O"; } }