Nadesłany przez Tomasz Lubiński, 29 sierpnia 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
KolkoKrzyzyk.java:
import java.util.Random;
import java.util.Scanner;
//Gra kolko-krzyzyk
//www.algorytm.org
//(c)2007 by Tomasz Lubinski
public class KolkoKrzyzyk {
private static char table[][] = {{' ', ' ', ' '},
{' ', ' ', ' '},
{' ', ' ', ' '}};
private static boolean computer = true;
private static Scanner input = new Scanner(System.in);
/**
* Prints result if game is complete
* @return true if game is complete
*/
private static boolean checkResult() {
if ((table[0][0] == table[1][0] && table[1][0] == table[2][0] && table[2][0] != ' ') ||
(table[0][1] == table[1][1] && table[1][1] == table[2][1] && table[2][1] != ' ') ||
(table[0][2] == table[1][2] && table[1][2] == table[2][2] && table[2][2] != ' ') ||
(table[0][0] == table[0][1] && table[0][1] == table[0][2] && table[0][2] != ' ') ||
(table[1][0] == table[1][1] && table[1][1] == table[1][2] && table[1][2] != ' ') ||
(table[2][0] == table[2][1] && table[2][1] == table[2][2] && table[2][2] != ' ') ||
(table[0][0] == table[1][1] && table[1][1] == table[2][2] && table[2][2] != ' ') ||
(table[0][2] == table[1][1] && table[1][1] == table[2][0] && table[2][0] != ' ')) {
if (computer) {
System.out.println("Wygral komputer!");
} else {
System.out.println("Brawo, wygrales!");
}
return true;
}
if (table[0][0] != ' ' && table[1][0] != ' ' && table[2][0] != ' ' &&
table[0][1] != ' ' && table[1][1] != ' ' && table[2][1] != ' ' &&
table[0][2] != ' ' && table[1][2] != ' ' && table[2][2] != ' ') {
System.out.println("Remis!");
return true;
}
computer = !computer;
return false;
}
/**
* Computer move
*/
private static void computerMove() {
//end to win
for (int i=0; i<3; i++) {
if (table[i][0] == 'X' && table[i][1] == 'X' && table[i][2] == ' ') {
table[i][2] = 'X';
return;
}
if (table[i][0] == 'X' && table[i][2] == 'X' && table[i][1] == ' ') {
table[i][1] = 'X';
return;
}
if (table[i][2] == 'X' && table[i][1] == 'X' && table[i][0] == ' ') {
table[i][0] = 'X';
return;
}
if (table[0][i] == 'X' && table[1][i] == 'X' && table[2][i] == ' ') {
table[2][i] = 'X';
return;
}
if (table[0][i] == 'X' && table[2][i] == 'X' && table[1][i] == ' ') {
table[1][i] = 'X';
return;
}
if (table[2][i] == 'X' && table[1][i] == 'X' && table[0][i] == ' ') {
table[0][i] = 'X';
return;
}
}
if (table[0][0] == 'X' && table[1][1] == 'X' && table[2][2] == ' ') {
table[2][2] = 'X';
return;
}
if (table[0][0] == 'X' && table[2][2] == 'X' && table[1][1] == ' ') {
table[1][1] = 'X';
return;
}
if (table[2][2] == 'X' && table[1][1] == 'X' && table[0][0] == ' ') {
table[0][0] = 'X';
return;
}
if (table[0][2] == 'X' && table[1][1] == 'X' && table[2][0] == ' ') {
table[2][0] = 'X';
return;
}
if (table[0][2] == 'X' && table[2][0] == 'X' && table[1][1] == ' ') {
table[1][1] = 'X';
return;
}
if (table[2][0] == 'X' && table[1][1] == 'X' && table[0][2] == ' ') {
table[0][2] = 'X';
return;
}
//block user
for (int i=0; i<3; i++) {
if (table[i][0] == 'O' && table[i][1] == 'O' && table[i][2] == ' ') {
table[i][2] = 'X';
return;
}
if (table[i][0] == 'O' && table[i][2] == 'O' && table[i][1] == ' ') {
table[i][1] = 'X';
return;
}
if (table[i][2] == 'O' && table[i][1] == 'O' && table[i][0] == ' ') {
table[i][0] = 'X';
return;
}
if (table[0][i] == 'O' && table[1][i] == 'O' && table[2][i] == ' ') {
table[2][i] = 'X';
return;
}
if (table[0][i] == 'O' && table[2][i] == 'O' && table[1][i] == ' ') {
table[1][i] = 'X';
return;
}
if (table[2][i] == 'O' && table[1][i] == 'O' && table[0][i] == ' ') {
table[0][i] = 'X';
return;
}
}
if (table[0][0] == 'O' && table[1][1] == 'O' && table[2][2] == ' ') {
table[2][2] = 'X';
return;
}
if (table[0][0] == 'O' && table[2][2] == 'O' && table[1][1] == ' ') {
table[1][1] = 'X';
return;
}
if (table[2][2] == 'O' && table[1][1] == 'O' && table[0][0] == ' ') {
table[0][0] = 'X';
return;
}
if (table[0][2] == 'O' && table[1][1] == 'O' && table[2][0] == ' ') {
table[2][0] = 'X';
return;
}
if (table[0][2] == 'O' && table[2][0] == 'O' && table[1][1] == ' ') {
table[1][1] = 'X';
return;
}
if (table[2][0] == 'O' && table[1][1] == 'O' && table[0][2] == ' ') {
table[0][2] = 'X';
return;
}
//if cannot win or cannot block user then random move
boolean done = false;
Random r = new Random();
int a,b;
while (!done) {
a = r.nextInt(3);
b = r.nextInt(3);
if (table[a][b] == ' ') {
table[a][b] = 'X';
done = true;
}
}
}
/**
* User move
*/
private static void userMove() {
boolean correct = false;
System.out.println("Podaj wspolrzedne dla kolka (np: a1): ");
while (!correct) {
String coord = input.next();
if (coord.length() != 2) {
System.out.println("Nieprawidlowe wspolrzedne");
} else if (coord.charAt(0) != 'a' &&
coord.charAt(0) != 'b' &&
coord.charAt(0) != 'c') {
System.out.println("Nieprawidlowy poczatek wspolrzednych (moze byc a, b lub c)");
} else if (coord.charAt(1) != '1' &&
coord.charAt(1) != '2' &&
coord.charAt(1) != '3') {
System.out.println("Nieprawidlowy koniec wspolrzednych (moze byc 1, 2 lub 3)");
} else {
int a, b;
if (coord.charAt(0) == 'a') {
a = 0;
} else if (coord.charAt(0) == 'b') {
a = 1;
} else {
a = 2;
}
if (coord.charAt(1) == '1') {
b = 0;
} else if (coord.charAt(1) == '2') {
b = 1;
} else {
b = 2;
}
if (table[a][b] != ' ') {
System.out.println("To pole jest już zajęte");
} else {
table[a][b] = 'O';
correct = true;
}
}
}
}
private static void printTable() {
System.out.println();
System.out.println();
System.out.println(" 1 2 3");
System.out.println("a " + table[0][0]+ "|" + table[0][1]+ "|" + table[0][2]);
System.out.println("b " + table[1][0]+ "|" + table[1][1]+ "|" + table[1][2]);
System.out.println("c " + table[2][0]+ "|" + table[2][1]+ "|" + table[2][2]);
}
public static void main(String[] args) {
while (!checkResult()) {
printTable();
if (computer) {
computerMove();
} else {
userMove();
}
}
printTable();
}
}

