いちおう以下のサイトで紹介されてるアルゴリズムにそって壁を設置
せっき~のゲーム屋さん ドルアーガの塔 乱数の工夫の正体
まだなんかルール上おかしい配置があるので、バグがある感じですが
SearchAndBuild()を呼んで、
壁の無い柱が無くなったら1を返すので終了
返値が1以外なら再度呼び出す
int[,] map=new int[18,10]; for(;;) { int ret=SearchAndBuild(); if(ret==1) break; } int SearchAndBuild() { int flag=0; for(int y=0;y<=8;y++) for(int x=1;x<=17;x++) { for(;;) { if(x<1 || y<0 || x>17 || y>8 ) break; if(map[x,y]!=0) break; else { flag=1; int r=Random.Range (1, 4); if(r==1 && y>0) { map[x,y]=r; y--; dropSprite(Vwall,"Units",x*3,y*3+1.5f); } else if(r==2 && y<8) { map[x,y]=r; y++; dropSprite(Vwall,"Units",x*3,y*3+1.5f); } else if(r==3 && x>1) { map[x,y]=r; x--; dropSprite(Hwall,"Units",x*3+1.5f,y*3); } else if(r==4 && x<17) { map[x,y]=r; x++; dropSprite(Hwall,"Units",x*3+1.5f,y*3); } } } } if(flag==0) return 1; return 0; } void dropSprite(Sprite sp,string layer,float x,float y) { SpriteRenderer obj=new GameObject("Sprite").AddComponent<SpriteRenderer>(); obj.sortingLayerName = layer; obj.sprite = Instantiate(sp) as Sprite; obj.transform.position = new Vector3(x,y); }