import java.util.Scanner;
class TrippTrappTresko {
public static void main (String[] args) {
Brett b = new Brett();
while (! b.erFerdig()) {
b.velgTrekk();
b.skrivBrett();
if (b.harVunnet('X')) {
System.out.println("Maskinen vant!");
System.exit(0);
}
if (b.erFerdig()) break;
b.lesBrukersTrekk();
if (b.harVunnet('O')) {
System.out.println("Du vant!");
b.skrivBrett();
System.exit(0);
}
}
System.out.println("Det ble uavgjort!");
}
}
class Brett {
private char[] ruter;
private Scanner tastatur;
Brett () {
ruter = new char[9+1];
for (int i = 1; i <= 9; ++i) ruter[i] = ' ';
tastatur = new Scanner(System.in);
}
void skrivBrett () {
System.out.println("+---+---+---+");
for (int i = 1; i <= 9; i +=3) {
for (int j = i; j <= i+2; ++j)
System.out.print("| " + ruter[j] + " ");
System.out.println("|");
System.out.println("+---+---+---+");
}
System.out.println();
}
boolean erFerdig () {
for (int i = 1; i <= 9; ++i)
if (ruter[i] == ' ') return false;
return true;
}
boolean harVunnet (char x) {
return trePaaRad(1, +1, x) || trePaaRad(4, +1, x) ||
trePaaRad(7, +1, x) || trePaaRad(1, +3, x) ||
trePaaRad(2, +3, x) || trePaaRad(3, +3, x) ||
trePaaRad(1, +4, x) || trePaaRad(3, +2, x);
}
private boolean trePaaRad (int p, int inkr, char m) {
return ruter[p]==m && ruter[p+inkr]==m && ruter[p+2*inkr] == m;
}
void velgTrekk () {
int valgt;
do {
valgt = (int)(Math.random()*9) + 1;
} while (ruter[valgt] != ' ');
System.out.println("Maskinen valgte rute " + valgt);
ruter[valgt] = 'X';
}
void lesBrukersTrekk () {
System.out.print("Ditt trekk? ");
int svar = tastatur.nextInt();
while (ruter[svar] != ' ') {
System.out.print("Ulovlig trekk. Nytt trekk? ");
svar = tastatur.nextInt();
}
ruter[svar] = 'O';
}
}