// ------------------------------------------------------------- // check recursively to detect matching pieces // ------------------------------------------------------------- static void check(Tile* tiles, int xp, int yp, int lastDir, PointList& list, bool rec) { if (is_valid(xp, yp)) { Tile& t = tiles[get_tiles_index(xp, yp)]; int color = t.color; if (color != -1) { for (int i = 0; i < 4; ++i) { if (i != lastDir) { int sx = xp + XM[i]; int sy = yp + YM[i]; if (is_available(tiles, sx, sy)) { Tile& nt = tiles[get_tiles_index(sx, sy)]; int nc = nt.color; if (nc != -1) { while (color == nc && color != -1) { bool recheck = !list.contains(sx, sy); list.add(sx, sy); if (recheck && rec) { check(tiles, sx, sy, LD[i], list, rec); } sx += XM[i]; sy += YM[i]; if (is_valid(sx, sy)) { Tile& npe = tiles[get_tiles_index(sx, sy)]; nc = npe.color; } else { nc = -1; } } } } } } } } }