Unity棋牌游戏入座,座位思路.

假设入座玩家总人数为5个,自己的座位永远在下方记为1,玩家依次入座,顺序为2,3,4,5如图所示:

 此时我的座位下标索引为0,即游戏中都有MyUserId 的判断用来区分是否是自己,如果是自己的PosIndex永远取0.

如果我入座的方位是2,那么就取第一个位置..此时视图所展示的情况应该如图:

要保证自己视图永远在下方,那么就需要对应的更新坐标位置,并保证入座显示全部正常.

故:当我的方位Direction = 2 (posIndex = 0),

例1:如果此时有一个玩家入座到Direction = 4 (posIndex = 2)的方位上:

玩家的方位Direction = 4  > 我的方位Direction = 2 (posIndex = 0)

posIndex = 4 - 2 = 2,即 其他玩家的方位大于我的方位 otherDir > myDir  => posIndex = otherDir - myDir

例2:如果此时有一个玩家入座到Direction = 1 (posIndex = 4)的方位上:

玩家的方位Direction = 1   < 我的方位Direction = 2

posIndex = 5(玩家总数) + 1(其他玩家Dir) - 2(我的Dir) = 4,即 其他玩家的方位小于我的方位 otherDir < myDir  => posIndex = playerCount + otherDir - myDir..

伪代码如下:

 void Test(ServerMessage serverMsg,MyUserInfo myInfo)
    {
        int posIndex = -1;
        //坐标索引集合,5个玩家
        List<int> PosList = new List<int> {1, 2, 3, 4, 5};
        //测试代码,如果是自己,永远取第一个.
        if (serverMsg.userId == myInfo.userId)
        {
            posIndex = PosList[0];
        }
        else
        {
            //如果玩家方位大于自己的方位的话
            if (serverMsg.Direction > myInfo.dir)
            {
                //直接用玩家的方位减去自己的方位即为玩家的头像位置
                posIndex = PosList[serverMsg.Direction - myInfo.dir];
            }
            else
            {
                //用玩家最大人数减去自己的方位再加上玩家的方位,即为玩家的位置
                posIndex = PosList[PosList.Count - myInfo.dir + serverMsg.Direction];
            }
        }
    }
原文地址:https://www.cnblogs.com/jbw752746541/p/13044030.html