Beispiel #1
0
// -------------------------------------------------------------
// 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;
								}
							}
						}
					}
				}
			}
		}
	}
}