如图:
很过关卡界面会用六边形作为策划配置关卡数据,有时候我们需要判断相邻的六边形之间的关系.这里提供一个简单的算法,方便计算相邻六边形,后一个六边形相对于前一个六边形的位置.
public enum MapLineType
{
NONE, //没有关系;
Left_UP, //左上角;
Right_UP, //右上角;
Right_H, //右边;
Right_Down, //右下角;
Left_Down, //左下角;
Left_H //左边
}
核心代码
public MapLineType GetLineType(int index1,int index2)
{
int number1_line = index1/8;
int number1_row = index1%8;
int number2_line = index2/8;
int number2_row = index2%8;
//=====Left_H=============
if(number2_line==number1_line&&number2_row-number1_row==-1)
return MapLineType.Left_H;
//=====Right_H=============
if(number2_line==number1_line&&number2_row-number1_row==1)
return MapLineType.Right_H;
// ---------------------------------------------------
// fist line is even number 偶数
// next line is odd number 奇数
// ----------------------------------------------------
if(number1_line%2==0)
{
// line2 is bellow line1;
if(number2_line-number1_line==1)
{
if(number2_row-number1_row==0)
{
return MapLineType.Left_Down;
}
else
{
return MapLineType.Right_Down;
}
}
else
{
//line2 is head line1;
if(number2_row-number1_row==0)
{
return MapLineType.Left_UP;
}
else
{
return MapLineType.Right_UP;
}
}
}
else
{
// line2 is bellow line1;
if(number2_line-number1_line==1)
{
if(number2_row-number1_row==0)
{
return MapLineType.Right_Down;
}
else
{
return MapLineType.Left_Down;
}
}
else
{
//line2 is head line1;
if(number2_row-number1_row==0)
{
return MapLineType.Right_UP;
}
else
{
return MapLineType.Left_UP;
}
}
}
return MapLineType.NONE;
}
说明
不妨将第一行设置为奇数行,第二行设置为偶数行,那么就会分为两个类别.前一个参数为奇数,后一个为偶数;前一个为偶数,后一个为奇数.然后分别进行判断