public MsgInitData GetMsgInitData() { MsgInitData msg = new MsgInitData(); Random rd = new Random(); int zhuangIdx = rd.Next() % 4;//随机确定庄家 turn = zhuangIdx; msg.data = new StartGameData[4]; for (int i = 0; i < msg.data.Length; i++) { msg.data[i] = new StartGameData(); msg.data[i].skillIndex = players[i].data.major; msg.data[i].skillCount = maxSkillTime[i]; msg.data[i].gender = players[i].data.gender; msg.data[i].username = players[i].id; }//初始化协议的牌数组 for (int i = 0; i < 4; i++) { int num = 13; if (i == zhuangIdx) { num = 14; } int[] res = paiManager.FaPai(num, i); msg.data[i].paiIndex = res; } return(msg); }
public void OnMsgInitData(MsgBase msgBase) { MsgInitData msg = (MsgInitData)msgBase; Close(); PanelManager.Open <GamePanel>(msg); }
//结束只有两种可能,一个是ChuPai协议中出现了胡,一个是FaPai协议中没牌的情况 /// <summary> /// 接收到初始数据的消息 /// </summary> /// <param name="msg"></param> public void OnMsgInitData(MsgInitData msg) { players = new BasePlayer[4]; client_id = msg.id; gamePanel.InitNumToDir(msg.id); InitPlayer(msg); gamePanel.Skill = (Major)msg.data[msg.id].skillIndex; skillCount = msg.data[msg.id].skillCount; gamePanel.RestSkillCount = skillCount; //gamePanel中先给Skill进行赋值,才能给RestSkillCount进行赋值 gamePanel.PlayerIdText = client_id + 1; //生成牌 for (int i = 0; i < 4; i++) { if (msg.data[i].paiIndex.Length == 14) { gamePanel.ZhuangImage = i; if (i == client_id) { isZhuang = true; } } for (int j = 0; j < msg.data[i].paiIndex.Length; j++) { CreatePai(msg.data[i].paiIndex[j], i); } players[i].PlacePai(); gamePanel.HandPaiCount = new int[] { (int)gamePanel.numToDir[i], msg.data[i].paiIndex.Length }; } }
//添加CtrlPlayer和SyncPlayer private void InitPlayer(MsgInitData msg) { int id = msg.id; for (int i = 0; i < 4; i++) { UnityEngine.Object[] obj = null; if (i == id) { obj = playerFactory.CreatePlayer(PlayerName.CtrlPlayer); Debug.Log("该客户端的id: " + id); } else { obj = playerFactory.CreatePlayer(PlayerName.SyncPlayer); } GameObject go = (GameObject)obj[0]; go.name = "Player " + (i); BasePlayer bp = (BasePlayer)obj[1]; bp.Init(gamePanel); players[i] = bp; players[i].id = i; players[i].username = msg.data[i].username; players[i].gender = (Gender)msg.data[i].gender; players[i].skill = (Major)msg.data[i].skillIndex; } }
//显示 public override void OnShow(params object[] args) { //寻找组件 GetUIComponent(); //生成gameManager类 gameManager = GameManager.GetInstance(); gameManager.GamePanel = this; gameManager.PlayerFactory = new PlayerFactory(); //GameManager处理发过来的数据,这个一定要放在生成gameManager类后面 MsgInitData msgInitData = (MsgInitData)args[0]; gameManager.OnMsgInitData(msgInitData); //对按钮添加点击事件 AddButtonClick(); //网络协议监听 NetManager.AddMsgListener("MsgFaPai", gameManager.OnMsgFaPai); NetManager.AddMsgListener("MsgChat", gameManager.OnMsgChat); NetManager.AddMsgListener("MsgChuPai", gameManager.OnMsgChuPai); NetManager.AddMsgListener("MsgChiPengGang", gameManager.OnMsgChiPengGang); NetManager.AddMsgListener("MsgChemistry", gameManager.OnMsgChemistry); NetManager.AddMsgListener("MsgMath", gameManager.OnMsgMath); NetManager.AddMsgListener("MsgQuit", gameManager.OnMsgQuit); NetManager.AddMsgListener("MsgComputerScience", gameManager.OnMsgComputerScience); //发送查询,发动查询要在处理InitData之后 if (gameManager.isZhuang) { MsgFaPai msgFaPai = new MsgFaPai(); NetManager.Send(msgFaPai); }//第一次出牌,只有庄家发送发牌协议 //隐藏各种UI,对他们进行初始化 InitUI(); //生成背景图片 GameObject bg = ResManager.LoadSprite("bg_game", 0); bg.name = "background"; bg.transform.localScale = new Vector3(2, 2, 2); Audio.PlayLoop(Audio.bgGamePanel); }
//用于开战的协议,代表是否可以开战 public static void MsgStartBattle(ClientState c, MsgBase msgBase) { MsgStartBattle msg = (MsgStartBattle)msgBase; //检查是否是四个人,用于开战 Player player = c.player; if (player == null) { return; } Room room = RoomManager.GetRoom(player.roomId); if (room == null) { msg.result = 1; player.Send(msg); return; } int playerNum = room.playerIds.Count; if (playerNum != 4) { msg.result = 1; player.Send(msg); return; }//只需要点击开战的收到开战协议就行了,其余的只需要收到了初始化游戏数据的协议即可 room.status = Room.Status.FIGHT; room.gameManager = new GameManager(room);//对gameManager进行初始化 MsgInitData msgInit = room.gameManager.GetMsgInitData(); for (int i = 0; i < 4; i++) { msgInit.id = i; room.gameManager.players[i].Send(msgInit); } Console.WriteLine("Send MsgInitData success"); }