Example #1
0
        /// <summary>
        ///  洗牌,设置地主牌
        /// </summary>
        public void Shuffle()
        {
            this.landPks.Clear();
            this.randHeap.Clear();

            //随机出来的牌堆,不包含地主牌
            List <NetPoker> theap = new List <NetPoker>();

            theap.AddRange(this.heap);

            do
            {
                int      rand = new Random(this.GetRandomSeed()).Next(0, theap.Count);
                NetPoker pk   = theap[rand];
                theap.RemoveAt(rand);
                this.randHeap.Add(pk);
            } while (theap.Count > 3);
            this.landPks.AddRange(theap);
        }
Example #2
0
        //超时触发
        private void Clock_OverTime(Clock clock)
        {
            var ply = clock.TagPlayer;

            switch (this.gameStage)
            {
            case GameStage.叫分阶段:
                this.SomeoneJiaofen(ply, 0);
                break;

            case GameStage.出牌阶段:
                var pks = new NetPoker[] { clock.TagPlayer.handPk[0] };
                ply.handPk.RemoveAt(0);
                this.SomeoneOutPoker(ply, pks);
                break;

            case GameStage.接牌阶段:
                this.SomeoneOutPoker(ply, new NetPoker[0]);
                break;
            }
        }
Example #3
0
        //有玩家出牌处理函数
        private void SomeoneOutPoker(Player ply, NetPoker[] pks)
        {
            if (pks == null)
            {
                pks = new NetPoker[0];
            }
            //向其他玩家给出出牌信息
            string json = JsonConvert.SerializeObject(new { ply.PlayerID, OutPks = pks });

            this.SendBase(GameOrderType.出牌, json, ply.LastPlayer);
            this.SendBase(GameOrderType.出牌, json, ply.NextPlayer);
            //在服务器端删除扑克
            ply.RemoveHandPk(pks);
            if (ply.handPk.Count == 0)
            {
                this.gameStage = GameStage.结束阶段;
                this.SomeoneWin(ply);
                return;
            }
            //如果出牌了,则将其设置为上一个出牌的玩家
            if (pks.Length > 0)
            {
                this.lastSendPly = ply;
            }
            //如果上一个出牌的玩家是出牌玩家的下一家,则下一个玩家进入出牌阶段
            if (lastSendPly == ply.NextPlayer)
            {
                this.gameStage = GameStage.出牌阶段;
            }
            //否则下一个玩家还得继续接牌
            else
            {
                this.gameStage = GameStage.接牌阶段;
            }
            //重新计时,绑定下家
            this.clock.TagPlayer = ply.NextPlayer;
            this.clock.ReStart();
        }