Code:
public class TicTacTowAdvanced {
private int rows;
private int columns;
private char firstCompareItem;
private char secondCompareItem;
private char thirdCompareItem;
private char[][] gameBoard;
public TicTacTowAdvanced(int rows, int columns) {
this.rows = rows;
this.columns = columns;
this.gameBoard = new char[this.rows][this.columns];
}
private boolean canPutMark(int row, int column) {
return this.gameBoard[row][column] == ' ';
}
public boolean putCharacter(char character, int row, int column) {
if (!Character.isLetter(this.gameBoard[row][column])) {
this.gameBoard[row][column] = character;
if (checkForHit(row, column)) {
return true;
}
} else {
System.out.println("Field is contaminated, you lost your move!");
return false;
}
return false;
}
private boolean checkForHit(int row, int column) {
if (checkUp(row, column))
return true;
if (checkDown(row, column))
return true;
if (checkLeft(row, column))
return true;
if (checkRight(row, column))
return true;
if (checkUpRight(row, column))
return true;
if (checkUpLeft(row, column))
return true;
if (checkDownRight(row, column))
return true;
if (checkDownLeft(row, column))
return true;
return false;
}
private boolean isElementOutOfBoard(int[] elements) {
boolean isAllElementsFine = true;
for (int element : elements) {
if (element < 0 || element > this.rows || element > this.columns) {
isAllElementsFine = false;
break;
}
}
return isAllElementsFine;
}
private boolean checkMarksForHit(char[] marksToCompare) {
boolean result = true;
for (int i = 1; i < 3; i++) {
if (marksToCompare[0] == marksToCompare[i]) {
continue;
} else {
result = false;
break;
}
}
return result;
}
private boolean checkElementsForHit(int[] parameters) {
if (isElementOutOfBoard(parameters)) {
firstCompareItem = gameBoard[parameters[0]][parameters[3]];
secondCompareItem = gameBoard[parameters[1]][parameters[4]];
thirdCompareItem = gameBoard[parameters[2]][parameters[5]];
char[] charsToTest = { firstCompareItem, secondCompareItem,
thirdCompareItem };
return checkMarksForHit(charsToTest);
} else {
return false;
}
}
private boolean checkUp(int row, int column) {
int[] parameters = { row, row - 1, row - 2, column, column, column };
return checkElementsForHit(parameters);
}
private boolean checkDown(int row, int column) {
int[] parameters = { row, row + 1, row + 2, column, column, column };
return checkElementsForHit(parameters);
}
private boolean checkLeft(int row, int column) {
int[] parameters = { row, row, row, column, column - 1, column - 2 };
return checkElementsForHit(parameters);
}
private boolean checkRight(int row, int column) {
int[] parameters = { row, row, row, column, column + 1, column + 2 };
return checkElementsForHit(parameters);
}
private boolean checkUpRight(int row, int column) {
int[] parameters = { row, row - 1, row - 2, column, column + 1,
column + 2 };
return checkElementsForHit(parameters);
}
private boolean checkUpLeft(int row, int column) {
int[] parameters = { row, row - 1, row - 2, column, column - 1,
column - 2 };
return checkElementsForHit(parameters);
}
private boolean checkDownRight(int row, int column) {
int[] parameters = { row, row + 1, row + 2, column, column + 1,
column + 2 };
return checkElementsForHit(parameters);
}
private boolean checkDownLeft(int row, int column) {
int[] parameters = { row, row + 1, row + 2, column, column - 1,
column - 2 };
return checkElementsForHit(parameters);
}
public void drawTable() {
char alph = 'A';
int count = 1;
for (int i = 0; i < this.rows; i++) {
System.out.print(alph + " ");
alph++;
for (int g = 0; g < this.columns; g++) {
System.out.print(this.gameBoard[i][g] + ", ");
}
System.out.println();
}
}
}
public class TicTacTowAdvanced {
private int rows;
private int columns;
private char firstCompareItem;
private char secondCompareItem;
private char thirdCompareItem;
private char[][] gameBoard;
public TicTacTowAdvanced(int rows, int columns) {
this.rows = rows;
this.columns = columns;
this.gameBoard = new char[this.rows][this.columns];
}
private boolean canPutMark(int row, int column) {
return this.gameBoard[row][column] == ' ';
}
public boolean putCharacter(char character, int row, int column) {
if (!Character.isLetter(this.gameBoard[row][column])) {
this.gameBoard[row][column] = character;
if (checkForHit(row, column)) {
return true;
}
} else {
System.out.println("Field is contaminated, you lost your move!");
return false;
}
return false;
}
private boolean checkForHit(int row, int column) {
if (checkUp(row, column))
return true;
if (checkDown(row, column))
return true;
if (checkLeft(row, column))
return true;
if (checkRight(row, column))
return true;
if (checkUpRight(row, column))
return true;
if (checkUpLeft(row, column))
return true;
if (checkDownRight(row, column))
return true;
if (checkDownLeft(row, column))
return true;
return false;
}
private boolean isElementOutOfBoard(int[] elements) {
boolean isAllElementsFine = true;
for (int element : elements) {
if (element < 0 || element > this.rows || element > this.columns) {
isAllElementsFine = false;
break;
}
}
return isAllElementsFine;
}
private boolean checkMarksForHit(char[] marksToCompare) {
boolean result = true;
for (int i = 1; i < 3; i++) {
if (marksToCompare[0] == marksToCompare[i]) {
continue;
} else {
result = false;
break;
}
}
return result;
}
private boolean checkElementsForHit(int[] parameters) {
if (isElementOutOfBoard(parameters)) {
firstCompareItem = gameBoard[parameters[0]][parameters[3]];
secondCompareItem = gameBoard[parameters[1]][parameters[4]];
thirdCompareItem = gameBoard[parameters[2]][parameters[5]];
char[] charsToTest = { firstCompareItem, secondCompareItem,
thirdCompareItem };
return checkMarksForHit(charsToTest);
} else {
return false;
}
}
private boolean checkUp(int row, int column) {
int[] parameters = { row, row - 1, row - 2, column, column, column };
return checkElementsForHit(parameters);
}
private boolean checkDown(int row, int column) {
int[] parameters = { row, row + 1, row + 2, column, column, column };
return checkElementsForHit(parameters);
}
private boolean checkLeft(int row, int column) {
int[] parameters = { row, row, row, column, column - 1, column - 2 };
return checkElementsForHit(parameters);
}
private boolean checkRight(int row, int column) {
int[] parameters = { row, row, row, column, column + 1, column + 2 };
return checkElementsForHit(parameters);
}
private boolean checkUpRight(int row, int column) {
int[] parameters = { row, row - 1, row - 2, column, column + 1,
column + 2 };
return checkElementsForHit(parameters);
}
private boolean checkUpLeft(int row, int column) {
int[] parameters = { row, row - 1, row - 2, column, column - 1,
column - 2 };
return checkElementsForHit(parameters);
}
private boolean checkDownRight(int row, int column) {
int[] parameters = { row, row + 1, row + 2, column, column + 1,
column + 2 };
return checkElementsForHit(parameters);
}
private boolean checkDownLeft(int row, int column) {
int[] parameters = { row, row + 1, row + 2, column, column - 1,
column - 2 };
return checkElementsForHit(parameters);
}
public void drawTable() {
char alph = 'A';
int count = 1;
for (int i = 0; i < this.rows; i++) {
System.out.print(alph + " ");
alph++;
for (int g = 0; g < this.columns; g++) {
System.out.print(this.gameBoard[i][g] + ", ");
}
System.out.println();
}
}
}