/// <summary>
    /// 更新玩家的卡牌到玩家的位置
    /// </summary>
    /// <param name="cardInfo"></param>
    /// <param name="time"></param>
    public void MoveCard(CardInfo cardInfo, float time)
    {
        var endPos = cardInfo.parent.transform.position;
        var trans  = GetCardObject(cardInfo).GetComponent <Transform>();

        UnitTool.ToolStartCoroutine(MoveObject(endPos, time, trans));
    }
Beispiel #2
0
        /// <summary>
        /// 玩家出麻将
        /// </summary>
        /// <param name="cardIndex"></param>
        /// <param name="cardName"></param>
        /// <returns></returns>
        private void PlayerPlay(Card card, bool go)
        {
            if (!go)
            {
                UnitTool.ToolStartCoroutine(WaitCoroutine(card, false));
                return;
            }

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

            for (int i = 0; i < CurPlayerCards.Count; i++)
            {
                if (CurPlayerCards[i] == card)
                {
                    n = i;
                    break;
                }
            }
            majiangTable.DropCard(card, CurPlayerCards, index);
            //保存这个玩家出的牌
            pCard = CurPlayerCards[n];
            //清除
            CurPlayerCards.RemoveAt(n);
            //当前玩家重新排序
            SortCards(CurPlayerCards);
            majiangTable.FreshCard(CurPlayerCards, index);

            //当前玩家出牌后,其他三个玩家进行检测胡、碰、杠操作
            CheckMajiang();
        }
Beispiel #3
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();
    }
Beispiel #4
0
    /// <summary>
    /// 初始化牌到桌面
    /// </summary>
    public void StartGame()
    {
        //重新开始清除数据
        ClearDatas();

        //第一个发牌的玩家
        playerIndex = startIndex % 3;
        //初始化扑克牌信息
        tableCards = InitCards();
        //洗牌
        tableCards = GetRandomList <CardInfo>(tableCards);
        //实例化到桌面
        tableCards = pokerTable.InstaceCards(tableCards);
        //发牌协程
        UnitTool.ToolStartCoroutine(SendCards());
    }
    /// <summary>
    /// 更新卡牌到数据指定的位置
    /// </summary>
    /// <param name="cardInfo"></param>
    /// <param name="time"></param>
    public void MoveCard(CardInfo cardInfo, Vector3 endPos, float time)
    {
        var trans = GetCardObject(cardInfo).GetComponent <Transform>();

        UnitTool.ToolStartCoroutine(MoveObject(endPos, time, trans));
    }
 /// <summary>
 /// 开始出牌
 /// </summary>
 public override void StartPlay()
 {
     StartPlayEvent();
     //开始倒计时
     UnitTool.ToolStartCoroutine(Considerating(1));
 }
 /// <summary>
 /// 开始叫地主
 /// </summary>
 public override void ToLord()
 {
     clickLord = false;
     //开启思考协程
     UnitTool.ToolStartCoroutine(Considerating(0));
 }
Beispiel #8
0
 /// <summary>
 /// 发牌动画
 /// </summary>
 /// <param name="players"></param>
 /// <param name="startIndex"></param>
 /// <returns></returns>
 public void SendMajiangAnimation(List <MBasePlayer> players)
 {
     UnitTool.ToolStartCoroutine(_sendMajiangCoroutine(players));
 }
Beispiel #9
0
 /// <summary>
 /// 开始出牌
 /// </summary>
 public void StartPlay()
 {
     UnitTool.ToolStartCoroutine(StartPlayCoroutine());
 }
Beispiel #10
0
    /// <summary>
    /// 确定能够出牌
    /// </summary>
    public void CanPlayCards()
    {
        //清除桌面上的牌
        if (tableCards.Count != 0)
        {
            for (int i = 0; i < tableCards.Count; i++)
            {
                pokerTable.MoveCard(tableCards[i], new Vector3(0, 0, 0), 0.01f);
            }
        }

        tableCards.Clear();

        List <int> list = new List <int>();

        list.Clear();
        //将要出的牌添加到桌面List中并排序
        for (int i = 0; i < players[playerIndex % 3].myCardInfo.Count; i++)
        {
            if (players[playerIndex % 3].myCardInfo[i].isSelected)
            {
                tableCards.Add(players[playerIndex % 3].myCardInfo[i]);
                list.Add(players[playerIndex % 3].myCardInfo[i].cardIndex);
            }
        }

        //tableCards = SortCards(tableCards);

        //保存上个玩家出的牌的信息
        lastCards.Clear();

        PokerRules.PopEnable(list, out players[playerIndex % 3].myType);
        lastType = players[playerIndex % 3].myType;

        for (int i = 0; i < tableCards.Count; i++)
        {
            lastCards.Add(tableCards[i]);
        }

        //移动要出的牌到指定的位置,并清除myCards中出去的牌
        GameObject table = pokerTable.table;
        Vector3    pos   = table.transform.position + new Vector3(-tableCards.Count * 0.48f, 0, 0);

        for (int i = 0; i < tableCards.Count; i++)
        {
            tableCards[i].parent = table.transform;
            pokerTable.SetCardParent(tableCards[i]);
            pokerTable.InitImage(tableCards[i], false);
            pokerTable.MoveCard(tableCards[i], pos += new Vector3(0.78f, 0, 0), 0.5f);
            players[playerIndex % 3].myCardInfo.Remove(tableCards[i]);
        }

        //判断是否获胜
        if (players[playerIndex % 3].myCardInfo.Count == 0)
        {
            UnitTool.ToolStartCoroutine(Win(players[playerIndex % 3]));
            return;
        }

        //是玩家出牌
        if (playerIndex % 3 == 0)
        {
            //对当前手牌进行重新显示
            pokerTable.ShowCards(players[0].myCardInfo);
        }

        //当前玩家轮回结束
        players[playerIndex % 3].myTerm = true;

        //开始下一个玩家的出牌
        StartPlay();
    }
Beispiel #11
0
 /// <summary>
 /// 发牌动画
 /// </summary>
 /// <param name="players"></param>
 /// <param name="startIndex"></param>
 /// <returns></returns>
 public void SendMajiangAnimation(List <Player> players)
 {
     UnitTool.ToolStartCoroutine(SendCardCoroutine(players));
 }
Beispiel #12
0
 /// <summary>
 /// 开始出牌
 /// </summary>
 public virtual void StartPlay()
 {
     StartPlayEvent();
     //电脑开始思考
     UnitTool.ToolStartCoroutine(Considerating(1));
 }
Beispiel #13
0
 /// <summary>
 /// 叫地主
 /// </summary>
 public virtual void ToLord()
 {
     //电脑开始思考
     UnitTool.ToolStartCoroutine(Considerating(0));
 }