経路生成を見なおしたらだいぶマシになった。
一つ前の部屋と必ず繋がっていれば、必ずすべての部屋がつながっていることが保証されるはず。
つながってないなら、ツルハシで壊せば行けるので、隠し部屋ということで(ゝω・)
void makeRoadH(int x1,int y1,int x2,int y2,int dx,int dy) { int cx=(x1+x2)/2; int cy=(y1+y2)/2; for(int x=x1;x!=cx && x>0 && x<99 && map[x,y1]>=0;x+=dx) map[x,y1]=0; for(int y=y1;y!=y2 && y>0 && y<99 && map[cx,y]>=0;y+=dy) map[cx,y]=0; for(int x=cx;x!=x2 && x>0 && x<99 && map[x,y2]>=0;x+=dx) map[x,y2]=0; } void makeRoadV(int x1,int y1,int x2,int y2,int dx,int dy) { int cx=(x1+x2)/2; int cy=(y1+y2)/2; for(int y=y1;y!=cy && y>0 && y<99 && map[x1,y]>=0;y+=dy) map[x1,y]=0; for(int x=x1;x!=x2 && x>0 && x<99 && map[x,cy]>=0;x+=dx) map[x,cy]=0; for(int y=cy;y!=y2 && y>0 && y<99 && map[x2,y]>=0;y+=dy) map[x2,y]=0; } void connectRoom(int x1,int y1,int x2,int y2 ) { if(prex2<x1 && (prey1+prey2)/2<=(y1+y2)/2) { makeRoadH(prex2,(prey1+prey2)/2,x1,(y1+y2)/2,1,1); } else if(prex2<x1 && (prey1+prey2)/2>(y1+y2)/2) { makeRoadH(prex2,(prey1+prey2)/2,x1,(y1+y2)/2,1,-1); } else if(x2<prex1 && (prey1+prey2)/2<=(y1+y2)/2) { makeRoadH(prex2,(prey1+prey2)/2,x1,(y1+y2)/2,-1,1); } else if(x2<prex1 && (prey1+prey2)/2>(y1+y2)/2) { makeRoadH(prex2,(prey1+prey2)/2,x1,(y1+y2)/2,-1,-1); } else if(prey2<y1 && (prex1+prex2)/2<=(x1+x2)/2) { makeRoadV((prex1+prex2)/2,prey2,(x1+x2)/2,y2,1,1); } else if(prey2<y1 && (prex1+prex2)/2>(x1+x2)/2) { makeRoadV((prex1+prex2)/2,prey2,(x1+x2)/2,y2,-1,1); } else if(y2<prey1 && (prex1+prex2)/2<=(x1+x2)/2) { makeRoadV((prex1+prex2)/2,prey2,(x1+x2)/2,y2,1,-1); } else if(y2<prey1 && (prex1+prex2)/2>(x1+x2)/2) { makeRoadV((prex1+prex2)/2,prey2,(x1+x2)/2,y2,-1,-1); } }