相邻六边形相对位置的判断

如图:

这里写图片描述

很过关卡界面会用六边形作为策划配置关卡数据,有时候我们需要判断相邻的六边形之间的关系.这里提供一个简单的算法,方便计算相邻六边形,后一个六边形相对于前一个六边形的位置.

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;

    }

说明

不妨将第一行设置为奇数行,第二行设置为偶数行,那么就会分为两个类别.前一个参数为奇数,后一个为偶数;前一个为偶数,后一个为奇数.然后分别进行判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值