public void NextGame() { //判断是否需要切换庄家 var hplayer = dictNNPlayers[hostid]; for (int i = 0; i < GamePlayerNumber; i++) { if (dictNNPlayers.ContainsKey(i)) { var p = dictNNPlayers[i]; if ((int)p.NNType >= (int)NiuNiuType.牛牛) { if (NiuNiuHelper.CalcPower(p, hplayer) > 0) { hplayer = p; } } } } SetHost(hplayer.SeatID); //数据初始化 for (int i = 0; i < GamePlayerNumber; i++) { if (dictNNPlayers.ContainsKey(i)) { dictNNPlayers[i].NNCards = new int[5]; dictNNPlayers[i].NNType = 0; dictNNPlayers[i].GState = 0; } } }
/// <summary> /// 游戏开牌 /// </summary> public void GameLayCards() { var hostPlayer = dictNNPlayers[hostid]; int xhostgold = 0; AllPlayersCards allcards = new AllPlayersCards(); foreach (var v in dictNNPlayers.Values) { if (v.SeatID != hostid) { OnePlayerCards onecards = new OnePlayerCards(); onecards.seatid = v.SeatID; onecards.nntype = (int)v.NNType; for (int i = 0; i < v.NNCards.Length; i++) { onecards.cards.Add(v.NNCards[i]); } //计算得分 数据库得更新 onecards.xgold = NiuNiuHelper.CalcPower(v, hostPlayer) * Score; v.UserInfo.gold += onecards.xgold; LobbyServer.Ins.SaveUserInfo(v.UserInfo); xhostgold += (-onecards.xgold); //庄家得分等于所有玩家相加的相反数 LogUtil.LogInfo("玩家 : " + onecards.seatid + " 牛牛 : " + onecards.nntype + " 输赢 : " + onecards.xgold); allcards.oneplayercards.Add(onecards); } } //把庄家也加进去 OnePlayerCards hostcards = new OnePlayerCards(); hostcards.seatid = hostid; hostcards.xgold = xhostgold; hostcards.nntype = (int)hostPlayer.NNType; for (int i = 0; i < hostPlayer.NNCards.Length; i++) { hostcards.cards.Add(hostPlayer.NNCards[i]); } allcards.oneplayercards.Add(hostcards); byte[] data = NetUtil.ProtobufSerialize(allcards); foreach (var v in dictNNPlayers.Values) { v.conn.SendAsync((ushort)MainID.NiuNiu, (ushort)NiuNiuID.GameLay, data); } }
public void GameStart() { Thread.Sleep(200); isPlaying = true; int[] mixcards = ShuffleCards(); for (int i = 0; i < GamePlayerNumber; i++) { if (dictNNPlayers.ContainsKey(i)) { var player = dictNNPlayers[i]; OnePlayerCards onecards = new OnePlayerCards(); onecards.seatid = i; onecards.nntype = 0; onecards.xgold = 0; string logstr = "****** 玩家 " + i + " 的牌为 :"; for (int j = 0; j < player.NNCards.Length; j++) { var card = mixcards[player.NNCards.Length * i + j]; player.NNCards[j] = card; onecards.cards.Add(card); logstr += mixcards[player.NNCards.Length * i + j] + " "; } player.NNType = NiuNiuHelper.CalcNNType(player.NNCards); player.MaxCard = NiuNiuHelper.GetMaxCard(player.NNCards); logstr += string.Format(" 牛牛点数为:{0} 最大的牌为:{1}", player.NNType, player.MaxCard); byte[] data = NetUtil.ProtobufSerialize(onecards); player.conn.SendAsync((ushort)MainID.NiuNiu, (ushort)NiuNiuID.GameDeal, data); LogUtil.LogInfo(logstr); } } //倒计时 int nDelayTime = 3; Thread.Sleep(200); TimeCount(nDelayTime); Thread.Sleep((nDelayTime + 1) * 1000); GameLayCards(); Thread.Sleep((dictNNPlayers.Count + 1) * 1000); //判断是否换庄家,游戏初始化 }