使用SuperSocket开发联网斗地主(二):发牌
实现思路:
将整幅牌数据和发牌数据都在服务端完成,客户端只存储自己的牌和底牌
一、服务端:
抽出一个牌类:
public class DouDiZhuGameCard { public string CardColor { get; set; } public string CardName { get; set; } public int CardValue { get; set; } }
分别表示花色,名称和值,值用来比较大小,然后把54张牌初始化进去。继续打乱这54张牌的顺序:
Random random = new Random(); var cards = DouDiZhuGameConfig.DoDiZhuCards; for (int i = 0; i < cards.Count; i++) { DouDiZhuGameCard temp; int j = random.Next(0, cards.Count - 1); temp = cards[j]; cards[j] = cards[i]; cards[i] = temp; }
然后分发给3个玩家:
int playerIndex = 1; foreach (var item in DouDiZhuGameConfig.UserList) { item.Value.MyCards = cards.Skip((playerIndex-1)*17).Take(17).ToList(); item.Value.MyCards.Sort((x, y) => x.CardValue.CompareTo(y.CardValue)); item.Value.CommonCards= cards.Skip(51).Take(3).ToList(); for (int i = 0; i < DouDiZhuGameConfig.MaxCard; i++) { item.Value.OtherPlayerCards.Add(new DouDiZhuGameCard { CardColor="",CardName="",CardValue=0}); } response.Add(item.Key,item.Value); playerIndex++; }
分给自己的是有数据的,用来在客户端显示,分给另外两家的是空数据(当然可以在客户端实现),另外把底牌也初始化,每个客户端都能看到。
然后根据scoketsession分发下去:
var result = GameManager.SendCardToPlayer(); foreach (var playerInfo in result) { var play_session = webSocketServer.GetSessionByID(playerInfo.Key); ResponseModel<DouDiZhuUserInfoModel> res_sendCard = new ResponseModel<DouDiZhuUserInfoModel>(); res_sendCard.Action = "sendcard"; res_sendCard.Data = playerInfo.Value; if(session.SessionID==playerInfo.Key)//是我 { res_sendCard.Data.MyCards = playerInfo.Value.MyCards; res_sendCard.Data.OtherPlayerCards = playerInfo.Value.OtherPlayerCards; } this.SendMessage(play_session, JsonConvert.SerializeObject(res_sendCard)); }
二、客户端:
在收到服务端通知的“startgame”之后显示每个玩家的牌:
player1=userData.OtherPlayerCards; player2=userData.OtherPlayerCards; player_me=userData.MyCards; diPai=userData.CommonCards;
然后按照位置显示出来即可。
最终效果如图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?