示例#1
0
        public override void DeselectCard(CardViewModel viewModel)
        {
            base.DeselectCard(viewModel);
            PlayerViewModel player = CoreGameRoot.GetPlayerByActorId(viewModel.OwnerActorId);

            player.ExecuteRefreshButtonDealEnabled();
        }
示例#2
0
        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();
                }
            }
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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();
            }
        }
示例#5
0
        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();
            }
        }