正六边形策略游戏地图算法

       我们工作室谈成的第一个项目是一个webgame,二战体裁,正六边形策略类,从万能的C++转型开发web的确有点不适应,局限性太大,有些作法就需要改变一下了,用了一下午的时间看了看javascript,发现它的面对对象写法实在太恶心了,函数即是对象,函数里面还能套函数,无语了…  这个项目,正六边形地图是关键,因为没有webgame的开发经验,所以无法确定网页能否实现六边形地图,在我印象中我还没有玩过网页游戏是六边形的,所有的基本上都是正方格。

       百度一下,恶补了一下数学,已经初步的确定了六边形地图在webgame上的可行性。

       先上一段公式…

AB=R,CD=√3R/2,S=3√3R²/2;

外接圆半径R =外接正方形边长L / 2

边长L = 外接圆半径R

内切圆半径r = 根号3 * 外接圆半径R / 2

面积S = 3 * 根号3 * 外接圆半径R的平方 / 2

首先先绘制一个六边形

drawPoly6(O.x , O.y , R)

//上

A.x = -R/2 + O.x

A.y = -r + O.y

B.x = R/2 + O.x

B.y = A.y

//中

C.x = R + O.x

C.y = O.y

F.x = -R + O.x

F.y = O.y

//下

D.x = B.x

D.y = r + O.y

E.x = A.x

E.y = D.y

这些点的位置一旦计算出来,就可以用html的建立一个六边形的热区了。

document.write(" ");
document.write(" ");
document.write(" ");

 

下面在绘制整个地图

drawPoly6Map(row , col , x , y , R)

r(内切圆半径) =根号3 * R / 2;

var space = new CPoint(this.R / 2 * 3, this.r * 2); //间距

for (i = 0; i < this.row; i++)

{

for (j = 0; j < this.col; j++)

{

var index = i * this.col + j;

var polyPos = new CPoint(0, 0);

polyPos.x = this.startPos.x + space.x * j;

polyPos.y = this.startPos.y + space.y * i;

//如果是奇数列需偏移高度

if (j % 2 == 1)

{

       polyPos.y += this.r;

}

//创建对象

this.polys[index] = new CPoly(index, polyPos, R);

}

}

寻路还没研究,但是感觉用A*就可以做。

你可能感兴趣的:(人在旅途,WEB)