/$ AITicLib AI(){ int i, j; // -------- Level 1 - Random -------- if( Lvl == 1 ){ do{ i = random(3); j = random(3); }while( Brd[i][j] ); return i + "," + j; } // ---------- Level 2 & 3 ---------- // First move - take corner if( MoveN == 1 ) return "0,0"; if( (MoveN == 4) && (Brd[0][0] || Brd[0][2]) && (Brd[0][0] == Brd[2][2]) && (Brd[2][0] == Brd[0][2]) ) return "2,1"; // ---------- Try to win ---------- Turn = -Turn; for( j = 0; j < 3; j++ ) for( i = 0; i < 3; i++ ) if( !Brd[i][j]){ Brd[i][j] = -Turn; if( Won() ){ Brd[i][j] = 0; Turn = -Turn; return ((string)(i)) + "," + ((string)(j)); } Brd[i][j] = 0; } // ---------- Block a win ---------- Turn = -Turn; for( j = 0; j < 3; j++ ) for( i = 0; i < 3; i++ ) if( !Brd[i][j] ){ Brd[i][j] = -Turn; if( Won() ){ Brd[i][j] = 0; return ((string)(i)) + "," + ((string)(j)); } Brd[i][j] = 0; } // ----------> Level 3 ----------> if( Lvl == 3 ){ // ------- Set up double trap ------- for( j = 0; j < 3; j++ ) for( i = 0; i < 3; i++ ) if( !Brd[i][j]){ Brd[i][j] = Turn; if( DblTrp() ){ Brd[i][j] = 0; return ((string)(i)) + "," + ((string)(j)); } Brd[i][j] = 0; } // -------- Block double trap -------- Turn = -Turn; for( j = 0; j < 3; j++ ) for( i = 0; i < 3; i++ ) if( !Brd[i][j] ){ Brd[i][j] = Turn; if( DblTrp() ){ Turn = -Turn; Brd[i][j] = 0; return ((string)(i)) + "," + ((string)(j)); } Brd[i][j] = 0; } Turn = -Turn; } // <---------- Level 3 <---------- // ----------> Level 2 & 3 ----------> // ---------- Try center ---------- if( !Brd[1][1] ) return "1,1"; // ---------- Try corners ---------- for( j = 0; j < 3; j = j + 2 ) for( i = 0; i < 3; i = i + 2 ) if( !Brd[i][j] ) return (string)i + "," + (string)j; // ---------- Try edges ---------- for( i = 1; i < 2; i++ ){ if( !Brd[i][i-1] ) return (string)i + "," + (string)(i - 1); if( !Brd[i-1][i] ) return (string)(i - 1) + "," + (string)i; } } DblTrp(){ int i, j, k, count = 0; for( i = 0; i < 3; i++ ){ j = Brd[i][0] + Brd[i][1] + Brd[i][2]; k = Brd[0][i] + Brd[1][i] + Brd[2][i]; if( k == 2 * Turn ) count++; if( j == 2 * Turn ) count++; } j = Brd[0][0] + Brd[1][1] + Brd[2][2]; k = Brd[0][2] + Brd[1][1] + Brd[2][0]; if( k == 2 * Turn ) count++; if( j == 2 * Turn ) count++; if( count > 1 ) return 1; return 0; } #define LvlDisc "Level 1 - Random moves.\n2 - Palm tries to connect 3, oe prevent you from doing so.\n3 - Palm tries to set up a double trap, or prevent you from doing so."