public override void DeselectCard(CardViewModel viewModel) { base.DeselectCard(viewModel); PlayerViewModel player = CoreGameRoot.GetPlayerByActorId(viewModel.OwnerActorId); player.ExecuteRefreshButtonDealEnabled(); }
public override void RefreshPlayer(PlayerViewModel viewModel) { base.RefreshPlayer(viewModel); if (viewModel.IsSelf == false) { // ready 按钮 bool is_ready = false; if (viewModel.LBPlayer.CustomProperties.ContainsKey("is_ready")) { is_ready = Convert.ToBoolean(viewModel.LBPlayer.CustomProperties ["is_ready"]); } if (is_ready && viewModel.Status is Ready == false) { viewModel.ExecutePlayerReady(); } else if (is_ready == false && viewModel.Status is Wait == false) { viewModel.ExecutePlayerCancel(); } } // turn object my_turn = false; if (viewModel.LBPlayer.CustomProperties.TryGetValue("my_turn", out my_turn)) { if (viewModel.Status is MatchDeal && Convert.ToBoolean(my_turn) == false) { object is_win = false; if (viewModel.LBPlayer.CustomProperties.TryGetValue("is_win", out is_win)) { if (Convert.ToBoolean(is_win)) { viewModel.ExecuteWin(); CoreGameRoot.ExecuteRefreshSummaryPlayersList(); } else { viewModel.ExecuteTurnOff(); } } } else if (viewModel.Status is MatchIdle && Convert.ToBoolean(my_turn)) { viewModel.ExecuteTurnOn(); } } }
public override void ButtonDealClicked(PlayerViewModel viewModel) { base.ButtonDealClicked(viewModel); if (viewModel.Status is MatchDeal) { List <CardInfo> cardInfoList = viewModel.CurrentSelectedCards; // 检查是否需要设置is_win 标志 if (viewModel.HandCards.Count == cardInfoList.Count) { int rank = CoreGameRoot.WinPlayersCount + 1; Hashtable ht = new Hashtable(); ht.Add("is_win", true); ht.Add("rank", rank); if (rank == 1) { ht.Add("first_get", true); } Publish(new NetSetPlayerProperties() { ActorId = viewModel.ActorId, PropertiesToSet = ht }); } Hashtable ht2 = new Hashtable(); ht2.Add("current_cards", JsonConvert.SerializeObject(cardInfoList)); ht2.Add("current_cards_actor_id", viewModel.ActorId); Publish(new NetSetRoomProperties() { PropertiesToSet = ht2 }); CoreGameRoot.ExecuteTurnNext(); Publish(new NetRaiseEvent() { EventCode = GameService.EventCode.ShowCardAndTurnNext }); viewModel.ExecuteShowCardsToPile(); CoreGameRoot.ExecuteRefreshCoreGame(); } }
public override void ButtonPassClicked(PlayerViewModel viewModel) { base.ButtonPassClicked(viewModel); if (viewModel.Status is MatchDeal) { viewModel.HandCards.Where(cardVM => { return(cardVM.IsSelected); }).ToList().ForEach(_ => _.ExecuteDeselectCard()); CoreGameRoot.ExecuteTurnNext(); Publish(new NetRaiseEvent() { EventCode = GameService.EventCode.PassAndTurnNext }); CoreGameRoot.ExecuteRefreshCoreGame(); } }
public override void ButtonStartClicked(PlayerViewModel viewModel) { base.ButtonStartClicked(viewModel); if (viewModel.PlayerRoomIdentity == RoomIdentity.RoomMaster) { // 点击开始按钮后,生成每个人的手牌 List <CardInfo> card_info = GameService.GetDeck(true); Dictionary <int, List <CardInfo> > card_info_dic = Network.Client.CurrentRoom.Players.ToDictionary(kv1 => kv1.Key, kv2 => new List <CardInfo> ()); int first_get_actor_id = Network.Client.LocalPlayer.ID; try { first_get_actor_id = Network.Client.CurrentRoom.Players.Where(kv => { return(kv.Value.CustomProperties.ContainsKey("first_get") && Convert.ToBoolean(kv.Value.CustomProperties ["first_get"])); }).Select(kv => kv.Key).Single(); } catch (Exception ex) { UnityEngine.Debug.Log("没有指定先抓牌的 actorid, 使用 RoomMaster 的 actorid: " + ex.Message); } List <int> actor_id_list = Network.Client.CurrentRoom.Players.Select(kv => kv.Key).OrderBy(id => id).ToList(); bool has_find_first = false; int first_turn_actor_id = -1; try { first_turn_actor_id = Network.Client.CurrentRoom.Players.Where(kv => { return(kv.Value.CustomProperties.ContainsKey("rank")); }).OrderBy(_ => Convert.ToInt32(_.Value.CustomProperties ["rank"])).Select(kv2 => kv2.Value.ID).First(); } catch (Exception ex) { UnityEngine.Debug.Log("没有指定先出牌的 actorid, 使用 先抓牌者 的 actorid: " + ex.Message); } Dictionary <int, int> teamDic = new Dictionary <int, int> (); foreach (int actor_id in actor_id_list) { // 2队为普通队; teamDic.Add(actor_id, 2); if (GameService.GameMode == GameMode.m_2p_r40c) { if (actor_id_list [0] == actor_id) { teamDic [actor_id] = 1; } } } int i = 0; while (i < card_info.Count) { foreach (int actor_id in actor_id_list) { if (actor_id == first_get_actor_id) { has_find_first = true; } if (has_find_first) { CardInfo ci = card_info [i]; card_info_dic [actor_id].Add(ci); // if (ci.NumericalValue == NumericalValue.NV_BIG_JOKER && first_turn_actor_id == -1) { // first_turn_actor_id = actor_id; // } // 未测试 if (GameService.GameMode == GameMode.m_3p_spade_ace) { if (CardInfo.ValueEqual(ci, new CardInfo(Suit.SPADE, NumericalValue.NV_ACE))) { // 1队为黑桃 ACE 队 teamDic [actor_id] = 1; } } if (++i >= card_info.Count) { break; } } } } if (first_turn_actor_id == -1) { first_turn_actor_id = first_get_actor_id; } foreach (int actor_id in actor_id_list) { Hashtable ht = new Hashtable(); ht.Add("hand_cards", JsonConvert.SerializeObject(card_info_dic [actor_id])); ht.Add("first_get", false); ht.Add("my_turn", actor_id == first_turn_actor_id); ht.Add("is_win", false); ht.Add("rank", -1); ht.Add("team_id", teamDic [actor_id]); ht.Add("is_team_win", false); ht.Add("first_deal", false); Publish(new NetSetPlayerProperties() { ActorId = actor_id, PropertiesToSet = ht }); } Hashtable ht2 = new Hashtable(); ht2.Add("is_playing", true); ht2.Add("current_cards", JsonConvert.SerializeObject(new List <CardInfo> ())); ht2.Add("current_cards_actor_id", -1); ht2.Add("active_actor_id", first_turn_actor_id); Publish(new NetSetRoomProperties() { PropertiesToSet = ht2 }); // 发出事件,开始抓牌 Publish(new NetRaiseEvent() { EventCode = GameService.EventCode.MatchBegan }); CoreGameRoot.ExecuteRootMatchBegan(); } }