Esempio n. 1
0
        public Battleground CreateBattle(List <OneMatch> matchList)
        {
            lock (BattlegroundPoolLock)
            {
                Battleground bg = new Model.Battleground(1, 1);
                BattlegroundPool.Add(bg);

                int sideOrder = 1;
                foreach (var m in matchList)
                {
                    OneSide oneSide = new OneSide()
                    {
                        AccountID = m.AccountID,
                        NickName  = m.NickName,
                        Face      = m.Face,
                        Step      = BattleCommand.JoinBattle,
                        Order     = sideOrder++
                    };
                    bg.Battle.Sides.Add(oneSide);
                }
                bg.NoticeJoinBattle();
                bg.Battle.BattleType = matchList.FirstOrDefault().MatchType;
                return(bg);
            }
        }
Esempio n. 2
0
        public void OutCard(OneSide oneSide, CardType cardType, int cardNum, int cardid)
        {
            LogHelper.DebugLog(oneSide.AccountID + " outcard:" + cardType.ToString() + cardNum);
            lock (BattleLock)
            {
                Card card = oneSide.Cards.FirstOrDefault(c => c.Type == cardType && c.Num == cardNum && c.ID == cardid);
                if (card == null)
                {
                    return;//操作无效,长时间会被超时处理
                }
                Battle.Step = BattleCommand.HandOutCardBack;
                if (oneSide.Step == BattleCommand.HandOutCardBack)
                {
                    return;
                }
                oneSide.Step = Battle.Step;

                oneSide.Cards.Remove(card);
                oneSide.OutCards.Add(card);
                oneSide.TakeOutCard = card;
                foreach (var s in Battle.Sides)
                {
                    if (s == oneSide)
                    {
                        continue;
                    }
                    s.TakeOutCard = null;
                }
                NoticeOutCard();
            }
        }
Esempio n. 3
0
        public Battleground CreateBattle(List <EAccount> userList, BattleType battleType)
        {
            lock (BattlegroundPoolLock)
            {
                Battleground bg = new Model.Battleground(1, 1);
                BattlegroundPool.Add(bg);

                int sideOrder = 1;
                foreach (var m in userList)
                {
                    OneSide oneSide = new OneSide()
                    {
                        AccountID = m.ID.ToString(),
                        NickName  = m.NickName,
                        Face      = m.Face,
                        Step      = BattleCommand.JoinBattle,
                        Order     = sideOrder++
                    };
                    bg.Battle.Sides.Add(oneSide);
                }
                bg.NoticeJoinBattle();
                bg.Battle.BattleType = battleType;
                return(bg);
            }
        }
Esempio n. 4
0
        void AllInStepDo(string accountid, BattleCommand command, Action <string> doAction, Action notDoAction = null)
        {
            OneSide oneSide = Battle.Sides.FirstOrDefault(c => c.AccountID == accountid);

            if (oneSide == null)
            {
                return;//操作无效,长时间会被超时处理
            }
            oneSide.Step = command;
            if (IsAllInStep(command))
            {
                Battle.Step = command;
                if (doAction != null)
                {
                    doAction(accountid);
                }
            }
            else
            {
                if (notDoAction != null)
                {
                    notDoAction();
                }
            }
        }
Esempio n. 5
0
    public void HandOutCard(Battle battle)
    {
        Debug.Log("HandOutCard");
        OneSide mySide = battle.Sides.FirstOrDefault(c => c.AccountID == Sender.UserID);

        BattleRoomCtr.Instance.DownNum.Begin(mySide.Order);
        if (IsRealClient)
        {
            if (Sender.UserID == battle.CurrentSide.AccountID)
            {
                BattleRoomCtr.Instance.IsCanOutCard = true;
            }
            BattleRoomCtr.Instance.SynchronousData(battle);
            if (Sender.UserID == battle.CurrentSide.AccountID)
            {
                BattleRoomCtr.Instance.CanOutCard(battle);
            }
        }
        else
        {
            //测试,随便出一张牌
            if (Sender.UserID == battle.CurrentSide.AccountID)
            {
                OneSide oneSide = battle.Sides.FirstOrDefault(c => c.AccountID == Sender.UserID);
                Card    card    = oneSide.Cards.FirstOrDefault(c => !c.IsFront);
                Sender.HandOutCardBack(true, card.Type, card.Num, card.ID);
                Debug.Log("test HandOutCardBack......" + Sender.UserID);
            }
        }
    }
Esempio n. 6
0
        /// <summary>
        /// 出牌结束
        /// </summary>
        /// <param name="accountid"></param>
        /// <param name="outCardOrWin"></param>
        /// <param name="cardType"></param>
        /// <param name="cardNum"></param>
        public void HandOutCardBack(string accountid, bool outCardOrWin, CardType cardType, int cardNum, int cardid)
        {
            lock (BattleLock)
            {
                if (Battle.Step != BattleCommand.HandOutCard)
                {
                    return;
                }

                OneSide oneSide = Battle.Sides.FirstOrDefault(c => c.AccountID == accountid);
                if (oneSide == null)
                {
                    return;//操作无效,长时间会被超时处理
                }
                if (outCardOrWin)
                {
                    OutCard(oneSide, cardType, cardNum, cardid);
                }
                else
                {
                    BattleCommand preStep = Battle.Step;
                    if (IsWin(oneSide, preStep == BattleCommand.TakeCardBack, null))
                    {
                        Battle.Step  = BattleCommand.HandOutCardBack;
                        oneSide.Step = Battle.Step;
                        FlipCard();
                    }
                    else
                    {
                        return;//操作无效,长时间会被超时处理
                    }
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        /// 询问碰牌结束
        /// </summary>
        /// <param name="accountid"></param>
        /// <param name="backType"></param>
        public void AskTouchCardBack(string accountid, AskTouchCardBackType backType)
        {
            lock (BattleLock)
            {
                if (Battle.Step != BattleCommand.AskTouchCard)
                {
                    return;
                }

                OneSide oneSide = Battle.Sides.FirstOrDefault(c => c.AccountID == accountid);
                if (oneSide == null)
                {
                    return;//操作无效,长时间会被超时处理
                }
                if (backType == AskTouchCardBackType.Pass)
                {
                    Battle.Step  = BattleCommand.AskTouchCardBack;
                    oneSide.Step = Battle.Step;
                    TakeCard();
                }
                else if (backType == AskTouchCardBackType.Touch)
                {
                    Battle.Step  = BattleCommand.AskTouchCardBack;
                    oneSide.Step = Battle.Step;
                    oneSide.Cards.Add(Battle.CurrentSide.TakeOutCard);
                    //翻牌
                    int num = 0;
                    foreach (var card in oneSide.Cards)
                    {
                        if (Battle.CurrentSide.TakeOutCard == card)
                        {
                            card.IsFront = true;
                            num++;
                            if (num >= 3)
                            {
                                break;
                            }
                        }
                    }
                    Battle.CurrentSide.OutCards.Remove(Battle.CurrentSide.TakeOutCard);
                    NoticeTouchCard();
                }
                else if (backType == AskTouchCardBackType.Win)
                {
                    if (IsWin(oneSide, false, Battle.CurrentSide.TakeOutCard))
                    {
                        Battle.Step  = BattleCommand.AskTouchCardBack;
                        oneSide.Step = Battle.Step;
                        FlipCard();
                    }
                    else
                    {
                        return;//操作无效,长时间会被超时处理
                    }
                }
            }
        }
Esempio n. 8
0
 private void LicensingToOneSide(OneSide oneSide, int num)
 {
     for (int i = 0; i < num; i++)
     {
         Card card = CardLibrary.FirstOrDefault();
         oneSide.Cards.Add(card);
         CardLibrary.Remove(card);
         oneSide.GetACard = card;
     }
 }
Esempio n. 9
0
        public void AutoOutCard()
        {
            OneSide oneSide = Battle.CurrentSide;

            bool isWin = IsWin(Battle.CurrentSide, true, null);

            if (isWin)
            {
                FlipCard();
            }
            else
            {
                Card card = ChessHelper.GetRecommendOutCard(oneSide.Cards);
                OutCard(oneSide, card.Type, card.Num, card.ID);
            }
        }
Esempio n. 10
0
        public void SendSoundMsg(string battleCode, string accountID, string soundData)
        {
            LogHelper.DebugLog("收到:" + accountID + "  发来的SendSoundMsg");
            Battleground bg           = BattlegroundManager.Instance.Find(battleCode);
            SocketServer socketServer = FightServer.Instance.GetServer();
            LemonMessage msg          = new LemonMessage();
            Battle       soundBattle  = new Battle();
            OneSide      currentSide  = bg.Battle.Sides.FirstOrDefault(c => c.AccountID == accountID);

            soundBattle.CurrentSide = currentSide;
            soundBattle.Sides       = bg.Battle.Sides;
            soundBattle.Step        = BattleCommand.SendSoundMsg;
            soundBattle.Msg         = soundData;
            msg.Body = new JsonSerialize().SerializeToString(soundBattle);

            ToCleintCommand.SendMsgToAllClient(BattleCommand.SendSoundMsg, soundBattle, msg);
        }
Esempio n. 11
0
        /// <summary>
        /// 询问碰牌
        /// </summary>
        public void AskTouchCard(string accountid)
        {
            LogHelper.DebugLog("begin AskTouchCard...");
            Battle.Step = BattleCommand.AskTouchCard;

            Card    outCard = Battle.CurrentSide.TakeOutCard;
            OneSide winSide = null;

            foreach (var s in Battle.Sides)
            {
                if (IsWin(s, false, outCard))
                {
                    winSide = s;
                    break;
                }
            }
            if (winSide != null)
            {
                //Battle.Step = BattleCommand.HandOutCardBack;
                //FlipCard();

                //这个地方也是发的碰牌询问
                LogHelper.DebugLog("AskTouchCard AskTouchCard...");
                Battle.TouchSide = winSide;
                SendToClient(BattleCommand.AskTouchCard, winSide.AccountID);
            }
            else
            {
                //除自己外,还有没有人手里有大于两个的,而且是没碰的
                OneSide outSide = Battle.Sides.FirstOrDefault(s => s.AccountID != Battle.CurrentSide.AccountID && s.Cards.Count(c => !c.IsFront && c == outCard) >= 2);
                if (outSide == null)
                {
                    LogHelper.DebugLog("AskTouchCard TakeCard...");
                    TakeCard();
                }
                else
                {
                    LogHelper.DebugLog("AskTouchCard AskTouchCard...");
                    Battle.TouchSide = outSide;
                    SendToClient(BattleCommand.AskTouchCard, outSide.AccountID);
                }
            }
        }
Esempio n. 12
0
 public void SendFaceMsg(Battle battle)
 {
     if (IsRealClient)
     {
         OneSide mySide      = battle.Sides.FirstOrDefault(c => c.AccountID == Sender.UserID);
         int     orderOffset = mySide.Order - 1;
         foreach (var p in BattleRoomCtr.Instance.BattleUI.PlayerUIList)
         {
             int newOrder = p.Order + orderOffset;
             if (newOrder > 4)
             {
                 newOrder = newOrder % 4;
             }
             if (newOrder == battle.CurrentSide.Order)
             {
                 p.ShowFace(battle.Msg);
             }
         }
     }
 }
Esempio n. 13
0
        /// <summary>
        /// 加入
        /// </summary>
        /// <param name="accountid"></param>
        /// <param name="face"></param>
        /// <param name="score"></param>
        public void Join(string accountid, string nickName, string face, int vip)
        {
            lock (BattleLock)
            {
                if (Battle.Step != BattleCommand.CreateBattleBack &&
                    Battle.Step != BattleCommand.JoinBattle &&
                    Battle.Step != BattleCommand.NoticeJoinBattle &&
                    Battle.Step != BattleCommand.NoticeReady)
                {
                    return;
                }
                Battle.Step = BattleCommand.JoinBattle;
                if (Battle.Sides.Any(c => c.AccountID == accountid))
                {
                    return;//操作无效
                }
                //查找空桌
                int nullDesktop = 1;
                for (int i = 1; i < 5; i++)
                {
                    if (!Battle.Sides.Any(c => c.Order == i))
                    {
                        nullDesktop = i;
                        break;
                    }
                }
                OneSide oneSide = new OneSide()
                {
                    AccountID = accountid,
                    NickName  = nickName,
                    Face      = face,
                    Step      = BattleCommand.JoinBattle,
                    Order     = nullDesktop,
                    Vip       = vip
                };
                Battle.Sides.Add(oneSide);

                NoticeJoinBattle();
            }
        }
Esempio n. 14
0
    public void Show(bool isOutCardOrTouchCard, Battle battle)
    {
        IsOutCardOrTouchCard = isOutCardOrTouchCard;
        OneSide mySide = battle.Sides.FirstOrDefault(c => c.AccountID == BattleRoomCtr.Instance.SendCommand.UserID);

        if (IsOutCardOrTouchCard)
        {
            BtnPeng.gameObject.SetActive(false);
            List <WinCardModel> winCardModels = WinALG.Win(mySide.Cards, true);
            if (winCardModels.Count > 0)
            {
                BtnHu.gameObject.SetActive(true);
                BtnHu.transform.localScale = Vector3.zero;
                BtnHu.transform.DOScale(1, 0.3f);
            }
            BtnGuo.gameObject.SetActive(false);
        }
        else
        {
            //当前是碰牌指令,检测释放可以胡牌(杠牌胡)
            List <Card> cardList = new List <Card>(mySide.Cards);
            cardList.Add(battle.CurrentSide.TakeOutCard);
            List <WinCardModel> winCardModels = WinALG.Win(cardList, false);
            if (winCardModels.Count > 0)
            {
                BtnHu.gameObject.SetActive(true);
                BtnHu.transform.localScale = Vector3.zero;
                BtnHu.transform.DOScale(1, 0.3f);
            }
            else
            {
                BtnPeng.gameObject.SetActive(true);
                BtnPeng.transform.localScale = Vector3.zero;
                BtnPeng.transform.DOScale(1, 0.3f);
            }
            BtnGuo.gameObject.SetActive(true);
            BtnGuo.transform.localScale = Vector3.zero;
            BtnGuo.transform.DOScale(1, 0.3f);
        }
    }
Esempio n. 15
0
        protected override OneNRelationList <INSide> CreateCollection(List <INSide> items)
        {
            _parent = new OneSide(items.ToList());
            for (int i = 0; i < items.Count; i++)
            {
                var item = (NSide)items[i];
                item.OneSide     = _parent;
                item.OneSide_pos = i * 10;
            }

            _hasCollectionChanged      = false;
            Wrapper.CollectionChanged += (sender, args) => { _hasCollectionChanged = true; };

            _hasParentChanged        = false;
            _parent.PropertyChanged += (sender, args) => { if (args.PropertyName == "NSide")
                                                           {
                                                               _hasParentChanged = true;
                                                           }
            };

            return(Wrapper);
        }
Esempio n. 16
0
 public Battleground CreateBattle(string accountID, string nickName, string face, int vip, int gameNum, BattleType battleType)
 {
     lock (BattlegroundPoolLock)
     {
         Battleground bg = new Model.Battleground(gameNum, 1);
         BattlegroundPool.Add(bg);
         OneSide oneSide = new OneSide()
         {
             AccountID = accountID,
             NickName  = nickName,
             Face      = face,
             Step      = BattleCommand.JoinBattle,
             Vip       = vip,
             Order     = 1
         };
         bg.Battle.Sides.Add(oneSide);
         bg.Battle.CratorID   = accountID;
         bg.Battle.BattleType = battleType;
         bg.NoticeJoinBattle();
         return(bg);
     }
 }
Esempio n. 17
0
 public void HandOutCard(Battle battle)
 {
     SynchronousData(battle);
     if (BattleAIClient.SendServerCommand.UserID != battle.CurrentSide.AccountID)
     {
         return;
     }
     LogHelper.DebugLog("随机时间回调:" + BattleAIClient.SendServerCommand.UserID);
     Task.Factory.StartNew(() =>
     {
         Sleep();
         OneSide oneSide = battle.Sides.FirstOrDefault(c => c.AccountID == BattleAIClient.SendServerCommand.UserID);
         List <WinCardModel> winCardModels = WinALG.Win(oneSide.Cards, true);
         if (winCardModels.Count > 0)
         {
             BattleAIClient.SendServerCommand.HandOutCardBack(false, CardType.Tiao, 0, 0);
         }
         else
         {
             Card card = ChessHelper.GetRecommendOutCard(oneSide.Cards);
             BattleAIClient.SendServerCommand.HandOutCardBack(true, card.Type, card.Num, card.ID);
         }
     });
 }
Esempio n. 18
0
        public static void Main(string[] args)
        {
            //Casado myBasicCasado = new BasicCasado();
            //Casado myBasicCasado2 = new BasicCasado();
            //Casado myCompleteCasado = new CompleteCasado();
            //Casado myCompleteCasado2 = new CompleteCasado();

            //myBasicCasado2 = new Starter(myBasicCasado2);
            //myBasicCasado2 = new ThreeSides(myBasicCasado2);
            //myBasicCasado2 = new Dessert(myBasicCasado2);

            //myCompleteCasado2 = new Starter(myBasicCasado2);
            //myCompleteCasado2 = new TwoSides(myBasicCasado2);
            //myCompleteCasado2 = new Dessert(myBasicCasado2);

            //Console.WriteLine(myBasicCasado.GetDescription());
            //Console.Write("Total: ");
            //Console.WriteLine($"{myBasicCasado.GetCost():C2}");
            //Console.WriteLine();

            //Console.WriteLine(myBasicCasado2.GetDescription());
            //Console.Write("Total: ");
            //Console.WriteLine($"{myBasicCasado2.GetCost():C2}");
            //Console.WriteLine();

            //Console.WriteLine(myCompleteCasado.GetDescription());
            //Console.Write("Total: ");
            //Console.WriteLine($"{myCompleteCasado.GetCost():C2}");
            //Console.WriteLine();

            //Console.WriteLine(myCompleteCasado2.GetDescription());
            //Console.Write("Total: ");
            //Console.WriteLine($"{myCompleteCasado2.GetCost():C2}");
            //Console.WriteLine();

            Console.WriteLine("*** LA DOÑA RESTAURANT ***");
            Console.WriteLine("\n>> Place your casado order: ");
            Console.WriteLine();

            LinkedList <Casado> order = new LinkedList <Casado>();

            Casado myCasado = null;

            int  size       = 0;
            bool isNumber   = true;
            bool validInput = true;

            Console.Write("First thing first > ");

            bool addAnotherCasadoToOrder = false;

            do
            {
                addAnotherCasadoToOrder = false;
                do
                {
                    Console.WriteLine("What casado size do you want?\n\nChoose:\n\n\t1 >> for regular or\n\t2 >> for big size");
                    isNumber = Int32.TryParse(Console.ReadLine(), out size);

                    if (size == 1)
                    {
                        myCasado   = new BasicCasado();
                        validInput = true;
                    }
                    else if (size == 2)
                    {
                        myCasado   = new CompleteCasado();
                        validInput = true;
                    }
                    else
                    {
                        validInput = false;
                        Console.WriteLine("\nWrong input, please try again\n");
                    }
                    //Console.WriteLine("isNumber: " + isNumber + "\nvalidInput: " + validInput);
                } while (!isNumber || !validInput);

                if (myCasado != null)
                {
                    int  sidesOption  = 0;
                    bool correctValue = false;
                    bool addMoreItems = false;

                    do
                    {
                        do
                        {
                            addMoreItems = false;
                            Console.WriteLine("\nExtras:\n\t* 1 side\n\t* 2 sides\n\t* 3 sides\n\t* 4 Starter\n\t* 5 Dessert\n\t* 6 NO EXTRAS\n");
                            correctValue = Int32.TryParse(Console.ReadLine(), out sidesOption);

                            switch (sidesOption)
                            {
                            case 1:
                                myCasado = new OneSide(myCasado);
                                break;

                            case 2:
                                myCasado = new TwoSides(myCasado);
                                break;

                            case 3:
                                myCasado = new ThreeSides(myCasado);
                                break;

                            case 4:
                                myCasado = new Starter(myCasado);
                                break;

                            case 5:
                                myCasado = new Dessert(myCasado);
                                break;

                            case 6:
                                break;

                            default:
                                Console.WriteLine("\nIncorrect input. Please try again\n");
                                correctValue = false;
                                break;
                            }
                        } while (!correctValue);

                        Console.WriteLine("\nWould you like to add anything else?\n\tY > yes\n\tN > no");
                        int key2 = Console.Read();
                        //Console.WriteLine("Key: " + key);
                        if (key2 == 89 || key2 == 121) // yes
                        {
                            addMoreItems = true;
                            Console.Clear();
                            Console.WriteLine("*** LA DOÑA RESTAURANT ***");
                            Console.WriteLine();
                        }
                        else if (key2 == 78 || key2 == 110) //no
                        {
                            Console.Clear();
                        }
                        else
                        {
                            Console.WriteLine("\nIncorrect input. Please try again.\n");
                        }
                    } while (addMoreItems);
                }

                order.AddLast(myCasado);

                Console.WriteLine("\nWould you like to add another casado to your order?\n\tY > yes\n\tN > no");
                int key = Console.Read();
                //Console.WriteLine("Key: " + key);
                if (key == 89 || key == 121) // yes
                {
                    addAnotherCasadoToOrder = true;
                    Console.Clear();
                    Console.WriteLine("*** LA DOÑA RESTAURANT ***");
                    Console.WriteLine();
                }
                else if (key == 78 || key == 110) //no
                {
                    Console.Clear();
                }
                else
                {
                    Console.WriteLine("\nIncorrect input. Please try again.\n");
                }
            } while (addAnotherCasadoToOrder);



            Console.WriteLine("*** LA DOÑA RESTAURANT ***");
            Console.WriteLine();
            Console.WriteLine("Please review your order: \n");

            foreach (var casado in order)
            {
                Console.WriteLine(casado.GetDescription());
                Console.Write("Total: ");
                Console.WriteLine($"{casado.GetCost():C2}");
                Console.WriteLine();
            }


            Console.ReadKey();
        }
Esempio n. 19
0
    /// <summary>
    /// 同步数据,玩家在网络不好,或是断线重连时会直接显示当前数据
    /// </summary>
    /// <param name="battle"></param>
    public void SynchronousData(Battle battle)
    {
        SendCommand.BattleCode = battle.Code;
        //if (battle.CratorID == SendCommand.UserID)
        //{
        //    BattleUI.BtnJSRoom.gameObject.SetActive(true);
        //}
        //else
        //{
        //    BattleUI.BtnJSRoom.gameObject.SetActive(false);
        //}
        if (battle.Step != BattleCommand.CreateBattleBack &&
            (int)battle.Step > (int)BattleCommand.RollDice)
        {
            IsBattleing = true;
        }
        BattleUI.MatchLoading.gameObject.SetActive(false);
        BattleUI.EnableOperation();

        //同步玩家信息
        OneSide mySide = battle.Sides.FirstOrDefault(c => c.AccountID == SendCommand.UserID);

        if (mySide == null)
        {
            return;
        }
        if (GlobalVariable.IsBattleRecordPlay && battle.CurrentSide != null)
        {
            mySide = battle.CurrentSide;
        }
        SetCurrentPlayer(mySide.Order);
        int orderOffset = mySide.Order - 1;

        BattleUI.BattleCode.text   = battle.Code;
        BattleUI.LeaveCardNum.text = battle.LibraryCardNum.ToString();

        if (ZhuoXinRenderer != null && battle.CurrentSide != null)
        {
            if (battle.CurrentSide.Order == 1)
            {
                ZhuoXinRenderer.sharedMaterial.SetTexture("_MainTex", MJZhuoTextureN);
            }
            else if (battle.CurrentSide.Order == 2)
            {
                ZhuoXinRenderer.sharedMaterial.SetTexture("_MainTex", MJZhuoTextureX);
            }
            else if (battle.CurrentSide.Order == 3)
            {
                ZhuoXinRenderer.sharedMaterial.SetTexture("_MainTex", MJZhuoTextureB);
            }
            else if (battle.CurrentSide.Order == 4)
            {
                ZhuoXinRenderer.sharedMaterial.SetTexture("_MainTex", MJZhuoTextureD);
            }
        }

        foreach (var p in BattleUI.PlayerUIList)
        {
            int newOrder = p.Order + orderOffset;
            if (newOrder > 4)
            {
                newOrder = newOrder % 4;
            }
            OneSide side = battle.Sides.FirstOrDefault(c => c.Order == newOrder);
            if (side != null)
            {
                p.Show(side.NickName, side.Face, side.TotalScore, side.Vip, System.Convert.ToInt32(side.AccountID), battle);
            }
            else
            {
                p.gameObject.SetActive(false);
            }
            if (IsBattleing)
            {
                p.GoOut.gameObject.SetActive(false);
            }
        }
        //同步卡牌信息
        foreach (var p in PlayerList)
        {
            if (battle.Sides == null)
            {
                continue;
            }
            OneSide oneSide = battle.Sides.FirstOrDefault(c => c.Order == p.Order);
            if (oneSide == null)
            {
                continue;
            }
            p.UserID = oneSide.AccountID;
            //同步手牌区
            foreach (var c in oneSide.Cards)
            {
                CardCtr cardCtr = p.HandCards.GetCard(c.ID);
                if (cardCtr == null)
                {
                    CardCtr newCard = CardLibrary.GetOrCreateCard(c.ID, c.Type, c.Num);
                    newCard.IsFront   = c.IsFront;
                    newCard.PlayerCtr = p;
                    p.AddCardToHandCards(newCard, newCard.IsNew);
                }
                else
                {
                    cardCtr.IsFront = c.IsFront;
                }
            }
            List <CardCtr> handCards = new List <CardCtr>(p.HandCards.ListCards());
            foreach (var cc in handCards)
            {
                if (!oneSide.Cards.Any(c => c.ID == cc.ID))
                {
                    p.HandCards.RemoveCard(cc);
                }
            }
            //同步出牌区
            foreach (var c in oneSide.OutCards)
            {
                CardCtr cardCtr = p.OutCards1.GetCard(c.ID);
                if (cardCtr == null)
                {
                    cardCtr = p.OutCards2.GetCard(c.ID);
                }
                if (cardCtr == null)
                {
                    cardCtr = p.OutCards3.GetCard(c.ID);
                }
                if (cardCtr == null)
                {
                    CardCtr newCard = CardLibrary.GetOrCreateCard(c.ID, c.Type, c.Num);
                    p.AddCardToOutCards(newCard);
                }
                else
                {
                    cardCtr.IsFront = c.IsFront;
                }
            }
            List <CardCtr> outCards = new List <CardCtr>(p.OutCards1.ListCards());
            outCards.AddRange(p.OutCards2.ListCards());
            outCards.AddRange(p.OutCards3.ListCards());
            foreach (var cc in outCards)
            {
                if (!oneSide.OutCards.Any(c => c.ID == cc.ID))
                {
                    p.OutCards1.RemoveCard(cc);
                    p.OutCards2.RemoveCard(cc);
                }
            }
        }
        //获取听牌列表
        List <Card> listenCards = ChessHelper.CanListenCardList(mySide.Cards);
        PlayerCtr   myPlayerCtr = PlayerList.FirstOrDefault(c => c.UserID == mySide.AccountID);

        foreach (var c in myPlayerCtr.HandCards.CardList)
        {
            if (IsCanOutCard && listenCards.Any(b => b.ID == c.ID))
            {
                ShowTing(c);
            }
            else
            {
                HideTing(c);
            }
        }
        //重新计算位置
        if ((battle.Step != BattleCommand.TakeCard && battle.Step != BattleCommand.HandOutCard) || GlobalVariable.IsBattleRecordPlay)
        {
            foreach (var p in PlayerList)
            {
                p.HandCards.AutoSettleCards();
            }
        }
        //排除可能要播动画的,其它的直接设置位置
        if (battle.Step == BattleCommand.Licensing)
        {
        }
        else if (battle.Step == BattleCommand.TakeCard)
        {
            foreach (var c in CardLibrary.ListAllShowCards())
            {
                if (c.ID == battle.CurrentSide.GetACard.ID)
                {
                    continue;
                }
                c.transform.localPosition = c.TargetLocalPosition;
            }
        }
        else if (battle.Step == BattleCommand.HandOutCard)
        {
            foreach (var c in CardLibrary.ListAllShowCards())
            {
                if (battle.CurrentSide.GetACard != null && c.ID == battle.CurrentSide.GetACard.ID)
                {
                    continue;
                }
                c.transform.localPosition = c.TargetLocalPosition;
            }
        }
        else if (battle.Step == BattleCommand.NoticeOutCard)
        {
            foreach (var c in CardLibrary.ListAllShowCards())
            {
                if (c.ID == battle.CurrentSide.TakeOutCard.ID)
                {
                    continue;
                }
                c.transform.localPosition = c.TargetLocalPosition;
            }
        }
        else if (battle.Step == BattleCommand.NoticeTouchCard)
        {
            foreach (var c in CardLibrary.ListAllShowCards())
            {
                if (battle.CurrentSide.TakeOutCard == null)
                {
                    continue;
                }
                if (c.IsFront && c.CardType == battle.CurrentSide.TakeOutCard.Type && c.Num == battle.CurrentSide.TakeOutCard.Num)
                {
                    continue;
                }
                c.transform.localPosition = c.TargetLocalPosition;
            }
        }
        else
        {
            foreach (var c in CardLibrary.ListAllShowCards())
            {
                c.transform.localPosition = c.TargetLocalPosition;
            }
        }
    }
Esempio n. 20
0
        private bool IsWin(OneSide oneSide, bool isZiMo, Card touchCard)
        {
            List <Card> cards = new List <Card>(oneSide.Cards);

            if (touchCard != null)
            {
                cards.Add(touchCard);
            }
            List <WinCardModel> winCardModelList    = WinALG.Win(cards, isZiMo);
            WinCardModel        maxTrunWinCardModel = null;
            int maxTrun = 0;

            foreach (var m in winCardModelList)
            {
                if (touchCard != null)
                {
                    if (m.IsDaDui() == 0)
                    {
                        continue;
                    }
                }
                if (maxTrunWinCardModel == null)
                {
                    maxTrunWinCardModel = m;
                    maxTrun             = m.GetTurnNum();
                }
                else
                {
                    int mTrun = m.GetTurnNum();
                    if (mTrun > maxTrun)
                    {
                        maxTrunWinCardModel = m;
                        maxTrun             = mTrun;
                    }
                }
            }
            if (maxTrunWinCardModel == null)
            {
                return(false);
            }
            Battle.WinCardModel = maxTrunWinCardModel.CardSectionList;
            Battle.WinTrun      = maxTrun;
            if (oneSide.OutCards.Count == 0)//起手抓14张牌就胡牌
            {
                Battle.WinTrun = 4;
            }
            //分数计算
            int score = (int)Math.Pow(2, Battle.WinTrun);
            //包炮
            bool oneBaoThree = false;

            if (!isZiMo && oneSide != Battle.CurrentSide)
            {
                if (CardLibrary.Count <= 8)
                {
                    oneBaoThree = true;
                }
            }

            oneSide.GetScore = score * 3;
            if (oneBaoThree)
            {
                foreach (var s in Battle.Sides)
                {
                    if (s == Battle.CurrentSide)
                    {
                        s.GetScore = -score * 3;
                    }
                }
            }
            else
            {
                foreach (var s in Battle.Sides)
                {
                    if (s != oneSide)
                    {
                        s.GetScore = -score;
                    }
                }
            }

            return(true);
        }
Esempio n. 21
0
    public void SendTextMsg(Battle battle)
    {
        if (IsRealClient)
        {
            string[] msgData    = battle.Msg.Split('|');
            string   msgName    = msgData[0];
            string   soundSex   = msgData[1];
            string   msgContent = msgData[2];

            OneSide mySide      = battle.Sides.FirstOrDefault(c => c.AccountID == Sender.UserID);
            int     orderOffset = mySide.Order - 1;
            foreach (var p in BattleRoomCtr.Instance.BattleUI.PlayerUIList)
            {
                int newOrder = p.Order + orderOffset;
                if (newOrder > 4)
                {
                    newOrder = newOrder % 4;
                }
                if (newOrder == battle.CurrentSide.Order)
                {
                    p.ShowText(msgContent);
                }
            }


            if (soundSex == "Man")
            {
                if (msgName == "ChatMoreUsed01")
                {
                    SoundManager.Instance.PlaySound("语音/男1");
                }
                else if (msgName == "ChatMoreUsed03")
                {
                    SoundManager.Instance.PlaySound("语音/男2");
                }
                else if (msgName == "ChatMoreUsed05")
                {
                    SoundManager.Instance.PlaySound("语音/男3");
                }
                else if (msgName == "ChatMoreUsed07")
                {
                    SoundManager.Instance.PlaySound("语音/男4");
                }
                else if (msgName == "ChatMoreUsed09")
                {
                    SoundManager.Instance.PlaySound("语音/男5");
                }
            }
            else
            {
                if (msgName == "ChatMoreUsed01")
                {
                    SoundManager.Instance.PlaySound("语音/女1");
                }
                else if (msgName == "ChatMoreUsed03")
                {
                    SoundManager.Instance.PlaySound("语音/女2");
                }
                else if (msgName == "ChatMoreUsed05")
                {
                    SoundManager.Instance.PlaySound("语音/女3");
                }
                else if (msgName == "ChatMoreUsed07")
                {
                    SoundManager.Instance.PlaySound("语音/女4");
                }
                else if (msgName == "ChatMoreUsed09")
                {
                    SoundManager.Instance.PlaySound("语音/女5");
                }
                else if (msgName == "ChatMoreUsed11")
                {
                    SoundManager.Instance.PlaySound("语音/女6");
                }
            }
        }
    }
Esempio n. 22
0
    public void Show(Battle battle)
    {
        ClearChildren();
        if (battle.CurGameNum >= battle.GameNum)
        {
            BtnContinue.gameObject.SetActive(false);
            BtnExit2.gameObject.SetActive(true);
        }
        else
        {
            BtnContinue.gameObject.SetActive(true);
            BtnExit2.gameObject.SetActive(false);
        }
        if (battle.GameNum > 1)
        {
            BtnOnceAgain.gameObject.SetActive(false);
        }
        else
        {
            BtnOnceAgain.gameObject.SetActive(true);
        }

        if (BattleRoomCtr.Instance.SendCommand.IsPlayMode)
        {
            BtnContinue.gameObject.SetActive(false);
            BtnOnceAgain.gameObject.SetActive(false);
            BtnExit2.gameObject.SetActive(true);
        }

        this.gameObject.SetActive(true);
        this.gameObject.transform.localScale = Vector3.zero;
        this.gameObject.transform.DOScale(1, 0.3f);

        foreach (var s in battle.Sides)
        {
            GameObject side = GameObject.Instantiate(PlayerTemplated.gameObject);
            side.transform.parent = PlayerTemplated.transform.parent;
            Vector3 p3d = side.GetComponent <RectTransform>().anchoredPosition3D;
            side.GetComponent <RectTransform>().anchoredPosition3D = new Vector3(p3d.x, p3d.y, 0);
            side.GetComponent <RectTransform>().localEulerAngles   = new Vector3(0, 0, 0);
            side.GetComponent <RectTransform>().localScale         = new Vector3(1, 1, 1);
            side.SetActive(true);

            side.GetComponent <BattleResultPlayerCtr>().InitData(s.NickName, s.AccountID, s.Face, s.TotalScore.ToString(), s.GetMoney.ToString(), battle.BattleType);
        }

        OneSide oneSide = battle.Sides.FirstOrDefault(c => c.AccountID == BattleRoomCtr.Instance.SendCommand.UserID);

        if (oneSide.GetScore == 0)
        {
            SoundManager.Instance.PlaySound("音效/黄庄");
        }
        else if (oneSide.GetScore > 0)
        {
            SoundManager.Instance.PlaySound("音效/赢音效");
        }
        else
        {
            SoundManager.Instance.PlaySound("音效/输音效");
        }
    }