/* * */ public class Board { private static final int MAX_ROWS = 6; private static final int MAX_COLS = 7; private char[][] board; private int[] sizearray; public Board() { board = new char[MAX_ROWS][MAX_COLS]; sizearray = new int[MAX_COLS]; for(int i = 0; i < MAX_COLS; i++) { sizearray[i] = 0; } clearBoard(); } public void clearBoard() { for(int i = 0; i < MAX_ROWS; i++) { for(int j = 0; j < MAX_COLS; j++) { board[i][j] = 'X'; } } } /* -isFull */ public boolean isFull() { for(int i = 0; i < MAX_COLS; i++) { if(sizearray[i] < MAX_ROWS) { return false; } } return true; } /* -isFull(col) */ public boolean isFull(int col) { if(col >= MAX_COLS) { return false; } if(sizearray[col] >= MAX_ROWS) { return true; } return false; } /* -placeChecker(col, color) if(isFull(col) == true) print error return false barray[5-sizearray[col]][col] = color sizearray[col]++ return true */ public boolean placeChecker(int col, char color) { if(col >= MAX_COLS) { return false; } if(isFull(col) == true) { return false; } board[(MAX_ROWS-1-sizearray[col])][col] = color; sizearray[col]++; return true; } public boolean hasWinner(int column) { return (checkHorizontal() || checkVertical() || checkDiagonal(column)); } /* -hasWinner */ /* * check row * for each row * for each col * if(cur != board[row][col]) { * if(board[row][col] == 'X') { * count = 0 * else * count = 1 * cur = board[row][col] * else * if(board[row][col] != 'X') * count++ * if(count >= 4) * */ public boolean checkHorizontal(){ char cur = board[0][0]; int count = 0; for(int i = 0;i= 4){ return true; } } } } return false; } public boolean checkVertical(){ int count = 0; char cur = board[0][0]; for (int i = 0; i= 4) { return true; } } } } return false; } public boolean checkDiagonal(int column){ int row = MAX_ROWS-sizearray[column]; int count = 1; char cur = board[row][column]; int i, j; //up right for(i = row-1, j = column+1; (row-i) <= 3 && i >= 0 && j < MAX_COLS ;i--, j++) { if (cur == board[i][j]){ count++; if (count >= 4){ return true; } } else { break; } } //down left for(i = row+1, j = column-1; (column-j) <= 3 && i < MAX_ROWS && j >= 0 ;i++, j--) { if (cur == board[i][j]){ count++; if (count >= 4){ return true; } } else { break; } } count = 1; //up left for(i = row-1, j = column-1; (row-i) <= 3 && i >= 0 && j >= 0 ;i--, j--) { if (cur == board[i][j]){ count++; if (count >= 4){ return true; } } else { break; } } //down right for(i = row+1, j = column+1; (j-column) <= 3 && i < MAX_ROWS && j = 4){ return true; } } else { break; } } return false; } public void displayBoard() { for(int i = 0; i < MAX_ROWS; i++) { System.out.print('|'); for(int j = 0; j < MAX_COLS; j++) { System.out.print(board[i][j] + "|"); } System.out.println(); } for(int i = 1; i <= MAX_COLS; i++) { System.out.print("--"); } System.out.print("-\n"); for(int i = 1; i <= MAX_COLS; i++) { System.out.print(" " + i); } System.out.println(); } public void testPrint() { System.out.println("Board:"); for(int i = 0; i < MAX_ROWS; i++) { for(int j = 0; j < MAX_COLS; j++) { System.out.print(board[i][j]); } System.out.println(); } System.out.println("Size array:"); for(int i = 0; i < MAX_COLS; i++) { System.out.print(sizearray[i]); } } public static void main(String[] args) { Board b = new Board(); b.displayBoard(); b.placeChecker(0, 'R'); b.placeChecker(1, 'R'); b.placeChecker(1, 'R'); b.placeChecker(2, 'R'); b.placeChecker(2, 'R'); b.placeChecker(2, 'R'); b.placeChecker(3, 'R'); b.placeChecker(3, 'R'); b.placeChecker(3, 'R'); b.placeChecker(3, 'R'); b.placeChecker(4, 'B'); System.out.println("Winner: " + b.checkDiagonal(3)); b.displayBoard(); /* System.out.println("isFull " + b.isFull()); System.out.println("isFull(col) " + b.isFull(1)); for(int i = 0; i < MAX_ROWS; i++) { System.out.println(b.placeChecker(1, 'R')); } System.out.println("isFull " + b.isFull()); System.out.println("isFull(col) " + b.isFull(1)); System.out.println(b.placeChecker(1, 'R')); */ } }