- do {
- dir = random () % 4;
- switch (dir)
- {
- case 0: dx = 0, dy = 1; break;
- case 1: dx = -1, dy = 0; break;
- case 2: dx = 0, dy = -1; break;
- case 3: dx = 1, dy = 0; break;
- default: abort ();
- }
- } while (dir == last ||
- hole_x + dx < 0 || hole_x + dx >= grid_w ||
- hole_y + dy < 0 || hole_y + dy >= grid_h);
- if (grid_w > 1 && grid_h > 1)
- last = (dir == 0 ? 2 : dir == 2 ? 0 : dir == 1 ? 3 : 1);
-
- switch (dir)
- {
- case 0: size = 1 + (random()%(grid_h - hole_y - 1)); h = size; w = 1; break;
- case 1: size = 1 + (random()%hole_x); w = size; h = 1; break;
- case 2: size = 1 + (random()%hole_y); h = size; w = 1; break;
- case 3: size = 1 + (random()%(grid_w - hole_x - 1)); w = size; h = 1; break;
- default: abort ();
- }