Beispiel #1
0
    public override void Execute()
    {
        PlayCardArg e = evt.data as PlayCardArg;


        //判断玩家出牌合不合法


        if (e.cCharacterType == CharacterType.Player)
        {
            if (e.cardType == roundModel.CardType && e.weight > roundModel.CurrentWeight)
            {
                dispatcher.Dispatch(ViewEvent.SUCCESSED_PLAY);
            }
            else if (e.cardType == CardType.Boom && roundModel.CardType != CardType.Boom)
            {
                dispatcher.Dispatch(ViewEvent.SUCCESSED_PLAY);
            }
            else if (e.cardType == CardType.JokerBoom)

            {
                dispatcher.Dispatch(ViewEvent.SUCCESSED_PLAY);
            }

            else if (roundModel.BiggesterCharacter == CharacterType.Player)
            {
                dispatcher.Dispatch(ViewEvent.SUCCESSED_PLAY);
            }
            else
            {
                Debug.Log("不合法的出牌");

                return;
            }
        }

        //炸弹翻倍
        if (e.cardType == CardType.Boom || e.cardType == CardType.JokerBoom)
        {
            integrationModel.Multiples *= 2;
        }
        //保存回合信息
        roundModel.BiggesterCharacter = e.cCharacterType;
        roundModel.CardType           = e.cardType;
        roundModel.CurrentWeight      = e.weight;
        roundModel.CurrentLength      = e.length;

        //转换出牌角色
        roundModel.Trun();
    }
    /// <summary>
    /// 请求玩家出牌事件的回调
    /// </summary>
    /// <param name="payload"></param>
    private void onPlayPayCard(IEvent payload)
    {
        List <Card> cardList = characterView.player.FindSelectCard();
        CardType    cardType;

        Rulers.CanPop(cardList, out cardType);
        //还需要根据上次出牌的类型



        if (cardType != CardType.None)
        {
            //可以出牌
            PlayCardArg e = new PlayCardArg(cardList.Count, Toos.GetWeight(cardList, cardType), CharacterType.Player, cardType);


            dispatcher.Dispatch(CommandEvent.PlayCard, e);
        }
        else
        {
            Debug.Log("请选择正确的牌");
        }
    }
    IEnumerator DelayOneSecound(ComputerSmartArgs obj)
    {
        yield return(new WaitForSeconds(1f));

        bool can = false;

        switch (obj.characterType)
        {
        case CharacterType.ComputerRight:
            can = characterView.ComputerRight.ComputerSemarPlayCard(obj.cardType, obj.weight, obj.lenght, obj.biggerst == CharacterType.ComputerRight);
            if (can)
            {
                List <Card> cardList = characterView.ComputerRight.SelectCards;
                CardType    cardType = characterView.ComputerRight.currType;
                //--------------------------添加牌到桌面----------------



                characterView.Desk.Clear();    //添加牌之前把桌面清空下。这里可以做一个剩余牌数(记牌器),把出的牌临时放到一个数组里面,把总牌数减去手牌减去临时数组,就是剩余牌数,这是一个扩展
                foreach (Card card in cardList)
                {
                    characterView.AddCard(CharacterType.Desk, card, false);
                }


                //-----------------可以出牌-------------------
                PlayCardArg ee = new PlayCardArg(cardList.Count, Toos.GetWeight(cardList, cardType), CharacterType.ComputerRight, cardType);


                if (!characterView.ComputerRight.HasCard)
                {
                    Identity     r   = characterView.ComputerRight.Identity;
                    Identity     l   = characterView.ComputerLeft.Identity;
                    Identity     p   = characterView.player.Identity;
                    GameOverArgs eee = new GameOverArgs()
                    {
                        ComputerRightWin = true,

                        ComputerLeftWin = l == r ? true : false,
                        PlayWin         = p == r ? true: false,
                    };


                    dispatcher.Dispatch(CommandEvent.GameOver, eee);
                }
                else
                {
                    dispatcher.Dispatch(CommandEvent.PlayCard, ee);
                }
            }
            else
            {
                dispatcher.Dispatch(CommandEvent.PassCard);
            }

            break;

        case CharacterType.ComputerLeft:

            can = characterView.ComputerLeft.ComputerSemarPlayCard(obj.cardType, obj.weight, obj.lenght, obj.biggerst == CharacterType.ComputerLeft);

            if (can)
            {
                List <Card> cardList = characterView.ComputerLeft.SelectCards;
                CardType    cardType = characterView.ComputerLeft.currType;
                //--------------------------添加牌到桌面----------------
                characterView.Desk.Clear();    //添加牌之前把桌面清空下。这里可以做一个剩余牌数(记牌器),把出的牌临时放到一个数组里面,把总牌数减去手牌减去临时数组,就是剩余牌数,这是一个扩展
                foreach (Card card in cardList)
                {
                    characterView.AddCard(CharacterType.Desk, card, false);
                }


                //-----------------可以出牌-------------------
                PlayCardArg ee = new PlayCardArg(cardList.Count, Toos.GetWeight(cardList, cardType), CharacterType.ComputerLeft, cardType);

                if (!characterView.ComputerLeft.HasCard)
                {
                    Identity     r   = characterView.ComputerRight.Identity;
                    Identity     l   = characterView.ComputerLeft.Identity;
                    Identity     p   = characterView.player.Identity;
                    GameOverArgs eee = new GameOverArgs()
                    {
                        ComputerLeftWin  = true,
                        ComputerRightWin = r == l ? true : false,
                        PlayWin          = p == l ? true : false,
                    };


                    dispatcher.Dispatch(CommandEvent.GameOver, eee);
                }
                else
                {
                    dispatcher.Dispatch(CommandEvent.PlayCard, ee);
                }
            }
            else
            {
                dispatcher.Dispatch(CommandEvent.PassCard);
            }

            break;

        default:
            break;
        }
    }