/* Do not remove the headers from this file! see /USAGE for more info. */ #define SIZE 10 string array data; int is_valid(int x, int y) { if (x < 0 || x >= SIZE) return 0; if (y < 0 || y >= SIZE) return 0; return 1; } int value(int x, int y) { if (!is_valid(x, y)) return '#'; return data[x][y]; } int dx(int i) { if (i == 1) return 1; if (i == 3) return -1; return 0; } int dy(int i) { if (i == 0) return -1; if (i == 2) return 1; return 0; } void create() { array valid = allocate(4); int x, y; data = allocate(SIZE); for (int i = 0; i < SIZE; i++) { data[i] = repeat_string(".", SIZE); } data[0][0] = '@'; while (1) { int num_valid = 0; for (int i = 0; i < 4; i++) { if (value(x + 2*dx(i), y + 2 * dy(i)) == '.') valid[num_valid++] = i; } if (num_valid) { int d = valid[random(num_valid)]; data[x+dx(d)][y+dy(d)] = ' '; x += 2*dx(d); y += 2*dy(d); data[x][y] = (' ' + d); } else { int last = data[x][y] - ' '; if (last == ('@' - ' ')) { data[0][0] = ' '; break; } data[x][y] = ' '; x -= 2*dx(last); y -= 2*dy(last); } } foreach (string str in data) { write(str + "\n"); } } object virtual_create(string arg) { int x, y; if (sscanf(arg, "%d,%d", x, y) != 2) return 0; return new(__DIR__ "Labroom", x, y, value(x,y-1), value(x+1,y), value(x,y+1), value(x-1,y)); } int entrance_has_east() { return data[1][0] == ' '; } int entrance_has_south() { return data[0][1] == ' '; }