void getPuke(JsonObject data) { whosTurn = 1; //isReadyUidText = "Already:game start"; //isReadyUidText = "Already," + "whosTurn: " + mapIndex2[whosTurn]; isReadyUidText = "当前出牌者:" + mapIndex2[whosTurn]; //Debug.Log("onStartGame----------"); string tmp = data.ToString(); JsonData jdtmp = JsonMapper.ToObject(tmp); string tmp2 = jdtmp["arrayPuke"].ToJson(); JsonData jdtmp2 = JsonMapper.ToObject(tmp2); string userIndex = "u" + index.ToString(); JsonData jdtmpU1 = JsonMapper.ToObject(jdtmp2[userIndex].ToJson()); /** * 这里需要对服务端随机发过来的牌进行排序,然后再显示 */ Card[] cardsTmp = new Card[jdtmpU1.Count]; for (int i = 0; i < jdtmpU1.Count; i++) { string numStr = jdtmpU1[i].ToString(); int numInt = int.Parse(numStr); cardsTmp[i] = new Card(numInt); // if(!userCardNumber.Contains(numInt)) //userCardNumber.Add(numInt); } CardsRules.SortCards(cardsTmp, cardsTmp.Length); for (int i = 0; i < jdtmpU1.Count; i++) { userCardNumber.Add(cardsTmp[i].GetIntVal); } foreach (int val in userCardNumber) { if (!hashMap.ContainsKey(val)) { hashMap.Add(val, false); } } lastIndexTextContent = "就绪"; isFapai = true; userCardNumberGO = new ArrayList(); GameState = 0; // 每个玩家对应的剩余扑克牌数 index_CardsCnt.Add(1, 17); index_CardsCnt.Add(2, 17); index_CardsCnt.Add(3, 17); }
// 出牌按钮的点击事件 void Btn_OutCards() { if (!isGameStart()) { return; } if (whosTurn != index) { //Debug.Log("还未轮到自己出牌"); GameObject newTip = Instantiate(tipPrefab); newTip.transform.FindChild("Text").GetComponent <Text>().text = "还未轮到自己出牌!"; newTip.transform.parent = mycanvas.transform; newTip.GetComponent <RectTransform>().localPosition = new Vector3(0, 0, 0); Destroy(newTip, 2.0f); return; } //whosTurn = getNextIndex(whosTurn);// 改变下一个出牌者 //isReadyUidText = "Already." + "whosTurn: " + mapIndex2[whosTurn]; ArrayList deleteObj = new ArrayList(); foreach (GameObject obj in userCardNumberGO) { string strVal = obj.transform.FindChild("Text").gameObject.GetComponent <Text>().text; int val = int.Parse(strVal); bool flag = hashMap[val]; if (flag == true) { deleteObj.Add(obj); //Destroy(obj); //userCardNumber.Remove(val); //userCardNumberGO.Remove(obj); //GameObject t2 = (GameObject)Instantiate(msgPrefab); //t2.transform.FindChild("Text").gameObject.GetComponent<Text>().text = val.ToString(); //t2.transform.FindChild("Image").gameObject.GetComponent<Image>().GetComponent<Image>().overrideSprite = // Resources.Load("puke_prefabs/" + val.ToString(), typeof(Sprite)) as Sprite; //t2.transform.SetParent(Scroll_View_cards_lastOut.transform.FindChild("Viewport").FindChild("Content").transform); } } Card[] cards = new Card[deleteObj.Count]; int i = 0; //ArrayList deleteCardsNum = new ArrayList(); // deleteCards.Clear(); foreach (GameObject obj in deleteObj) { string strVal = obj.transform.FindChild("Text").gameObject.GetComponent <Text>().text; //deleteCards.Add(strVal); //deleteCardsNum.Add(strVal); Card c = new Card(int.Parse(strVal)); cards[i++] = c; } CardsRules.SortCards(cards, cards.Length); CardsType type2; if (!CardsRules.PopEnable(cards, out type2)) // 出牌不合理,或者没有出牌(点击pass按钮),都是无效操作 { deleteCards.Clear(); GameObject newTip = Instantiate(tipPrefab); newTip.transform.FindChild("Text").GetComponent <Text>().text = "出牌不合理!"; newTip.transform.parent = mycanvas.transform; newTip.GetComponent <RectTransform>().localPosition = new Vector3(0, 0, 0); Destroy(newTip, 2.0f); return; } // lastIndex == index ,随便出 if (lastIndexTextContent == "就绪" || int.Parse(lastIndexTextContent) == index) { } else // 出的牌 必须大于上一个玩家的牌,才能出,否则不能出牌 { // cards 1,上(上)一个玩家出的牌 int ii = 0; Card[] c1 = new Card[deleteCards.Count]; foreach (string val in deleteCards) { c1[ii++] = new Card(int.Parse(val)); } CardsRules.SortCards(c1, deleteCards.Count); // cards 2 就是 cards(当前要出的牌) CardsType type1; CardsRules.PopEnable(c1, out type1); // 不合理的话,弹框提醒,并退出 if (!PlayCard.isCanOutCard(c1, cards, type1, type2)) { GameObject newTip = Instantiate(tipPrefab); newTip.transform.FindChild("Text").GetComponent <Text>().text = "出的牌不够大!"; newTip.transform.parent = mycanvas.transform; newTip.GetComponent <RectTransform>().localPosition = new Vector3(0, 0, 0); Destroy(newTip, 2.0f); return; } } ArrayList deleteCardsNum = new ArrayList(); deleteCards.Clear(); for (int j = 0; j < i; j++) { string tmp = cards[j].GetIntVal.ToString(); deleteCards.Add(tmp); deleteCardsNum.Add(tmp); } if (deleteCardsNum.Count == userCardNumberGO.Count) { // TODO 发送游戏结束的消息 //isReadyUidText = "Game Over, Start new Game"; JsonObject messageOver = new JsonObject(); messageOver.Add("uid", userName); messageOver.Add("rid", roomid); messageOver.Add("index", index); pclient.request("chat.chatHandler.over", messageOver, (data) => { Debug.Log("游戏结束"); }); return; // 结束后直接return,下面的出牌消息直接不发送 // } // 给服务发送出牌的消息 JsonObject message = new JsonObject(); message.Add("uid", userName); message.Add("rid", roomid); message.Add("index", index); message.Add("delete_cards", deleteCardsNum); pclient.request("chat.chatHandler.chupai", message, (data) => { Debug.Log("出牌"); }); }