// written to support the Triangle Puzzle by // Dr. Roger Webster // 4/17/96 import java.applet.*; import java.awt.*; import java.net.*; import java.util.*; public class Board extends Object { protected int board[]; //board[1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 ] //board positions are:[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] // top is zero then top/down left to right.. protected int goal_state[]; public Board() { // init the board to all pegs except the center hole. board = new int[15]; int i = 0; for (i=0; i <= 14; i++) { board[i]=1; } board[4]=0; // the center hole has no peg.. int x = 0; goal_state = new int[15]; for (x=0; x <= 14; x++) { goal_state[x]=0; } goal_state[4]=1; // the center hole has a peg.. } //nth element of public int nth(int sub) { return (board[sub]); } // end nth method // board set. public void set_to_1(int sub) { board[sub] = 1; } // end 1 method public void set_to_0 (int sub) { board[sub] = 0; } // end 0 method public void print_board() { int i; for (i=0; i <= 14; i++) System.out.println(board[i]) ; } // end print board method public void reset_board() { int i = 0; for (i=0; i <= 14; i++) { board[i]=1; } board[4]=0; // the center hole has no peg.. } // end reset method public int count_ones() { int i = 0; int sum = 0; for (i=0; i <= 14; i++) { if( board[i]==1) sum = sum +1; } return(sum); } // end count_ones method public int find_peg(int peg1, int hole) { int peg2 = 0; switch (peg1) { case 0: if(hole==3) peg2 = 1; if(hole==5) peg2 = 2; break; case 1: if(hole==6) peg2 = 3; if(hole==8) peg2 = 4; break; case 2: if(hole==7) peg2 = 4; if(hole==9) peg2 = 5; break; case 3: if(hole==0) peg2 = 1; if(hole==5) peg2 = 4; if(hole==12) peg2 = 7; if(hole==10) peg2 = 6; break; case 4: if(hole==11) peg2 = 7; if(hole==13) peg2 = 8; break; case 5: if(hole==0) peg2 = 2; if(hole==3) peg2 = 4; if(hole==12) peg2 = 8; if(hole==14) peg2 = 9; break; case 6: if(hole==1) peg2 = 3; if(hole==8) peg2 = 7; break; case 7: if(hole==2) peg2 = 4; if(hole==9) peg2 = 8; break; case 8: if(hole==1) peg2 = 4; if(hole==6) peg2 = 7; break; case 9: if(hole==2) peg2 = 5; if(hole==7) peg2 = 8; break; case 10: if(hole==3) peg2 = 6; if(hole==12) peg2 = 11; break; case 11: if(hole==4) peg2 = 7; if(hole==13) peg2 = 12; break; case 12: if(hole==14) peg2 = 13; if(hole==3) peg2 = 7; if(hole==5) peg2 = 8; if(hole==10) peg2 = 11; break; case 13: if(hole==4) peg2 = 8; if(hole==11) peg2 = 12; break; case 14: if(hole==12) peg2 = 13; if(hole==5) peg2 = 9; break; } // end case return(peg2); } // end find_peg method public int try_jumping (int peg1, int hole) { int peg2; int returnvalue = 0; peg2 = find_peg (peg1, hole); if (peg2 != 0) { if ( nth(hole) == 0 && nth(peg1) == 1 && nth(peg2) == 1 ) // valid jump { set_to_1(hole); set_to_0(peg1); set_to_0(peg2); returnvalue = peg2; // valid jump } else returnvalue = 0; // invalid jump } return(returnvalue); } // end try jumping method public boolean done() { if ( count_ones() == 1) return(true); else return(false); } // end done method public int is_equal_to_goal () { int i; int count = 0; for (i=0; i <= 14; i++) { if( board[i] == goal_state[i]) count++; } if ( count == 15) return(count); else return(count); } // end of is_equal } // end class board