import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.net.*; import java.applet.*; /** * A Simple Unit test for the TicTacToe applet. ! */ public class TTTTest extends TTTV41 { // CONSTANTS static final int ENDINGSTATE = (1 << 9) - 1; // sentinel state 111 111 111 static final int LOSE = 2; // status for user wins static final int CONTINUE = 0; // OLD OK status for game continues static final int STALEMATE = 3; // status for a tie static final int WIN = 1; // status for computer wins // VARIABLES private int computerStatus; // computer bitmask denotes squares occupied private Image userImage; // user image private boolean first = true; // who goes first next game CHANGE TO UserFirst private static int mostStrategicMove[] = {4,0,2,6,8,1,3,5,7};// square order of importance private Image computerImage; // computer image private int userStatus; // user bitmask denotes user squares occupied private static boolean winningState[] = new boolean[1 << 9]; // winning states private static void setWinningState(int winState) { // mark winning squares as true win for (int i = 0 ; i < ENDINGSTATE ; i++) { if ((i & winState) == winState) { winningState[i] = true; } // end if (i & winState) } // end for } // end isWon static { // initialize winning squares by shifting a one n bits setWinningState((1 << 0) | (1 << 1) | (1 << 2)); // row one 000 000 111 setWinningState((1 << 3) | (1 << 4) | (1 << 5)); // row two 000 111 000 setWinningState((1 << 6) | (1 << 7) | (1 << 8)); // row three 111 000 000 setWinningState((1 << 0) | (1 << 3) | (1 << 6)); // col one 100 100 100 setWinningState((1 << 1) | (1 << 4) | (1 << 7)); // col two 010 010 010 setWinningState((1 << 2) | (1 << 5) | (1 << 8)); // col three 001 001 001 setWinningState((1 << 0) | (1 << 4) | (1 << 8)); // dia right 100 010 001 setWinningState((1 << 2) | (1 << 4) | (1 << 6)); // dia left 001 010 100 } // end static //METHODS public int bestMove (int computerStatus, int userStatus, int correctMove ) { // compute best move int tempBestMove = super.bestMove ( computerStatus, userStatus) ; if (tempBestMove == correctMove) { System.out.print (" good ");} else System.out.print ("NOT good "); System.out.print (" tempBestMove = " + tempBestMove); System.out.print (" correctMove = " + correctMove); System.out.println (" userStatus = " + getUserStatus () ); return tempBestMove; } // end best move boolean legalUserMove(int legalComputerMove, int legalUserMove, int canidateMove, boolean correctAns) { // user move return true if legal move boolean tempLegalUserMove = super.legalUserMove (computerStatus, userStatus, canidateMove); if(tempLegalUserMove == correctAns ) {System.out.print ("good "); } else System.out.print ("NOT good "); System.out.print (" computer = " + computerStatus); System.out.print (" user = " + userStatus); System.out.print (" canidate = " + canidateMove); System.out.print ( " userMove " + tempLegalUserMove); System.out.println (" correctAns " + correctAns); return tempLegalUserMove; } // end legalUserMove boolean legalComputerMove (int computerStatus, int userStatus, boolean correctAns) { boolean tempLegalComputerMove = super.legalComputerMove (computerStatus, userStatus) ; if(tempLegalComputerMove == correctAns) {System.out.print ("good "); } else System.out.print ("NOT good "); System.out.print (" computer = " + computerStatus); System.out.print (" user = " + userStatus); System.out.print (" computerMove "+ tempLegalComputerMove); System.out.println (" correctAns " + correctAns); return tempLegalComputerMove; } // end tryLegalComputerMove int gameStatus(int computerStatus, int userStatus, int correctStatus) { int tempGameStatus = super.gameStatus (computerStatus, userStatus); if (tempGameStatus == correctStatus) {System.out.print ("good "); } else System.out.print ("NOT good "); System.out.print (" computer = " + computerStatus); System.out.print (" user = " + userStatus); System.out.print (" status = " + tempGameStatus); System.out.println (" correctStatus " + correctStatus); return tempGameStatus; } // end gameStatus public boolean resetFirst (boolean computerFirst, boolean correctFirst) { boolean tempResetFirst = super.resetFirst (computerFirst); if (tempResetFirst == correctFirst) {System.out.print ("good "); } else System.out.print ("NOT good "); System.out.print (" computer = " + computerStatus); System.out.print (" computerFirst = " + computerFirst); System.out.print (" reset = " + tempResetFirst); System.out.println (" correctFirst " + correctFirst); return tempResetFirst; } // end resetFirst public void testBestMove () { System.out.println (" "); System.out.println ("testBestMove"); // bestMove TEST 1 // test if can find best strategic move // test that if the 4th position is not taken then take it // test equivalence class any one taken except 4th with one xxx x1x xxx bestMove (0, 0 |( 1 << 1) | (1 << 8), 4); // bestMove TEST 2 // test if can find next best strategic move // test best move if the user took the 4th position bestMove (0, 0 |( 1 << 4), 0); // bestMove TEST 3 // test if can block win bestMove (0, 0|( 1 << 3)|( 1 << 4), 5); // TEST 4 // test if can take win bestMove (0 |( 1 << 6)|( 1 << 7), 0|( 1 << 3)|( 1 << 4), 8); } // end testBestMove void testLegalComputerMove() { System.out.println (" "); System.out.println ("testLegalComputerMove"); // legalComputerMove TEST 1 // test if ending state userStatus = 0 |( 1 << 0) | (1 << 1)| (1 << 3)| (1 << 5)| (1 << 8); computerStatus = 0 |( 1 << 2) | (1 << 4)| (1 << 6)| (1 << 7) ; legalComputerMove (computerStatus, userStatus, false); // TEST 1 // legalComputerMove TEST 2 // test if ending state userStatus = 0 |( 1 << 0) | (1 << 1)| (1 << 3)| (1 << 5); computerStatus = 0 |( 1 << 2) | (1 << 4)| (1 << 6)| (1 << 7); legalComputerMove (computerStatus, userStatus, true); // TEST 2 } // end legalComputerMove void testLegalUserMove() { System.out.println (" "); System.out.println ("testLegalUserMove"); // legalUserMove TEST 1 // test if within range of squares userStatus = 0 |( 1 << 0) ; computerStatus = 0 |( 1 << 2) ; legalUserMove (computerStatus, userStatus, 9, false); // TEST 1 // legalUserMove TEST 2 // test if empty false userStatus = 0 |( 1 << 0) | (1 << 1); computerStatus = 0 |( 1 << 2) | (1 << 4); legalUserMove (computerStatus, userStatus, 4, false); // TEST 2 // legalUserMove TEST 3 // test if empty true userStatus = 0 |( 1 << 0) | (1 << 1); computerStatus = 0 |( 1 << 2) | (1 << 4); legalUserMove (computerStatus, userStatus, 8, true); // TEST 3 } // end legalComputerMove void testGameStatus() { System.out.println (" "); System.out.println ("testGameStatus"); // gameStatus TEST 1 // test if WIN userStatus = 0 |( 1 << 0) ; computerStatus = 0 | (1 << 3)| (1 << 4) | (1 << 5) ; gameStatus (computerStatus, userStatus, WIN); // TEST 1 // gameStatus TEST 2 // test if LOSE computerStatus = 0 |( 1 << 0) ; userStatus = 0 | (1 << 3)| (1 << 4) |( 1 << 5) ; gameStatus (computerStatus, userStatus, LOSE); // TEST 2 // gameStatus TEST 3 // test if STALEMATE userStatus = 0 |( 1 << 0) | (1 << 1)| (1 << 4)| (1 << 5)| (1 << 6); computerStatus = 0 |( 1 << 3) | (1 << 2)| (1 << 8)| (1 << 7); gameStatus (computerStatus, userStatus, STALEMATE); // TEST 3 // gameStatus TEST 4 // test if CONTINUE userStatus = 0 |( 1 << 0) | (1 << 1); computerStatus = 0 |( 1 << 2) | (1 << 4); gameStatus (computerStatus, userStatus, CONTINUE); // TEST 4 } // end test public void testResetFirst () { // TEST 1 resetFirst ( false, true); // TEST 2 resetFirst ( true, false); } // end resetFirst public void paint(Graphics g) { testBestMove (); testLegalComputerMove(); testLegalUserMove(); testGameStatus( ); testResetFirst(); // I need to change ppt for best move and legal compter move } // end init } // end TTT