//! Ctor LcsWithOneTable(const Range& l, const Range& r): lhs(&l), rhs(&r), maze(l.size() + 1, r.size() + 1, 0) { build_maze(); }
main() { randomize(); fill_maze_with_wall(); build_maze(1, 1, RIGHT_BOUND, BOTTOM_BOUND); search_target_xy(&tx, &ty); memset(mark, 0, sizeof(mark)); show_maze(0, 0, RIGHT_BOUND+1, BOTTOM_BOUND+1); save_sth_under_target(); draw_target(); bioskey(0); init_bug(1, 1, 0); old_8h = getvect(8); old_9h = getvect(9); setvect(8, int_8h); setvect(9, int_9h); while(!stop) { if(move_bug(bug[0].x, bug[0].y, tx, ty) == 1) /* target has been reached */ { bug_cry(); break; } } setvect(8, old_8h); setvect(9, old_9h); bioskey(0); }
void build_maze(int x0, int y0, int x1, int y1) //关键函数:随机生成一定含通路的地图 { int d[4][2] = {{-1,0},{0,1},{1,0},{0,-1}}, i, count; int flag[4] = {0,0,0,0}; if(x0<=0 || y0<=0 || x0>x1 || y0>y1) return; if(maze[x0][y0].shape == ' ') //如果是本格是通的直接返回 return; count = 0; //如果本格不是通的 for(i=0; i<4; i++) { if(maze[x0+d[i][0]][y0+d[i][1]].shape == ' ') count++; } if(count >= 2) //一个墙格周围有两个以上方向可走,则返回 return; maze[x0][y0].shape = ' '; //如果本墙格没有超过2个方向是通的,继续往下执行 maze[x0][y0].color = WHITE; count = 0; while(count < 4) //向四个方向随机扩展 { i = random(4); if(flag[i] == 1) continue; flag[i] = 1; count++; build_maze(x0+d[i][0], y0+d[i][1], x1, y1); } }
int main( int argc, char **argv ) { t_maze maze; if (argc != 5) puts("usage: -width -height -density -solid"); else { init_maze(&maze, atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), atoi(argv[4])); if (build_maze(&maze)) print_maze(&maze); } return 0; }