Example #1
0
    /// <summary>
    /// 玩家出麻将
    /// </summary>
    /// <param name="cardIndex"></param>
    /// <param name="cardName"></param>
    /// <returns></returns>
    private void _playerPlay(int cardIndex, string cardName, bool go)
    {
        if (!go)
        {
            UnitTool.ToolStartCoroutine(_waitCoroutine(cardIndex, cardName, false));
            return;
        }

        //当前玩家的出牌
        Debug.Log("Player " + index + " 出 " + cardIndex);
        int n = 0;

        for (int i = 0; i < players[index].myCards.Count; i++)
        {
            if (players[index].myCards[i].cardName == cardName)
            {
                n = i;
                break;
            }
        }
        _majiangTable.PlayMajiangAnimation(cardName, players[index].myCards, index);
        //保存这个玩家出的牌
        pCard = players[index].myCards[n];
        //清除
        players[index].myCards.RemoveAt(n);
        //当前玩家重新排序
        _sortCards(players[index].myCards);
        _majiangTable.ShowMajiang(players[index].myCards, index);

        //当前玩家出牌后,其他三个玩家进行检测胡、碰、杠操作
        _checkMajiang();
    }
Example #2
0
    /// <summary>
    /// 根据数据返回卡牌物体
    /// </summary>
    /// <param name="cardInfo"></param>
    /// <returns></returns>
    public MCard GetCardObject(MCardInfo cardInfo)
    {
        MCard card = null;

        foreach (var c in uiCards)
        {
            if (c.name == cardInfo.cardName)
            {
                card = c;
            }
        }

        return(card);
    }
    /// <summary>
    /// 判断是否能胡牌
    /// </summary>
    /// <param name="list"></param>
    /// <param name="mCardInfo"></param>
    /// <returns></returns>
    public static bool IsCanHU(List <MCardInfo> list, MCardInfo mCardInfo)
    {
        List <int> pais = new List <int>();

        for (int i = 0; i < list.Count; i++)
        {
            pais.Add(list[i].cardIndex);
        }
        if (mCardInfo != null)
        {
            pais.Add(mCardInfo.cardIndex);
        }

        //只有两张牌
        if (pais.Count == 2)
        {
            return(pais[0] == pais[1]);
        }

        //先排序
        pais.Sort();

        //依据牌的顺序从左到右依次分出将牌
        for (int i = 0; i < pais.Count; i++)
        {
            List <int> paiT = new List <int>(pais);
            List <int> ds   = pais.FindAll(delegate(int d)
            {
                return(pais[i] == d);
            });

            //判断是否能做将牌
            if (ds.Count >= 2)
            {
                //移除两张将牌
                paiT.Remove(pais[i]);
                paiT.Remove(pais[i]);

                //避免重复运算 将光标移到其他牌上
                i += ds.Count;

                if (HuPaiPanDin(paiT))
                {
                    return(true);
                }
            }
        }
        return(false);
    }
    /// <summary>
    /// 碰判断
    /// </summary>
    /// <param name="list"></param>
    /// <param name="mCardInfo"></param>
    /// <returns></returns>
    public static int IsPeng(List <MCardInfo> list, MCardInfo mCardInfo)
    {
        int n = -1;

        for (int i = 0; i < list.Count - 1; i++)
        {
            if (list[i].cardIndex == list[i + 1].cardIndex && list[i].cardIndex == mCardInfo.cardIndex)
            {
                n = list[i].cardIndex;
                break;
            }
        }

        return(n);
    }
Example #5
0
 /// <summary>
 /// 清除数据
 /// </summary>
 private void _clearDatas()
 {
     //清除桌数据
     pCard = null;
     tCards.Clear();
     temp.Clear();
     //清除玩家手牌
     for (int i = 0; i < 4; i++)
     {
         players[i].myCards.Clear();
     }
     //重置玩家索引
     index = MyUtil.GetRange(0, 4);
     //清除UI
     _majiangTable.ClearUi();
 }
Example #6
0
    /// <summary>
    /// 生成卡牌数据
    /// </summary>
    private void _initCards()
    {
        for (int i = 89; i < 123; i++)
        {
            Sprite o = FileIO.LoadSprite(i);

            for (int j = 0; j < 4; j++)
            {
                MCardInfo cardInfo = new MCardInfo(o.name, j + 1);
                tCards.Add(cardInfo);
            }
        }

        //洗牌
        tCards = _getRandomList <MCardInfo>(tCards);
    }
Example #7
0
    /// <summary>
    /// 加载麻将图片
    /// </summary>
    /// <param name="mCardInfo"></param>
    /// <returns></returns>
    private Sprite _initImage(MCardInfo mCardInfo, int type)
    {
        //根据卡牌信息生成图片
        string path;

        Sprite sprite = null;

        //由于没有提供根据名字来加载的方法,所以只能自己通过名字取index来加载

        if (type == 0)
        {
            int    i    = 0;
            string name = "n_" + mCardInfo.cardIndex.ToString();
            path = "lfx/tablemajiang/spritepack/majiang/" + name;
            for (i = 0; i < R.SpritePack.path.Length; i++)
            {
                if (path == R.SpritePack.path[i])
                {
                    break;
                }
            }
            sprite = FileIO.LoadSprite(i);
        }
        else if (type == 1)
        {
            sprite = FileIO.LoadSprite(125);
        }
        else if (type == 2)
        {
            sprite = FileIO.LoadSprite(123);
        }
        else if (type == 3)
        {
            sprite = FileIO.LoadSprite(124);
        }

        if (sprite == null)
        {
            Debug.Log("Sprite Null");
            return(null);
        }
        else
        {
            return(sprite);
        }
    }
Example #8
0
    /// <summary>
    /// 麻将动画和图片
    /// </summary>
    /// <param name="mCardInfo"></param>
    /// <param name="pos"></param>
    /// <param name="index"></param>
    /// <param name="isSend"></param>
    private void _majiangAnimation(MCardInfo mCardInfo, Vector3 pos, int index, bool isSend)
    {
        var card = GetCardObject(mCardInfo);

        card.transform.localScale = new Vector3(1, 1, 1);
        card.image.sprite         = _initImage(mCardInfo, index);

        if (!isSend)
        {
            card.transform.SetParent(playerTrans[index]);
            card.transform.SetAsFirstSibling();
        }
        else
        {
            card.transform.SetParent(table);
        }

        _moveMajiang(mCardInfo, pos);
    }
Example #9
0
    /// <summary>
    /// 摸牌动画
    /// </summary>
    /// <param name="mCardInfo"></param>
    /// <param name="index"></param>
    public void DrawMajiangAnimation(MCardInfo mCardInfo, int index)
    {
        Vector3 pos = Vector3.zero;

        if (index == 0)
        {
            pos = playerTrans[index].position + new Vector3(3f, 0, 0);
        }
        if (index == 1)
        {
            pos = playerTrans[index].position + new Vector3(-2f, 3.3f, 0);
        }
        if (index == 2)
        {
            pos = playerTrans[index].position + new Vector3(-9f, 0, 0);
        }
        if (index == 3)
        {
            pos = playerTrans[index].position + new Vector3(-2f, -3.8f, 0);
        }

        _majiangAnimation(mCardInfo, pos + new Vector3(2, 0, 0), index, false);
    }
Example #10
0
    /// <summary>
    /// 检查某个玩家是否胡牌
    /// </summary>
    /// <param name="list"></param>
    /// <param name="mCardInfo"></param>
    /// <returns></returns>
    private bool _checkHu(List <MCardInfo> list, MCardInfo mCardInfo, int win)
    {
        bool canHu = false;

        if (MajiangRules.IsCanHU(list, mCardInfo))
        {
            canHu    = true;
            winIndex = win;
            if (mCardInfo != null)
            {
                players[win].myCards.Add(pCard);
            }
            if (winIndex % 4 != 0)
            {
                _huMajiang();
            }
            else
            {
                _setButton(false, false, true, false);
            }
        }

        return(canHu);
    }
Example #11
0
    /// <summary>
    /// 移动麻将到指定的位置
    /// </summary>
    /// <param name="cardInfo"></param>
    /// <param name="time"></param>
    private void _moveMajiang(MCardInfo mCardInfo, Vector3 endPos)
    {
        var tran = GetCardObject(mCardInfo).GetComponent <Transform>();

        tran.position = endPos;
    }
 /// <summary>
 /// 添加麻将到玩家的myCards列表中
 /// </summary>
 /// <param name="mCardInfo"></param>
 public void AddCard(MCardInfo mCardInfo)
 {
     _myCards.Add(mCardInfo);
 }