import java.util.*; public class WordSearch { private char[][] board; int rows, cols; public WordSearch(int rows, int cols) { board = new char[rows][cols]; for (int i=0;i<rows;i++) for (int j=0;j<cols;j++) board[i][j]='-'; this.rows = rows; this.cols = cols; } public WordSearch() { this(20,20); } public String toString() { String s = ""; for (int i=0;i<board.length;i++) { for (int j=0;j<board[i].length;j++) { s=s+board[i][j]; } s=s+"\n"; } return s; } public void test(WordSearch w){ System.out.println(w); System.out.println("~~~~~~~~~~~~~~~~~~~~~"); } //Insertion methods //see if it's possible to combine H/V/D private boolean insert(int c, int r, int cinc, int rinc, String s){ //checks if word is in bounds of crossword //diagonal check if (rinc == 1 && cinc == 1){ if (r + s.length()-1 > rows || c + s.length()-1 > cols){ System.out.println("insertion failed"); return false; } } //vert check else if (rinc == 1){ if (r + s.length()-1 > rows || c>cols-1 || c<0){ System.out.println("insertion failed"); return false; } } //horizontal check else if (cinc == 1){ if (c + s.length()-1 > cols || r>rows-1 || r<0){ System.out.println("insertion failed"); return false; } } for (int n=0; n<s.length(); n++){ if ( (board[r + rinc*n][c + cinc*n] != '-') && (board[r + rinc*n][c + cinc*n] != s.charAt(n))){ System.out.println("insertion failed"); return false; } } for (int n=0; n<s.length(); n++){ board[r + rinc*n][c + cinc*n] = s.charAt(n); } return true; } public boolean insertHorizontal(int c, int r, String s){ return insert(c, r, 1, 0, s); } public boolean insertVertical(int c, int r, String s){ return insert(c, r, 0, 1, s); } public boolean insertDiagonal1(int c, int r, String s){ //top left to bottom right return insert(c, r, 1, 1, s); } public boolean insertDiagonal2(int c, int r, String s){ //bottom left to top right return insert(c, r, -1, -1, s); } public String reverse(String s){ String s1 = ""; for (int n=s.length(); n>0; n--){ s1 = s1 + s.substring(n-1, n); } return s1; } public boolean insertHReverse(int c, int r, String s){ return insertHorizontal(c, r, reverse(s)); } public boolean insertVReverse(int c, int r, String s){ return insertVertical(c, r, reverse(s)); } public boolean insertDReverse1(int c, int r, String s){ return insertDiagonal1(c, r, reverse(s)); } public boolean insertDReverse2(int c, int r, String s){ return insertDiagonal2(c, r, reverse(s)); } public boolean addWords(int n, String s){ Scanner sc = new Scanner(newFile(s)); Random r = new Random(); while (n>0){ int x = r.nextInt(8); if (x=0){ if (insertHorizontal) n = n+1; } if (x=1){ if (insert } public void fillIn(){ Random r = new Random(); for (int n=0; n<cols; n++){ for (int m=0; m<rows; m++){ if (board[m][n] == '-') board[m][n] = (char)('a' + r.nextInt(26)); } } } }