int board_checker::operator()(board& b) const { if ( int id = b(1,1) ) if ((b(0,0) == id && b(2,2) == id ) || (b(0,2) == id && b(2,0) == id) || (b(0,1) == id && b(2,1) == id) || (b(1,0) == id && b(1,2) == id) ) return id; if ( int id = b(0,0) ) if ((b(0,1) == id && b(0,2) == id) || (b(1,0) == id && b(2,0) == id) ) return id; if ( int id = b(2,2) ) if ((b(1,2) == id && b(0,2) == id) || (b(2,1) == id && b(2,0) == id) ) return id; bool draw=true; for (int x = 0; draw && x < 3; ++x ) for (int y = 0; draw && y < 3; ++y ) draw = b(x,y) != 0; if ( draw ) return -1; // not finish return 0; }