Exemplo n.º 1
0
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        if (recData.player.Name.Equals(gameData.Player2.Name))
        {
            if (gameData.ClaimCount > 1)
            {
                dispatcher.Dispatch(ViewConst.ShowPlayer2Msg, StringConst.Claim);
            }
        }
        if (recData.player.Name.Equals(gameData.Player3.Name))
        {
            if (gameData.ClaimCount > 1)
            {
                dispatcher.Dispatch(ViewConst.ShowPlayer3Msg, StringConst.Claim);
            }
        }
        //if (recData.player.Name.Equals(gameData.PlayerSelf.Name))
        //{
        //    dispatcher.Dispatch(ViewConst.ChangeOptionMenuMode, OptionMenu_Status.HideAll);
        //}
        gameData.Mutiple      *= 2;                                            //倍数翻一倍
        gameData.Landlord      = recData.player.Name;                          //地主换位
        gameData.CurrentStatus = GameStatus.Claim;
        gameData.ClaimCount--;                                                 //争夺次数减一
        dispatcher.Dispatch(ViewConst.UpdateStatus_Mutiple, gameData.Mutiple); //更新倍数
    }
Exemplo n.º 2
0
    private void HandleMatch(PlayerInfo p)
    {
        Debug.Log("房间满员,开始游戏");
        RoomMembers.Add(p.Name);
        RoomMembers.Add(StringConst.Computer1);
        RoomMembers.Add(StringConst.Computer2);
        //确定玩家顺序
        int startPlayer = 0;//从玩家起始

        CurrentTurn = startPlayer;
        int player2 = (startPlayer + 1) % 3;
        int player3 = (startPlayer + 2) % 3;
        //发送匹配成功命令
        RemoteCMD_Data rec = new RemoteCMD_Data();

        rec.cmd = RemoteCMD_Const.MatchSuccess;
        dispatcher.Dispatch(ServiceConst.Service_MatchSuccess, rec);
        //将顺序转发给房间内的玩家
        rec.cmd         = RemoteCMD_Const.StartPlayer;
        rec.player.Name = RoomMembers[startPlayer];
        dispatcher.Dispatch(ServiceConst.Service_StartPlayer, rec);
        //
        rec             = new RemoteCMD_Data();
        rec.cmd         = RemoteCMD_Const.Player2;
        rec.player.Name = RoomMembers[player2];
        dispatcher.Dispatch(ServiceConst.Service_Player2, rec);
        //
        rec             = new RemoteCMD_Data();
        rec.cmd         = RemoteCMD_Const.Player3;
        rec.player.Name = RoomMembers[player3];
        dispatcher.Dispatch(ServiceConst.Service_Player3, rec);
    }
Exemplo n.º 3
0
    private void CallBack_PVE()
    {
        RemoteCMD_Data recData = new RemoteCMD_Data();

        recData.cmd = RemoteCMD_Const.Match;
        dispatcher.Dispatch(NotificationConst.Noti_StartPVE, recData);//开启单机
    }
    private void CallBack_Pass()
    {
        RemoteCMD_Data recData = new RemoteCMD_Data();

        recData.cmd = RemoteCMD_Const.Pass;
        dispatcher.Dispatch(NotificationConst.Noti_SendRecData, recData);//执行出牌命令
    }
Exemplo n.º 5
0
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        Debug.Log("StartPlayer:" + recData.player.Name);
        gameData.Players.Add(recData.player);
    }
Exemplo n.º 6
0
    private void HandleGenerateCards(Card[] cards)
    {
        Debug.Log("开始发牌...");
        Card[] cards1 = new Card[17];
        Array.Copy(cards, 0, cards1, 0, 17);
        Card[] cards2 = new Card[17];
        Array.Copy(cards, 17, cards2, 0, 17);
        Card[] cards3 = new Card[17];
        Array.Copy(cards, 34, cards3, 0, 17);
        Card[] baseCards = new Card[3];
        Array.Copy(cards, 51, baseCards, 0, 3);
        //手牌1
        RemoteCMD_Data recData = new RemoteCMD_Data();

        recData.cmd   = RemoteCMD_Const.DealCards;
        recData.cards = (Card[])cards1.Clone();
        dispatcher.Dispatch(ServiceConst.Service_DealCards, recData);
        //手牌2

        ComputerHandCards.Add(StringConst.Computer1, new List <Card>((Card[])cards2.Clone()));
        //手牌3

        ComputerHandCards.Add(StringConst.Computer2, new List <Card>((Card[])cards3.Clone()));

        //底牌
        BaseCards = new List <Card>((Card[])baseCards.Clone());
        RemoteCMD_Data rec = new RemoteCMD_Data();

        rec.cmd   = RemoteCMD_Const.BaseCards;
        rec.cards = baseCards;
        dispatcher.Dispatch(ServiceConst.Service_BaseCards, rec);
        //开始游戏
        SendTurn();
    }
Exemplo n.º 7
0
    private void HandleRecievedData(RemoteCMD_Data recData)
    {
        switch (recData.cmd)
        {
        case RemoteCMD_Const.Match:
        {
            HandleMatch(recData.player);
        }
        break;

        case RemoteCMD_Const.CallLandlord:
        {
            HandleCallLandlord(recData);
        }
        break;

        case RemoteCMD_Const.NotCall:
        {
            HandleNotCall(recData);
        }
        break;

        case RemoteCMD_Const.Claim:
        {
            HandleClaim(recData);
        }
        break;

        case RemoteCMD_Const.NotClaim:
        {
            HandleNotClaim(recData);
        }
        break;

        case RemoteCMD_Const.GenerateCards:
        {
            HandleGenerateCards((Card[])recData.cards.Clone());
        }
        break;

        case RemoteCMD_Const.Discards:
        {
            HandleDiscards(recData);
        }
        break;

        case RemoteCMD_Const.Pass:
        {
            HandlePass(recData);
        }
        break;

        case RemoteCMD_Const.GamerOver:
        {
            HandleGameOver(recData);
        }
        break;
        }
    }
Exemplo n.º 8
0
 private void Update()
 {
     if (MessageBox.Count > 0)
     {
         RemoteCMD_Data recData = MessageBox.Dequeue();
         HandleRecievedData(recData);
     }
 }
Exemplo n.º 9
0
    private void CallBack_CancelMatch()
    {
        View.HideMatchPanel();
        RemoteCMD_Data recData = new RemoteCMD_Data();

        recData.cmd = RemoteCMD_Const.CancelMatch;
        dispatcher.Dispatch(NotificationConst.Noti_SendRecData, recData);
    }
Exemplo n.º 10
0
    public override void Execute()
    {
        gameData.CurrentMode = GameMode.SinglePlayer;//模式改为单机
        RemoteCMD_Data recData = new RemoteCMD_Data();

        recData.cmd    = RemoteCMD_Const.Match;
        recData.player = gameData.PlayerSelf;
        dispatcher.Dispatch(NotificationConst.Noti_SendRecData, recData);//开始单机模式
    }
    private void CallBack_Discard()
    {
        //curStatus = OptionMenuStatus.Discard;
        //dispatcher.Dispatch(ViewConst.RequestDiscards);//请求手牌
        RemoteCMD_Data recData = new RemoteCMD_Data();

        recData.cmd = RemoteCMD_Const.Discards;
        dispatcher.Dispatch(NotificationConst.Noti_SendRecData, recData);//执行出牌命令
    }
Exemplo n.º 12
0
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        Debug.Log("BaseCards:" + LitJson.JsonMapper.ToJson(recData));
        Card[] baseCard = new Card[recData.cards.Length];
        recData.cards.CopyTo(baseCard, 0);
        gameData.BaseCards.AddRange(baseCard);             //保存底牌数据
        dispatcher.Dispatch(ViewConst.ShowBaseCards_Back); //显示底牌背面
    }
Exemplo n.º 13
0
    public override void Execute()
    {
        Debug.Log("DealCards:Get HandCards");
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        gameData.HandCards.Clear();
        gameData.HandCards.AddRange((Card[])recData.cards.Clone());                  //保存手牌
        dispatcher.Dispatch(ViewConst.ShowHandCards, (Card[])recData.cards.Clone()); //显示手牌
        dispatcher.Dispatch(ViewConst.UpdatePlayer2Cards, 17);                       //显示玩家2的牌
        dispatcher.Dispatch(ViewConst.UpdatePlayer3Cards, 17);                       //显示玩家3的牌
    }
Exemplo n.º 14
0
    public override void Execute()
    {
        Debug.Log("Pass Command is Executed");
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        if (recData.player.Name.Equals(gameData.Player2.Name))
        {
            dispatcher.Dispatch(ViewConst.ShowPlayer2Msg, StringConst.Pass);
        }
        if (recData.player.Name.Equals(gameData.Player3.Name))
        {
            dispatcher.Dispatch(ViewConst.ShowPlayer3Msg, StringConst.Pass);
        }
    }
Exemplo n.º 15
0
 private void HandleNotClaim(RemoteCMD_Data recData)
 {
     Debug.Log("玩家" + recData.player.Name + "不抢地主");
     dispatcher.Dispatch(ServiceConst.Service_NotClaim, new RemoteCMD_Data()
     {
         player = new PlayerInfo()
         {
             Name = recData.player.Name
         },
         cmd = RemoteCMD_Const.NotClaim
     });
     DecideLandlord(recData.player.Name, false);
     SendTurn();
 }
Exemplo n.º 16
0
 private void HandleCallLandlord(RemoteCMD_Data recData)
 {
     Console.WriteLine("玩家" + recData.player.Name + "叫地主");
     dispatcher.Dispatch(ServiceConst.Service_CallLandlord, new RemoteCMD_Data()
     {
         player = new PlayerInfo()
         {
             Name = recData.player.Name
         },
         cmd = RemoteCMD_Const.CallLandlord
     });
     DecideLandlord(recData.player.Name, true);
     SendTurn();
 }
Exemplo n.º 17
0
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;
        string         result  = "";

        if (recData.player.Name.Equals(gameData.Landlord))//赢的是地主
        {
            result = StringConst.Lose;
            if (recData.player.Name.Equals(gameData.PlayerSelf.Name))//自己是地主
            {
                result = StringConst.Win;
            }
            else//不是地主
            {
                result = StringConst.Lose;
            }
        }
        else//赢的是农民
        {
            if (gameData.PlayerSelf.Name.Equals(gameData.Landlord))//自己是地主
            {
                result = StringConst.Lose;
            }
            else//自己是农民,获胜
            {
                result = StringConst.Win;
            }
        }


        Debug.Log("ShowGameOverUICommand: The Winner is:" + recData.player.Name);
        Transform  canvas     = ContextView.transform.Find("Canvas");
        GameObject GameOverUI = canvas.Find("GameOverUI(Clone)").gameObject;

        GameOverUI.transform.SetSiblingIndex(canvas.childCount - 1);//显示在最前面
        //显示输赢信息
        dispatcher.Dispatch(ViewConst.UpdateGameOverResult, result);
        //关掉所有计时器
        dispatcher.Dispatch(ViewConst.SwitchTimer_Player1, Player1TimerStatus.GameIn_Off);
        dispatcher.Dispatch(ViewConst.SwitchTimer_Player2, false);
        dispatcher.Dispatch(ViewConst.SwitchTimer_Player3, false);
        gameData.Init();//初始化数据
        GameObject.Find("PVEController").GetComponent <LocalService_View>().Init();
    }
Exemplo n.º 18
0
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        if (recData.player.Name.Equals(gameData.Player2.Name))
        {
            dispatcher.Dispatch(ViewConst.ShowPlayer2Msg, StringConst.NotCall);
        }
        if (recData.player.Name.Equals(gameData.Player3.Name))
        {
            dispatcher.Dispatch(ViewConst.ShowPlayer3Msg, StringConst.NotCall);
        }
        //if (recData.player.Name.Equals(gameData.PlayerSelf.Name))
        //{
        //    dispatcher.Dispatch(ViewConst.ChangeOptionMenuMode, OptionMenu_Status.HideAll);
        //}
        gameData.CurrentStatus = GameStatus.CallLandlord;
        gameData.ClaimCount--;
    }
Exemplo n.º 19
0
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        Debug.Log("Player3:" + recData.player.Name);
        gameData.Players.Add(recData.player);
        Debug.Log(gameData.PlayerSelf.Name);
        int selfIndex = gameData.Players.FindIndex(
            (p) => {
            Debug.Log(p.Name);
            return(p.Name == gameData.PlayerSelf.Name);
        });    //找到自己所在的顺序

        //以自己为准,其他玩家按游戏顺序逆时针排位置
        Debug.Log("SelfIndex:" + selfIndex);
        selfIndex++;
        selfIndex       %= 3;
        gameData.Player2 = gameData.Players[selfIndex];                          //玩家2
        dispatcher.Dispatch(ViewConst.UpdatePlayer2Name, gameData.Player2.Name); //显示玩家2名字
        //
        selfIndex++;
        selfIndex       %= 3;
        gameData.Player3 = gameData.Players[selfIndex];                          //玩家3
        dispatcher.Dispatch(ViewConst.UpdatePlayer3Name, gameData.Player3.Name); //显示玩家3名字
        gameData.CurrentStatus = GameStatus.CallLandlord;
        if (gameData.PlayerSelf.Name.Equals(gameData.Players[0].Name))           //自己是首发
        {
            Debug.Log("GenerateCards");
            gameData.CurrentStatus = GameStatus.CallLandlord;//模式为叫地主
            dispatcher.Dispatch(NotificationConst.Noti_SendRecData,
                                new RemoteCMD_Data()
            {
                cmd   = RemoteCMD_Const.GenerateCards,
                cards = gameData.GenerateCards().ToArray()
            });    //随机生成一副牌并发送给服务器
        }
        //recData.cmd = RemoteCMD_Const.GameTurn;//执行新的回合
        //recData.player.Name = gameData.Players[0].Name;
        Debug.Log("Game Start");
        dispatcher.Dispatch(NotificationConst.Noti_ShowMainGameUI);           //显示主界面
        //dispatcher.Dispatch(NotificationConst.Noti_GameTurn, recData);
        dispatcher.Dispatch(ViewConst.UpdateStatus_Base, gameData.BaseScore); //显示底分分数
    }
Exemplo n.º 20
0
    private void SendTurn()
    {
        RemoteCMD_Data recData = new RemoteCMD_Data();

        recData.cmd = RemoteCMD_Const.GameTurn;
        Debug.Log("Local:" + CurrentTurn);
        int index = CurrentTurn;                                     //当前回合索引

        recData.player.Name = RoomMembers[index];                    //当前玩家昵称
        //string targetIP = roomManager[player_Room[ipname]].Members[index];//IP
        dispatcher.Dispatch(ServiceConst.Service_GameTurn, recData); //转发回合
        if (!RoomMembers[CurrentTurn].Equals(RoomMembers[0]))        //不是玩家的回合
        {
            HandleComputerTurn();                                    //处理电脑的操作
        }

        CurrentTurn++;//当前回合数增加
        CurrentTurn %= 3;
    }
Exemplo n.º 21
0
 public void SendDataToServer(IBaseMsg data)
 {
     if (gameData.CurrentMode == GameMode.MutiPlayer)//多人模式
     {
         if (_client == null)
         {
             ClientService clientService = GameObject.Find("NetClient").GetComponent <ClientService>();
             _client = clientService._client;
         }
         Debug.Log(_client);
         _client.SendMsg(data.ToJson());
     }
     else//单机模式
     {
         Debug.Log(data.ToJson());
         RemoteCMD_Data recData = LitJson.JsonMapper.ToObject <RemoteCMD_Data>(data.ToJson());
         GameObject.Find("PVEController").GetComponent <LocalService_View>().
         SendDataToLocal(recData);    //发送数据到本地
     }
 }
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        recData.player = gameData.PlayerSelf;
        bool isEnd = false;

        if (recData.cmd == RemoteCMD_Const.Discards)
        {
            recData.cards = gameData.SelectedCards.ToArray();
            Debug.Log("要出的牌:" + LitJson.JsonMapper.ToJson(recData.cards));
            Debug.Log("上次出牌人:" + gameData.LastPlayer);
            if (gameData.GetCardsType(recData.cards) != CardsType.Mussy && //不能是杂牌
                (gameData.CardsCompareToDicards(recData.cards) ||          // 大过上家
                 gameData.PlayerSelf.Name.Equals(gameData.LastPlayer)))    //上一次是自己
            {
                dispatcher.Dispatch(ViewConst.DiscardSuccess);             //出牌成功
                gameData.RestCardNum -= recData.cards.Length;              //更新剩余牌数
                if (gameData.RestCardNum <= 0)                             //牌出完了
                {
                    isEnd = true;                                          //游戏结束
                }
            }
            else
            {
                dispatcher.Dispatch(ViewConst.DiscardFail);
                return;//出牌失败
            }
        }
        gameData.SelectedCards = new System.Collections.Generic.List <Card>(); //清空
        clientService.SendDataToServer(new RemoteMsg(recData));                //调用服务,发送命令和数据
        if (isEnd)
        {
            clientService.SendDataToServer(new RemoteMsg(new RemoteCMD_Data()
            {
                cmd    = RemoteCMD_Const.GamerOver,
                player = gameData.PlayerSelf
            }));                                                                        //游戏结束
        }
        dispatcher.Dispatch(ViewConst.ChangeOptionMenuMode, OptionMenu_Status.HideAll); //回合结束隐藏界面
    }
Exemplo n.º 23
0
    public override void Execute()
    {
        RemoteCMD_Data recData = evt.data as RemoteCMD_Data;

        Debug.Log("DiscardCommand is Executing...:" + recData.player.Name);
        gameData.LastPlayer = recData.player.Name;//出牌人
        //从手牌中删除
        for (int i = 0; i < recData.cards.Length; i++)
        {
            for (int j = 0; j < gameData.HandCards.Count; j++)
            {
                if (recData.cards[i].Value == gameData.HandCards[j].Value &&
                    recData.cards[i].Suit == gameData.HandCards[j].Suit)
                {
                    gameData.HandCards.RemoveAt(j);
                    break;//找到了就跳出
                }
            }
        }
        gameData.CurrentDiscards.Clear();                           //清除上次的
        gameData.CurrentDiscards.AddRange(recData.cards);           //保存出牌
        dispatcher.Dispatch(ViewConst.ShowDiscards, recData.cards); //显示出牌
        string cardType = gameData.GetCardsType(recData.cards);     //获得牌型

        dispatcher.Dispatch(ViewConst.ShowDiscardMsg, cardType);    //显示牌型
        if (recData.player.Name.Equals(gameData.PlayerSelf.Name))
        {
            dispatcher.Dispatch(ViewConst.RemoveAllDiscards);//清除自己要出的牌
        }
        if (recData.player.Name.Equals(gameData.Player2.Name))
        {
            dispatcher.Dispatch(ViewConst.UpdatePlayer2Cards, -recData.cards.Length);//更新玩家2牌数
        }
        if (recData.player.Name.Equals(gameData.Player3.Name))
        {
            dispatcher.Dispatch(ViewConst.UpdatePlayer3Cards, -recData.cards.Length);//更新玩家3牌数
        }
    }
Exemplo n.º 24
0
 private void HandleGameTurn(RemoteCMD_Data recData)
 {
     dispatcher.Dispatch(ServiceConst.Service_GameTurn, recData);
 }
Exemplo n.º 25
0
    private void FixedUpdate()
    {
        //Debug.Log(_client);
        if (_client.MessageBox.Count > 0)
        {
            string data = "";
            lock (_client.MessageBox)
            {
                data = _client.MessageBox.Dequeue();//取数据
            }
            Debug.Log(data);
            RemoteCMD_Data recData = JsonMapper.ToObject <RemoteCMD_Data>(data);
            switch (recData.cmd)
            {
            case RemoteCMD_Const.MatchSuccess:
            {
                HandleMatchSuccess(recData);
            } break;

            case RemoteCMD_Const.DealCards:
            {
                HandleDealCards(recData);
            }
            break;

            case RemoteCMD_Const.BaseCards:
            {
                HandleBaseCards(recData);
            }
            break;

            case RemoteCMD_Const.StartPlayer:
            {
                HandleStartPlayer(recData);
            }
            break;

            case RemoteCMD_Const.Player2:
            {
                HandlePlayer2(recData);
            }
            break;

            case RemoteCMD_Const.Player3:
            {
                HandlePlayer3(recData);
            }
            break;

            case RemoteCMD_Const.Pass:
            {
                HandlePass(recData);
            }
            break;

            case RemoteCMD_Const.Discards:
            {
                HandleDiscards(recData);
            }
            break;

            case RemoteCMD_Const.CallLandlord:
            {
                HandleCallLandlord(recData);
            }
            break;

            case RemoteCMD_Const.NotCall:
            {
                HandleNotCall(recData);
            }
            break;

            case RemoteCMD_Const.Claim:
            {
                HandleClaim(recData);
            }
            break;

            case RemoteCMD_Const.NotClaim:
            {
                HandleNotClaim(recData);
            }
            break;

            case RemoteCMD_Const.GameTurn:
            {
                HandleGameTurn(recData);
            }
            break;

            case RemoteCMD_Const.GamerOver:
            {
                HandleGameOver(recData);
            }
            break;
            }
        }
    }
Exemplo n.º 26
0
 public void SendDataToLocal(RemoteCMD_Data recData)
 {
     //HandleRecievedData(recData);
     MessageBox.Enqueue(recData);
 }
Exemplo n.º 27
0
 private void HandleGameOver(RemoteCMD_Data recData)
 {
     Debug.Log("玩家" + recData.player.Name + "获得胜利,游戏结束");
     dispatcher.Dispatch(ServiceConst.Service_Gameover, recData);
 }
Exemplo n.º 28
0
 private void HandlePass(RemoteCMD_Data recData)
 {
     Debug.Log("玩家" + recData.player.Name + "跳过");
     dispatcher.Dispatch(ServiceConst.Service_Pass, recData);
     SendTurn();
 }
Exemplo n.º 29
0
 private void HandleDiscards(RemoteCMD_Data recData)
 {
     Debug.Log("玩家" + recData.player.Name + "出牌");
     dispatcher.Dispatch(ServiceConst.Service_Discard, recData);
     SendTurn();
 }
Exemplo n.º 30
0
 public RemoteMsg(RemoteCMD_Data data)
 {
     Data = data;
 }