• 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];
                }
            }
        }
  • 相关阅读:
    Leetcode题目:House Robber II
    Leetcode题目:Compare Version Numbers
    Leetcode题目:Intersection of Two Arrays II
    Leetcode题目:Intersection of Two Arrays
    Mac OS X 好用的软件包管理工具 Homebrew
    Linux 安装配置 JDK 8
    Centos 6.5 RedHat 6 安装mysql
    Ubuntu 源
    grub2 使用memdisk工具 启动任意iso
    Fedora 21 设置开机启动脚本
  • 原文地址:https://www.cnblogs.com/jbw752746541/p/13044030.html
Copyright © 2020-2023  润新知