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);
    }
示例#2
0
    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;
        }
    }
示例#5
0
    //显示
    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);
    }
示例#6
0
    //用于开战的协议,代表是否可以开战
    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");
    }