AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

一番近い部屋に廊下をつなげる

f:id:yasu9780:20150624193517j:plain

ダンジョンですが、廊下をつなげる方法を、今までは、一つ前に作った部屋と2つ前に作った部屋につないでいましたが、領域分割の状況によっては、かなり離れた部屋に廊下をつなげてしまう場合があったので、

以下のようにリストを調べて、一番近い部屋に廊下をつなげるようにしました。

void connectRoom(int x1,int y1,int x2,int y2 ,int depth)
{
	Vector2 pos0 = new Vector2( (x1+x2)/2 , (y1+y2)/2 );
	float min=99999f;
	int target=0;
	for(int i=0;i<RoomList.Count-1;i++)
	{
		if(RoomList[i]==null) continue;
		prex1=RoomList[i].x1;
		prey1=RoomList[i].y1;
		prex2=RoomList[i].x2;
		prey2=RoomList[i].y2;
		Vector2 pos =new Vector2( (prex1+prex2)/2 , (prey1+prey2)/2 );
		float dis = Vector2.Distance( pos0,pos);
		if(min > dis ) { target=i;min=dis; }
	}
	if( RoomList[target]==null ) return;;
	prex1=RoomList[target].x1;
	prey1=RoomList[target].y1;
	prex2=RoomList[target].x2;
	prey2=RoomList[target].y2;

	int pcx=(prex1+prex2)/2;
	int pcy=(prey1+prey2)/2;
	int cx=(x1+x2)/2;
	int cy=(y1+y2)/2;
	if(prex2<x1)
	{
		if( pcy<=cy )
			makeRoadH(prex2,pcy,x1,cy,1,1);
		else
			makeRoadH(prex2,pcy,x1,cy,1,-1);
	}
	else if(x2<prex1)
	{
		if( pcy<=cy )
			makeRoadH(prex2,pcy,x1,cy,-1,1);
		else
			makeRoadH(prex2,pcy,x1,cy,-1,-1);
	}
	else if( prey2<y1 )
	{
		if( pcx<=cx )
			makeRoadV( pcx,prey2,cx,y2,1,1);
		else
			makeRoadV( pcx,prey2,cx,y2,-1,1);
	}
	else if(y2<prey1)
	{
		if( pcx<=cx )
			makeRoadV( pcx,prey2,cx,y2,1,-1);
		else
			makeRoadV( pcx,prey2,cx,y2,-1,-1);
	}
}

これでtarget要素が一番近い部屋です(部屋の中心と中心の距離で調べています)
(自分の部屋はRoomList.Count-1なので)

 例えば、プレイヤー初期位置から、ある部屋までの距離が遠いほど、より強いモンスターを配置したり、より良い財宝を置けば、自動的な難易度設定として望ましいと思います。
 でも、なんかLSIの自動配線みたいだな(^_^;)