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); //更新倍数 }
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); }
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);//执行出牌命令 }
public override void Execute() { RemoteCMD_Data recData = evt.data as RemoteCMD_Data; Debug.Log("StartPlayer:" + recData.player.Name); gameData.Players.Add(recData.player); }
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(); }
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; } }
private void Update() { if (MessageBox.Count > 0) { RemoteCMD_Data recData = MessageBox.Dequeue(); HandleRecievedData(recData); } }
private void CallBack_CancelMatch() { View.HideMatchPanel(); RemoteCMD_Data recData = new RemoteCMD_Data(); recData.cmd = RemoteCMD_Const.CancelMatch; dispatcher.Dispatch(NotificationConst.Noti_SendRecData, recData); }
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);//执行出牌命令 }
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); //显示底牌背面 }
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的牌 }
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); } }
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(); }
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(); }
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(); }
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--; }
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); //显示底分分数 }
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; }
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); //回合结束隐藏界面 }
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牌数 } }
private void HandleGameTurn(RemoteCMD_Data recData) { dispatcher.Dispatch(ServiceConst.Service_GameTurn, recData); }
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; } } }
public void SendDataToLocal(RemoteCMD_Data recData) { //HandleRecievedData(recData); MessageBox.Enqueue(recData); }
private void HandleGameOver(RemoteCMD_Data recData) { Debug.Log("玩家" + recData.player.Name + "获得胜利,游戏结束"); dispatcher.Dispatch(ServiceConst.Service_Gameover, recData); }
private void HandlePass(RemoteCMD_Data recData) { Debug.Log("玩家" + recData.player.Name + "跳过"); dispatcher.Dispatch(ServiceConst.Service_Pass, recData); SendTurn(); }
private void HandleDiscards(RemoteCMD_Data recData) { Debug.Log("玩家" + recData.player.Name + "出牌"); dispatcher.Dispatch(ServiceConst.Service_Discard, recData); SendTurn(); }
public RemoteMsg(RemoteCMD_Data data) { Data = data; }