コード例 #1
0
        public void OCustomLogic_ykmj(ISFSObject data)
        {
            if (!ConfigData.Jue)
            {
                return;
            }

            int type  = data.ContainsKey(RequestKey.KeyType) ? data.GetInt(RequestKey.KeyType) : -1;
            var seat  = data.ContainsKey(RequestKey.KeySeat) ? data.GetInt(RequestKey.KeySeat) : -1;
            int value = data.ContainsKey(RequestKey.KeyOpCard) ? data.GetInt(RequestKey.KeyOpCard) : -1;

            if (seat == -1 && DataCenter.IsReconect)
            {
                seat = DataCenter.SelfSeat;
            }
            if (GameCenter.DataCenter.SelfSeat != seat)
            {
                return;
            }
            PlayerHand = Game.MahjongGroups.MahjongHandWall[0].MahjongList;
            PengList   = Game.MahjongGroups.MahjongCpgs[0].CpgList;
            switch (type)
            {
            case NetworkProtocol.MJRequestTypeCPG:
                EnGroupType cpgType = data.ContainsKey(ProtocolKey.KeyTType)
                        ? (EnGroupType)data.GetInt(ProtocolKey.KeyTType)
                        : EnGroupType.None;
                if (cpgType == EnGroupType.Peng)
                {
                    int card = data.ContainsKey(RequestKey.KeyCard) ? data.GetInt(RequestKey.KeyCard) : -1;
                    OnPengCard(card);
                }
                break;

            case NetworkProtocol.MJRequestTypeGetInCard:
                OnGetCard(value);
                break;

            case NetworkProtocol.MJThrowoutCard:
                OnOutPutCard(value);
                break;

            case -1:
                if (DataCenter.IsReconect)
                {
                    CheckJueCard();
                }
                break;
            }
        }
コード例 #2
0
ファイル: SingleResultItem.cs プロジェクト: narakai/chessgame
        public void SetCpgCard(List <CpgModel> cpgList)
        {
            if (null == cpgList || cpgList.Count == 0)
            {
                return;
            }
            for (int i = 0; i < cpgList.Count; i++)
            {
                EnGroupType cpgType = EnGroupType.None;
                if (cpgList[i].Type == CpgProtocol.AnGang)
                {
                    cpgType = EnGroupType.AnGang;
                }

                UiCardGroup uiGroup = GameCenter.Assets.GetUIMahjongGroup(cpgList[i].Cards, UIMahjongType.Small, cpgType);
                CardGroup.AddUiCdGroup(uiGroup);
            }
        }
コード例 #3
0
ファイル: GameLogic_Cpg.cs プロジェクト: narakai/chessgame
            public void SetData(ISFSObject data)
            {
                var db = GameCenter.DataCenter;

                db.CurrOpSeat = data.TryGetInt(RequestKey.KeySeat);
                GangBao       = data.ContainsKey("bao");
                CurrOpChair   = db.CurrOpChair;
                OldOpChair    = db.OldOpChair;
                CpgData       = MahjongUtility.CreateCpg(data);
                CpgData.Laizi = db.Game.LaiziCard; //cpg中有赖子牌,标记Icon
                CpgType       = CpgData.Type;
                db.Players[db.CurrOpChair].IsTuiDan = data.ContainsKey("tuidan");
                if (CpgType != EnGroupType.ZhuaGang && IsNotXjfdType(CpgType))
                {
                    //将cpg信息添加到玩家数据中
                    GameCenter.DataCenter.Players[CurrOpChair].CpgDatas.Add(CpgData);
                }

                CpgModel = new CpgModel(data);
            }
コード例 #4
0
ファイル: CpgLocalSave.cs プロジェクト: narakai/chessgame
 public CpgSaveData(CpgData data, int index)
 {
     type       = data.Type;
     value      = data.AllCards().ToArray();
     this.index = index;
 }
コード例 #5
0
ファイル: D2MahjongMng.cs プロジェクト: narakai/chessgame
        public UiCardGroup GetGroup(int[] value, EnD2MjType type, bool isHaveBg = false, int laizi = UtilDef.NullMj, EnGroupType cpgType = EnGroupType.None)
        {
            GameObject[] list   = new GameObject[value.Length];
            Vector2      mjSize = new Vector2();

            for (int i = 0; i < value.Length; i++)
            {
                list[i] = GetMj(value[i], type, laizi, cpgType, i);

                switch (type)
                {
                case EnD2MjType.Me:
                    mjSize = MjSizeMe;
                    break;

                case EnD2MjType.Up:
                    mjSize = MjSizeUp;
                    break;
                }
            }
            //tileBack_up_0
            UiCardGroup cardGroup = UiCardGroup.create(list, mjSize, isHaveBg ? Bg : null, cpgType);

            return(cardGroup);
        }
コード例 #6
0
ファイル: D2MahjongMng.cs プロジェクト: narakai/chessgame
        public virtual GameObject GetMj(int value, EnD2MjType type, int laizi = UtilDef.NullMj, EnGroupType cpgType = EnGroupType.None, int cdindex = 0)
        {
            GameObject ret = null;

            //暗杠时显示背面  只在精品麻将中有这种限制,第四张要反过来
            if (GameConfig.GameKey == "jpmj" && cpgType == EnGroupType.AnGang && TileBackUp != null && cdindex < 3)
            {
                ret = Instantiate(TileBackUp);
                return(ret);
            }

            switch (type)
            {
            case EnD2MjType.Me:
                ret = Instantiate(SingleMe);
                Image valueImageMe = ret.transform.FindChild("CdValue").GetComponent <Image>();

                //修正花牌显示
                if (value >= 96)
                {
                    valueImageMe.GetComponent <RectTransform>().anchoredPosition3D = Vector3.zero;
                }

                valueImageMe.sprite = Instantiate(_mahjongMeKv[value]);
                valueImageMe.SetNativeSize();
                break;

            case EnD2MjType.Up:
                ret = Instantiate(SingleUp);
                Image valueImage = ret.transform.FindChild("CdValue").GetComponent <Image>();

                //修正花牌显示
                if (value >= 96)
                {
                    valueImage.GetComponent <RectTransform>().anchoredPosition3D = Vector3.zero;
                }

                valueImage.sprite = Instantiate(_mahjongUpKv[value]);
                valueImage.SetNativeSize();
                break;
            }

            //如果花牌为赖子牌
            if (laizi != UtilDef.NullMj)
            {
                bool result = false;

                if (value == laizi)
                {
                    result = true;
                }

                if (laizi >= 96 && value >= 96)
                {
                    result = true;
                }

                ret.transform.Find("Laizi").gameObject.SetActive(result);
            }

            return(ret);
        }
コード例 #7
0
        public static UiCardGroup Create(GameObject[] objList, Vector2 MjSize, Sprite bg, EnGroupType cpgType = EnGroupType.None)
        {
            GameObject  obj = new GameObject();
            UiCardGroup ret = obj.AddComponent <UiCardGroup>();

            ret._mjSize = MjSize;
            ret.AddObj(objList);
            //根据暗杠的形式摆牌
            //if (cpgType == EnGroupType.AnGang)
            //{
            //    ret.SortAnGangGroup();
            //    return ret;
            //}
            ret.Sort();
            if (bg != null)
            {
                Image imgBg = obj.AddComponent <Image>();
                imgBg.sprite = bg;
                imgBg.type   = Image.Type.Sliced;
                //设置底图大小 要比大
                RectTransform rtf = obj.GetComponent <RectTransform>();
                rtf.sizeDelta = new Vector2(ret.mObjList.Count * ret._mjSize.x + 20, ret._mjSize.y + 20);
                obj.AddComponent <Button>();
            }
            return(ret);
        }
コード例 #8
0
ファイル: AssetsComponent.cs プロジェクト: da1fanshu/yizhe
        public UiCardGroup GetUIMahjongGroup(IList <int> cards, UIMahjongType uiType, EnGroupType cpgType = EnGroupType.None, bool isHaveBg = false)
        {
            Vector2 mjSize = Vector2.zero;

            GameObject[] list = new GameObject[cards.Count];
            UiCardGroup  cardGroup;

            switch (uiType)
            {
            case UIMahjongType.Big:
                mjSize = mSizeBig;
                break;

            case UIMahjongType.Small:
                mjSize = mSizeSmall;
                break;
            }
            if (cpgType == EnGroupType.XFDan || cpgType == EnGroupType.YaoDan || cpgType == EnGroupType.JiuDan || cpgType == EnGroupType.ZFBDan)
            {
                List <int>            cardsList = new List <int>();
                Dictionary <int, int> dic       = new Dictionary <int, int>();
                for (int i = 0; i < cards.Count; i++)
                {
                    if (!dic.ContainsKey(cards[i]))
                    {
                        dic[cards[i]] = 1;
                        cardsList.Add(cards[i]);
                    }
                    else
                    {
                        dic[cards[i]]++;
                    }
                }
                GameObject[] xjfdList = new GameObject[cardsList.Count];
                for (int i = 0; i < cardsList.Count; i++)
                {
                    if (dic.ContainsKey(cardsList[i]))
                    {
                        xjfdList[i] = GetUIMahjong(cardsList[i], uiType);
                        if (dic[cardsList[i]] > 1)
                        {
                            //GameObject temp = MahjongUtility.GetScriptableAssets<MahjongMiscAssets>().GetAssetToObj("NumSign" + dic[cardsList[i]]);
                            GameObject temp = GameUtils.GetAssets <GameObject>("NumSign" + dic[cardsList[i]]);
                            temp.SetActive(false);
                            var obj = Instantiate(temp);
                            if (obj != null)
                            {
                                obj.transform.parent        = xjfdList[i].transform;
                                obj.transform.localRotation = Quaternion.Euler(0, 0, 0);
                                obj.gameObject.layer        = xjfdList[i].gameObject.layer;
                                switch (uiType)
                                {
                                case UIMahjongType.Big:
                                    obj.transform.localPosition = new Vector3(-20, -37, 0);
                                    obj.transform.localScale    = Vector3.one * 0.7f;
                                    break;

                                case UIMahjongType.Small:
                                    obj.transform.localPosition = new Vector3(-7, -3f, 0);
                                    obj.transform.localScale    = Vector3.one * 0.4f;
                                    break;
                                }
                                obj.SetActive(true);
                            }
                        }
                    }
                }
                cardGroup = UiCardGroup.Create(xjfdList, mjSize, isHaveBg ? MahjongCardAssets.TileBackground : null, cpgType);
            }
            else
            {
                for (int i = 0; i < cards.Count; i++)
                {
                    //暗杠时显示背面, 第四张要反过来
                    if (cpgType == EnGroupType.AnGang && i < 3)
                    {
                        list[i] = GetUIMahjongBg(uiType);
                    }
                    else
                    {
                        list[i] = GetUIMahjong(cards[i], uiType);
                    }
                }
                cardGroup = UiCardGroup.Create(list, mjSize, isHaveBg ? MahjongCardAssets.TileBackground : null, cpgType);
            }
            return(cardGroup);
        }
コード例 #9
0
        public static CpgData CreateCpg(ISFSObject data)
        {
            CpgData     ret  = null;
            EnGroupType type = EnGroupType.None;

            if (data.ContainsKey(ProtocolKey.KeyTType))
            {
                type = (EnGroupType)(data.GetInt(ProtocolKey.KeyTType));
            }
            else if (data.ContainsKey(RequestKey.KeyType))
            {
                type = (EnGroupType)(data.GetInt(RequestKey.KeyType));
            }
            switch (type)
            {
            case EnGroupType.Chi:
                ret = new CpgChi();
                break;

            case EnGroupType.JueGang:
            case EnGroupType.Peng:
                ret = new CpgPeng();
                break;

            case EnGroupType.ZhuaGang:
                ret = new CpgZhuaGang();
                break;

            case EnGroupType.MingGang:
            case EnGroupType.AnGang:
            {
                if (data.ContainsKey("bao"))
                {
                    ret = new CpgSelfGangBao();
                }
                else
                {
                    ret = new CpgSelfGang();
                }
            }
            break;

            case EnGroupType.PengGang:
                ret = new CpgOtherGang();
                break;

            case EnGroupType.XFGang:
            case (EnGroupType)NetworkProtocol.MJRequestTypeXFG:
                ret = new CpgXFGang();
                break;

            case EnGroupType.XFDan:
            case EnGroupType.ZFBDan:
            case EnGroupType.YaoDan:
            case EnGroupType.JiuDan:
                ret = new CpgXfdGang();
                break;

            case EnGroupType.AnJueGang:
                ret = new CpgAnJueGang();
                break;
            }
            ret.ParseData(data);
            return(ret);
        }
コード例 #10
0
        /// <summary>
        /// 查找手牌中可以杠出的牌
        /// </summary>
        /// <returns></returns>
        private List <int> FindCanXjfd()
        {
            _hasDan = new bool[4];
            int        yaoJiNum   = 0;
            var        dataCenter = GameCenter.DataCenter;
            List <int> canXjfd    = new List <int>();

            List <int>[] tempXjfds = new List <int> [4];
            for (int i = 0; i < tempXjfds.Length; i++)
            {
                tempXjfds[i] = new List <int>();
            }
            var cpgData = dataCenter.OneselfData.CpgDatas;

            for (int i = 0; i < cpgData.Count; i++)
            {
                EnGroupType type = cpgData[i].Type;
                switch (type)
                {
                case EnGroupType.YaoDan:
                    _hasDan[0] = true;
                    break;

                case EnGroupType.JiuDan:
                    _hasDan[1] = true;
                    break;

                case EnGroupType.ZFBDan:
                    _hasDan[2] = true;
                    break;

                case EnGroupType.XFDan:
                    _hasDan[3] = true;
                    break;
                }
            }
            if (dataCenter.Players[dataCenter.CurrOpChair].IsAuto)
            {
                canXjfd.Add(dataCenter.GetInMahjong);
                return(canXjfd);
            }
            List <int> cards = dataCenter.OneselfData.HardCards;

            MahjongUtility.SortMahjong(cards);
            Dictionary <int, int> dic = GameCenter.Network.C2S.Custom <C2SCustom>().GetCardAmountOnXjfd(cards);

            for (int i = 0; i < _hasDan.Length; i++)
            {
                var tempXjfd = tempXjfds[i];
                if (!dataCenter.ConfigData.YaoJiuDan && i <= 1 && !dataCenter.ConfigData.FeiDan)
                {
                    continue;
                }
                if (i == 0 && dataCenter.ConfigData.FeiDan && dic.ContainsKey(33))
                {
                    canXjfd.Add(33);
                    yaoJiNum = dic.ContainsKey(33) ? dic[33] : 0;
                    dic.Remove(33);
                }
                if (_hasDan[i])
                {
                    CheckIsHaveNeed(dic, i, canXjfd, out canXjfd);
                }
                else
                {
                    CheckIsHaveNeed(dic, i, tempXjfd, out tempXjfd);
                }
            }
            if (!dataCenter.OneselfData.IsTuiDan && !dataCenter.ConfigData.ZanDan)
            {
                return(canXjfd);
            }
            for (int i = 0; i < tempXjfds.Length; i++)
            {
                var temp = tempXjfds[i];
                if (temp != null && temp.Count > 0)
                {
                    temp.Sort();
                    int diffcultNum = 0;
                    if (temp.Count > 0)
                    {
                        diffcultNum++;
                    }
                    for (int j = 0; j < temp.Count - 1; j++)
                    {
                        if (temp[j] != temp[j + 1])
                        {
                            diffcultNum++;
                        }
                    }

                    if (dataCenter.ConfigData.FeiDan)
                    {
                        diffcultNum += yaoJiNum;
                    }
                    int cnt = 3;
                    if (!dataCenter.ConfigData.SanFeng && temp[0] >= 65 && temp[0] <= 74)
                    {
                        cnt = 4;
                    }
                    if (diffcultNum >= cnt)
                    {
                        for (int j = 0; j < temp.Count; j++)
                        {
                            canXjfd.Add(temp[j]);
                        }
                    }
                }
            }
            return(canXjfd);
        }