コード例 #1
0
ファイル: TestModeGUI.cs プロジェクト: wefasdfaew2/GamePortal
    private void Server_EventPluginMessageOnProcess(string command, string action, EsObject eso)
    {
        if (command == "getHandRobot")
        {
            if (eso.variableExists("players"))
            {
                foreach (EsObject obj in eso.getEsObjectArray("players"))
                {
                    string username        = obj.getString("userName");
                    PlayerControllerChan p = GameModelChan.GetPlayer(username);
                    if (obj.getIntegerArray("hand").Length != p.mCardHand.Count)
                    {
                        Debug.LogWarning("Số lượng card không phù hợp giũa client và server: " + p.username);
                    }
                    else
                    {
                        if (p.mCardHand.FindAll(c => c.CardId == -1).Count == 0)
                        {
                            return;
                        }

                        foreach (int cardId in obj.getIntegerArray("hand"))
                        {
                            ECard card = p.mCardHand.Find(c => c.CardId == cardId);
                            if (card == null)
                            {
                                p.mCardHand.Find(c => c.CardId == -1).CardId = cardId;
                            }
                        }
                    }
                }
            }
        }
    }
コード例 #2
0
    public bool CanDiscard(ECard card)
    {
        if (CardStolen.Find(c => c.Id == card.CardId) != null)
        {
            return(false);
        }

        List <CardLib.Model.Card> cardHand = CardHand;

        cardHand.Remove(CardHand.Find(c => c.Id == card.CardId));
        try
        {
            PhomLib.Models.MeldsAndRemainingCards summary = PhomLib.Utility.PhomLogicCenter.caculateExistingMelds(cardHand, CardStolen);
            foreach (CardLib.Model.Card c in CardStolen)
            {
                if (summary == null)
                {
                    return(false);
                }
                else if (summary.RemainingCards.Find(c1 => c1 != null && c1.Id == c.Id) != null)
                {
                    return(false);
                }
            }
            return(true);
        }
        catch { return(false); }
    }
コード例 #3
0
        // public static  Dictionary<int, ECard> CardMap { get; set; }

        public static List <ECard> InitNewCards()
        {
            var Cards = new List <ECard>();

            for (int i = 1; i <= 52; i++)
            {
                int ct   = (i / 13) + 1;
                var type = (CardType)ct;
                var v    = (i % 13);
                if (v == 0)
                {
                    v = 13;
                }
                if (v == 1)
                {
                    v = 14;
                }
                var card = new ECard
                {
                    No       = i,
                    Value    = v,
                    CardType = type,
                };
                Cards.Add(card);
            }
            return(Cards);
        }
コード例 #4
0
    /// <summary>
    /// Khi có người chơi gửi phỏm
    /// </summary>
    /// <param name="index">Người gửi phỏm</param>
    /// <param name="indexTo">Gửi phỏm đến người chơi</param>
    /// <param name="cardValue">Card sẽ gửi</param>
    /// <param name="melds">Phỏm ké gửi vào</param>
    public static void AddMeld(int index, int indexTo, int cardValue, int[] melds)
    {
        Meld meld = GetPlayer(indexTo).GetMeld(melds);

        if (meld != null)
        {
            ECard card = GetCard_FromHandPlayer(index, cardValue);
            GetPlayer(index).mCardHand.Remove(card);
            meld.meld.Add(card);

            game.UpdateHand(index, 0.5f);
            game.UpdateHand(indexTo, 0.5f);

            CheckRemoveGiveCard(index);

            card.UpdateParent(indexTo);
            return;
        }

        if (YourController.slotServer == index)
        {
            game.canRequestSort = true;
        }

        Debug.Log(index);
        Debug.Log(indexTo);
        foreach (Meld m in GameModelTLMN.GetPlayer(indexTo).mCardMelds)
        {
            Debug.Log(m.meld);
        }
        Debug.Log(cardValue);
        Debug.Log(melds);

        Debug.LogError("LỖI: Không thể tìm thấy phỏm để gửi");
    }
コード例 #5
0
    void _Discard(int index, int cardValue)
    {
        ECard card = GetCard_FromHandPlayer(index, cardValue);

        GetPlayer(index).mCardHand.Remove(card);
        GetPlayer(index).mCardTrash.Add(card);

        if (YourController.slotServer == index)
        {
            game.canRequestSort = true;
        }
        game.fullLaying = false;

        if (game.listGiveCard.Count > 0)
        {
            game.listGiveCard.Clear();
        }

        if (YourController.slotServer == index)
        {
            GameModelPhom.IndexInTurn     = GetNextPlayer(index).slotServer;
            GameModelPhom.IndexLastInTurn = index;
        }

        MiniState = EGameStateMini.stealCard_or_draw;

        card.UpdateParent(index);

        game.UpdateHand(index, 0.5f);

        SoundGamePhom.Instances.PlaySoundDisCard(GetPlayer(index), GetNextPlayer(index));
    }
コード例 #6
0
    /// <summary>
    /// Khi có người chơi ăn bài
    /// </summary>
    /// <param name="index">Index Người chơi ăn</param>
    /// <param name="indexLast">Index người chơi đánh bài</param>
    public static void StealCard(int index, int indexLast)
    {
        int   indexTrash = GetPlayer(indexLast).mCardTrash.Count - 1;
        ECard card       = GetPlayer(indexLast).mCardTrash[indexTrash];

        card.ChangeSide(index);

        GetPlayer(indexLast).mCardTrash.RemoveAt(indexTrash);
        GetPlayer(index).mCardHand.Add(card);

        if (YourController.slotServer == index)
        {
            game.canRequestSort = true;
        }
        game.stolen = false;

        game.HideClickCard();
        MiniState = EGameStateMini.discard;

        if (YourController.slotServer == index)
        {
            game.OnClickSort(game.btSorted.gameObject);
        }
        else
        {
            game.UpdateHand(index, 0.5f);
        }

        game.UpdateHand(GameModelTLMN.IndexLastInTurn, 0.5f);

        card.UpdateParent(index);
    }
コード例 #7
0
 public static bool CanDiscard(ECard check)
 {
     return(GameModelPhom.IsYourTurn &&
            GameModelPhom.game.cardController.CanDiscard(check)
            &&
            (
                GameModelPhom.MiniState == GameModelPhom.EGameStateMini.discard && GameModelPhom.game.cardController.CanDiscard(check)
                ||
                (GameModelPhom.MiniState == GameModelPhom.EGameStateMini.lay_meld && GameModelPhom.YourController.mCardHand.TrueForAll(c => c.originSide == c.currentSide) ? true : false)
            ));
 }
コード例 #8
0
    /// <summary>
    /// Khi có người chơi đánh bài
    /// </summary>
    /// <param name="index">Người đánh bài</param>
    /// <param name="cardValue">Card đã đánh</param>
    public static void Discard(int index, int cardValue)
    {
        ECard card = GetCard_FromHandPlayer(index, cardValue);

        //Kiểm tra có quân bài đó trên tay không thì mới đánh.
        //Nếu không có trên tay thì có thể là do quân bài đã được đánh ra rồi.
        if (card != null)
        {
            model._Discard(index, cardValue);
        }
    }
コード例 #9
0
 public CardData(ECard _ID)
 {
     ID = _ID;
     if (ID == ECard.None)
     {
         Suit = ESuit.None;
     }
     else
     {
         Suit = CardManager.m_kCardSuits[ID - 1];
     }
 }
コード例 #10
0
    /// <summary>
    /// Lấy thông tin card của người chơi
    /// </summary>
    /// <param name="indexPlayer"></param>
    /// <param name="cardId"></param>
    /// <returns></returns>
    public static ECard GetCard_FromHandPlayer(int indexPlayer, int cardId)
    {
        ECard card = GetPlayer(indexPlayer).mCardHand.Find(c => c.CardId == cardId);

        if (card == null)
        {
            card = GetPlayer(indexPlayer).mCardHand.Find(c => c.CardId == -1);
            if (card != null)
            {
                card.CardId = cardId;
            }
        }
        return(card);
    }
コード例 #11
0
    /// <summary>
    /// Di chuyển các card khi lần đầu pick
    /// </summary>
    void MoveCard_FirstPick(ECard card)
    {
        #region THÔNG BÁO VỚI SERVER LÀ ĐÃ THỰC HIỆN XONG BƯỚC 1
        if (!serverRequestUpdateHandStep1 && GameModelChan.YourController != null && GameModelChan.IndexInTurn == GameModelChan.YourController.slotServer)
        {
            int index = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject);
            GameManager.Server.DoRequestPluginGame(Utility.SetEsObject(Fields.GAMEPLAY.PLAY, new object[]
            {
                Fields.ACTION, "firstPick", "slotChoice", Utility.SetEsObject(null, "firstPick", indexPick)
            }));
        }
        #endregion

        int indexPicked  = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject);
        int currentIndex = -1;
        for (int i = 0; i < GameModelChan.game.mPlaymat.locationRotation.Length - 1; i++)
        {
            if (indexPick == i)
            {
                currentIndex = GetNextGroupCard(i);
                listPickObject[currentIndex].transform.parent = GameModelChan.game.mPlaymat.locationRotation[i];
            }
            else
            {
                if (currentIndex != -1)
                {
                    currentIndex = GetNextGroupCard(currentIndex);
                    listPickObject[currentIndex].transform.parent = GameModelChan.game.mPlaymat.locationRotation[i];
                }
                else
                {
                    listPickObject[i].transform.parent = GameModelChan.game.mPlaymat.locationRotation[i];
                }
            }
        }

        //Di chuyển ra giữa và destroy những cái ko cần thiết đi
        //Tới Công rảnh thì code hộ anh mấy cái đoạn trên vứt vào dưới này luôn nhé.
        DealCardRotation.GetListRotation.ForEach(dealCard =>
        {
            MoveAllChildToCenter(dealCard.transform, 0.5f);
            if (GameModelChan.ListPlayerInGame.Find(p => p.IsHasQuit == false && p.mSide == dealCard.sideStart) == null)
            {
                GameObject.Destroy(dealCard.transform.GetChild(0).gameObject);
            }
        }
                                                 );
    }
コード例 #12
0
    void OnDoubleClick()
    {
        if (gameObject.GetComponent <iTween>() && gameObject.GetComponent <iTween>().isRunning)
        {
            return;
        }

        if (enabled && card.CardId != -1)
        {
            if (GameModelTLMN.CurrentState != GameModelTLMN.EGameState.playing)
            {
                return;
            }

            int index                  = 0;
            int indexOfList            = 0;
            List <List <int> > allList = GameModelTLMN.model.CardCollections.FindAll(l => l.Contains(card.CardId));
            if (allList.Count > 0)
            {
                while (GameModelTLMN.game.ListClickCard.Count > 0)
                {
                    GameModelTLMN.game.CardClick(GameModelTLMN.game.ListClickCard[0]);
                }

                for (int i = 0; i < allList.Count; i++)
                {
                    List <int> list = allList[i];
                    if (list.IndexOf(card.CardId) < indexOfList || i == 0)
                    {
                        indexOfList = list.IndexOf(card.CardId);
                        index       = i;
                    }
                }

                allList[index].ForEach(cardId =>
                {
                    ECard cardClick = GameModelTLMN.YourController.mCardHand.Find(c => c.CardId == cardId);
                    if (cardClick != null)
                    {
                        GameModelTLMN.game.CardClick(cardClick);
                    }
                });
            }
        }
    }
コード例 #13
0
 public void CardClick(ECard card)
 {
     if (card != null && currentStep == StepDealCard.WAIT_PICK)
     {
         if (pickAfterDealcard == null)
         {
             indexPick         = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject);
             pickAfterDealcard = card;
             MoveCard_FirstPick(pickAfterDealcard);
             pickAfterDealcard.gameObject.SetActive(false);
         }
         else if (pickAfterDealcard != card)
         {
             currentStep = StepDealCard.PICKED;
             GameModelChan.game.StartCoroutine(OnPickDone(card));
         }
     }
 }
コード例 #14
0
 public Meld(int[] lst, EPlayerController p)
 {
     player = p;
     foreach (int value in lst)
     {
         ECard card = p.mCardHand.Find(c => c.CardId == value);
         if (card == null)
         {
             card = p.mCardHand.Find(c => c.CardId == -1);
             if (card != null)
             {
                 card.CardId = value;
             }
         }
         p.mCardHand.Remove(card);
         meld.Add(card);
     }
 }
コード例 #15
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.layer == LayerMask.NameToLayer("CardEffect"))
        {
            ECard card = other.GetComponentInParent <Card>().GetCardID();

            if (card == ECard.DiamondEffect)
            {
                m_diamondEffectTriggers++;
                m_diamondEffect = true;
            }
            else if (card == ECard.HeartEffect)
            {
                m_heartEffectTriggers++;
                m_heartEffect = true;
            }
        }
    }
コード例 #16
0
    /// <summary>
    /// Tự động pick các card
    /// </summary>
    public void AutoPick()
    {
        List <ECard> listCard = new List <ECard>();

        if (GameModelTLMN.game.ListClickCard.Count == 2)
        {
            List <ECard> listClickCard = new List <ECard>(GameModelTLMN.game.ListClickCard);
            listClickCard.Sort((c1, c2) => c1.CompareTo(c2));
            ECard        cardStart = listClickCard[0], cardEnd = listClickCard[1];
            List <ECard> pickCardOnHand = (from c in GameModelTLMN.YourController.mCardHand where c.CompareTo(cardStart) >= 0 && c.CompareTo(cardEnd) <= 0 select c).ToList <ECard>();
            pickCardOnHand.Sort((c1, c2) => c1.CompareTo(c2));

            listCard = new List <ECard>(GetStaight(pickCardOnHand));

            if (listCard.Count >= 3)
            {
                if (listCard[listCard.Count - 1].parentCard.Suit.Value != cardEnd.parentCard.Suit.Value)
                {
                    listCard.RemoveAt(listCard.Count - 1);
                    listCard.Add(cardEnd);
                }
                if (listCard[0].parentCard.Suit.Value != cardStart.parentCard.Suit.Value)
                {
                    listCard.RemoveAt(0);
                    listCard.Add(cardStart);
                }
            }
            //string str = "";
            //foreach (Card c in listCard)
            //    str += c.parentCard.ToString();
            //Debug.Log(str);
        }

        foreach (TLMNCard c in listCard)
        {
            if (!GameModelTLMN.game.ListClickCard.Contains(c))
            {
                GameModelTLMN.game.CardClick(c);
            }
        }
    }
コード例 #17
0
 //Dính mực rồi (Đánh quân đỏ sau lại ăn chẵn đỏ)
 private bool checkDinhMucRoi(int[] listCardID, PlayerControllerChan currentPlayer)
 {
     if (isFirstRound(currentPlayer))
     {
         if (currentPlayer.mCardDiscarded.Count > 0)
         {
             ECard card = currentPlayer.mCardDiscarded[currentPlayer.mCardDiscarded.Count - 1]; //????
             if (GameUtil.IscardRed(card.CardId))                                               // cây đánh ngay trước là cây đỏ
             {
                 if (listCardID.Length == 2)
                 {
                     if (listCardID[0] == listCardID[1] && GameUtil.IscardRed(listCardID[0]))// ăn chắn đỏ
                     {
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }
コード例 #18
0
    /// <summary>
    /// Khi có người chơi ăn bài
    /// </summary>
    /// <param name="index">Index Người chơi ăn</param>
    /// <param name="indexLast">Index người chơi đánh bài</param>
    public static void StealCard(int index, int indexLast)
    {
        int   indexTrash = GetPlayer(indexLast).mCardTrash.Count - 1;
        ECard card       = GetPlayer(indexLast).mCardTrash[indexTrash];

        card.ChangeSide(index);
        bool isStealCard = SoundGamePhom.Instances.PlaySoundStealCard(GetPlayer(index), GetPlayer(indexLast));


        GetPlayer(indexLast).mCardTrash.RemoveAt(indexTrash);
        GetPlayer(index).mCardHand.Add(card);

        if (YourController.slotServer == index)
        {
            game.canRequestSort = true;
        }
        game.stolen = false;

        game.HideClickCard();
        MiniState = EGameStateMini.discard;

        if (YourController.slotServer == index)
        {
            if (isStealCard)
            {
                game.btSorted.gameObject.AddComponent <UIContainerAnonymous>();
            }
            game.OnClickSort(game.btSorted.gameObject);
        }
        else
        {
            game.UpdateHand(index, 0.5f);
        }

        game.UpdateHand(GameModelPhom.IndexLastInTurn, 0.5f);

        card.UpdateParent(index);
    }
コード例 #19
0
ファイル: PhomCard.cs プロジェクト: wefasdfaew2/GamePortal
 public override int CompareTo(ECard c)
 {
     return(CardId - c.CardId);
 }
コード例 #20
0
    /// <summary>
    /// Thực hiện sau khi người chơi pick lần thứ 2
    /// </summary>
    IEnumerator OnPickDone(ECard card)
    {
        #region THÔNG BÁO VỚI SERVER LÀ ĐÃ THỰC HIỆN XONG BƯỚC 2
        if (!serverRequestUpdateHandStep2 && GameModelChan.YourController != null && GameModelChan.IndexInTurn == GameModelChan.YourController.slotServer)
        {
            int index = Array.FindIndex <GameObject>(listPickObject, obj => obj == card.gameObject);
            GameManager.Server.DoRequestPluginGame(Utility.SetEsObject(Fields.GAMEPLAY.PLAY, new object[] {
                Fields.ACTION, "getHand", "slotChoice", Utility.SetEsObject(null, "donePick", index)
            }));
        }
        #endregion

        #region CHỜ SERVER TRẢ VỀ THÔNG TIN NGƯỜI CHƠI
        while (string.IsNullOrEmpty(firstPlayer) || firstCardServerResponse == -1)
        {
            yield return(new WaitForEndOfFrame());
        }

        pickAfterDealcard.CardId = firstCardServerResponse;
        pickAfterDealcard.gameObject.transform.parent        = card.gameObject.transform.parent;
        pickAfterDealcard.gameObject.transform.localPosition = Vector3.zero;
        pickAfterDealcard.gameObject.SetActive(true);
        pickAfterDealcard.gameObject.transform.localPosition = new Vector3(pickAfterDealcard.gameObject.transform.localPosition.x, pickAfterDealcard.gameObject.transform.localPosition.y, -2f);
        iTween.RotateTo(pickAfterDealcard.gameObject, new Vector3(0f, 0f, 0f), 0.5f);
        yield return(new WaitForSeconds(0.5f));

        #endregion

        List <DealCardRotation> listDealcard = new List <DealCardRotation>();

        #region QUY ĐỊNH VỊ TRÍ SẼ ĐẾN CỦA CÁC MÔ BÀI
        PlayerControllerChan playerFirst = GameModelChan.ListPlayerInGame.Find(p => p.username == firstPlayer);
        DealCardRotation     dealFirst   = DealCardRotation.GetListRotation.Find(d => d.transform.childCount == 2);
        listDealcard.Add(dealFirst);
        dealFirst.StartRotate(playerFirst.mSide);
        PlayerControllerChan nextPlayer = GameModelChan.GetNextPlayer(playerFirst.slotServer);
        DealCardRotation     nextDeal   = dealFirst.GetNextAvalible;
        for (int i = 0; i < GameModelChan.ListPlayerInGame.Count - 1; i++)
        {
            listDealcard.Add(nextDeal);
            nextDeal.StartRotate(nextPlayer.mSide);
            nextPlayer = GameModelChan.GetNextPlayer(nextPlayer.slotServer);
            nextDeal   = nextDeal.GetNextAvalible;
        }
        #endregion

        while (!listDealcard.TrueForAll(d => d.isComplete))
        {
            yield return(new WaitForFixedUpdate());
        }

        #region DI CHUYỂN VỀ VỊ TRÍ CÓ AVATAR
        DealCardRotation.GetListRotation.ForEach(dealCard => {
            if (dealCard.transform.childCount > 0)
            {
                MoveAllChildToTransform(dealCard.transform, GameModelChan.ListPlayerInGame.Find(p => p.mSide == dealCard.sideEnd).cuiPlayer.transform, 0.5f);
            }
        }
                                                 );
        #endregion
        yield return(new WaitForSeconds(0.6f));

        currentStep = StepDealCard.DONE;
        Array.ForEach <GameObject>(listPickObject, obj => GameObject.Destroy(obj));
    }
コード例 #21
0
ファイル: ECard.cs プロジェクト: wefasdfaew2/GamePortal
 public abstract int CompareTo(ECard c);
コード例 #22
0
 public override int CompareTo(ECard c)
 {
     return(RankValue - ((TLMNCard)c).RankValue);
 }
コード例 #23
0
 public bool CanDiscard(ECard card)
 {
     throw new System.NotImplementedException();
 }
コード例 #24
0
    void OnDragCard(DragGesture gesture)
    {
        FingerGestures.Finger finger = gesture.Fingers[0];

        if (!GameModelTLMN.DealCardDone)
        {
            return;
        }

        if (gesture.Phase == ContinuousGesturePhase.Started)
        {
            dragObject = gesture.Selection;

            if (dragObject == null)
            {
                return;
            }
            if (dragObject.GetComponent <ECardTexture>() == null)
            {
                return;
            }
            if (gameObject.GetComponent <iTween>() && gameObject.GetComponent <iTween>().isRunning)
            {
                return;
            }
            //set depth to top
            dragObject.GetComponent <ECardTexture>().texture.depth = 15;
            beginPosition = dragObject.transform.localPosition;
            // Lưu lại ngón đang drag
            dragFingerIndex = finger.Index;
        }
        else if (finger.Index == dragFingerIndex)  //Xử lý drag. Đảm bảo chắc là đối tượng đang kéo là đối tượng bạn đang chọn.
        {
            if (finger.Index != 0)
            {
                return;
            }

            if (gesture.Phase == ContinuousGesturePhase.Updated)
            {
                dragObject.gameObject.transform.position = GetWorldPos(gesture.Position);
            }
            else
            {
                //Thiết lập lại khi kết thúc drag
                dragFingerIndex = -1;
                dragObject.transform.localPosition = beginPosition;

                GameObject obj = gesture.PickObject(gameObject.GetComponent <ScreenRaycaster>(), gesture.Position);

                if (obj == null)
                {
                    return;
                }

                if (obj.name == "MainDesk")
                {
                    if (GameModelTLMN.CanDiscard(new List <ECard>(new ECard[] { dragObject.GetComponent <ECardTexture>().card })))
                    {
                        dragObject.gameObject.transform.position = GetWorldPos(gesture.Position);
                        GameModelTLMN.game.OnDiscard(new List <ECard>(new ECard[] { dragObject.GetComponent <ECardTexture>().card }));
                    }
                }
                else
                {
                    ECard dragCard = dragObject.GetComponent <ECardTexture>().card;
                    bool  isChange = false;
                    if (obj.name == "Hand-Left")
                    {
                        GameModelTLMN.YourController.mCardHand.Remove(dragCard);
                        GameModelTLMN.YourController.mCardHand.Insert(0, dragCard);
                        isChange = true;
                    }
                    else if (obj.name == "Hand-Right")
                    {
                        GameModelTLMN.YourController.mCardHand.Remove(dragCard);
                        GameModelTLMN.YourController.mCardHand.Add(dragCard);
                        isChange = true;
                    }
                    else if (obj.GetComponent <ECardTexture>() != null)
                    {
                        int indexOf     = GameModelTLMN.YourController.mCardHand.IndexOf(GameModelTLMN.YourController.mCardHand.Find(c => c == obj.GetComponent <ECardTexture>().card));
                        int indexOfDrag = GameModelTLMN.YourController.mCardHand.IndexOf(GameModelTLMN.YourController.mCardHand.Find(c => c == dragCard));

                        if (indexOfDrag > indexOf && indexOf + 1 < GameModelTLMN.YourController.mCardHand.Count)
                        {
                            indexOf++;
                        }

                        GameModelTLMN.YourController.mCardHand.Remove(dragCard);
                        GameModelTLMN.YourController.mCardHand.Insert(indexOf, dragCard);
                        isChange = true;
                    }

                    if (isChange)
                    {
                        GameModelTLMN.model.GetCardCollection();
                    }
                }
                GameModelTLMN.game.UpdateHand(GameModelTLMN.YourController.slotServer, 0.5f);
                //Debug.Log(obj.name);
            }
        }
    }
コード例 #25
0
    /// <summary>
    /// Khi có người chơi ăn bài
    /// </summary>
    /// <param name="index">Index Người chơi ăn</param>
    /// <param name="indexLast">Index người chơi đánh bài</param>
    public static void StealCard(int soundId, int index, int indexLast, int[] cardId)
    {
        StealCard stealCard = new StealCard();

        stealCard.player = GetPlayer(index);
        stealCard.steals.Clear();
        #region FIND CARD STEAL
        ECard cardSteal = GetPlayer(indexLast).mCardTrash[GetPlayer(indexLast).mCardTrash.Count - 1];
        GetPlayer(indexLast).mCardTrash.Remove(cardSteal);
        cardSteal.ChangeSide(index);
        stealCard.steals.Add(cardSteal);
        #endregion

        #region FIND CARD STEAL ON HAND
        for (int i = 1; i < cardId.Length; i++)
        {
            ECard cardOnHand = GetPlayer(index).mCardHand.Find(c => c.CardId == cardId[1]);
            if (cardOnHand != null)
            {
                GetPlayer(index).mCardHand.Remove(cardOnHand);
                if (GameModelChan.YourController != null && GameModelChan.YourController.slotServer != index)
                {
                    Debug.LogError("Tìm thấy card trên tay người chơi: " + GetPlayer(index).username);
                }
            }
            else if (cardOnHand == null && (GameModelChan.YourController == null || GameModelChan.YourController.slotServer != index))
            {
                cardOnHand = new ChanCard(index, cardId[1]);
                cardOnHand.Instantiate();
            }
            else
            {
                Debug.LogError("Không tìm thấy card phù hợp!!!");
            }

            stealCard.steals.Add(cardOnHand);
        }
        #endregion

        GetPlayer(index).mCardSteal.Add(stealCard);

        for (int i = 0; i < stealCard.steals.Count; i++)
        {
            stealCard.steals[i].cardTexture.texture.depth = i;
        }

        stealCard.steals.ForEach(c => c.UpdateParent(index));

        MiniState = EGameStateMini.discard;

        if (GameModelChan.YourController != null && YourController.slotServer == index)
        {
            game.OnClickSort(game.btSorted.gameObject);
        }
        else
        {
            game.UpdateHand(index, 0.5f);
        }

        game.UpdateHand(GameModelChan.IndexLastInTurn, 0.5f);
        if (soundId == -1)
        {
            SoundGameplay.Instances.PlaySoundStealCard(cardId, GetPlayer(index), GetLastPlayer(index));
        }
        else
        {
            SoundGameplay.Instances.PlaySoundInGame(soundId, GetPlayer(index));
        }
    }
コード例 #26
0
 public static void GiveCard(int _player, ECard _card)
 {
     m_cards[_player].Add(new CardData(_card));
     UpdateUI(_player);
 }
コード例 #27
0
    /// <summary>
    /// Khi có người chơi đánh bài
    /// </summary>
    /// <param name="index">Người đánh bài</param>
    /// <param name="cardValue">Card đã đánh</param>
    public static void Discard(int soundId, int index, int cardValue, params string[] discardToPlayer)
    {
        ECard card = GetCard_FromHandPlayer(index, cardValue);

        if (GameModelChan.YourController == null || GameModelChan.YourController.slotServer != index)
        {
            card = new ChanCard(index, cardValue);
            card.Instantiate(game.mPlaymat.locationPlayer[(int)GetPlayer(index).mSide]);
            GetPlayer(index).mCardHand.Add(card);
            card.UpdateParent(index);
        }
        GetPlayer(index).mCardDiscardedAndDraw.Add(card);
        GetPlayer(index).mCardDiscarded.Add(card);
        GetPlayer(index).mCardHand.Remove(card);

        if (discardToPlayer != null && discardToPlayer.Length > 0 && discardToPlayer[0] != null)
        {
            PlayerControllerChan p = GetPlayer(discardToPlayer[0]);
            GetPlayer(discardToPlayer[0]).mCardTrash.Add(card);
            card.ChangeSide(p.slotServer);
            card.UpdateParent(p.slotServer);
        }
        else
        {
            GetPlayer(index).mCardTrash.Add(card);
        }



        game.fullLaying = false;

        card.UpdateParent(index);
        if (YourController != null && YourController.slotServer == index)
        {
            game.OnClickSort(game.btSorted.gameObject);
        }
        else
        {
            game.UpdateHand(index, 0.5f);
        }

        if (discardToPlayer != null && discardToPlayer.Length > 0 && discardToPlayer[0] != null)
        {
            game.UpdateHand(GetPlayer(discardToPlayer[0]).slotServer, 0.5f);
        }
        if (discardToPlayer != null && discardToPlayer.Length > 0 && discardToPlayer[0] != null)// co' chiu' tra? cua
        {
            Debug.Log(GameModelChan.GetPlayer(discardToPlayer[0]).username + " PlayerState " + GameModelChan.GetPlayer(index).PlayerState.ToString());

            if (GameModelChan.GetPlayer(discardToPlayer[0]).PlayerState == EPlayerController.EPlayerState.inTurnStealOrIgnore)
            {
                // Chíu cây bốc
                MiniState = EGameStateMini.stealCard_or_skip;
                //SoundGameplay.Instances.playAudioDisCard(cardValue, GetPlayer(index), GetPlayer(discardToPlayer[0]), null);
            }
            else
            {
                // Chíu cây bốc đánh
                MiniState = EGameStateMini.stealCard_or_draw;
                //SoundGameplay.Instances.playAudioDisCard(cardValue, GetPlayer(index), GetNextPlayer(discardToPlayer[0]), null);
            }
        }
        else
        {
            MiniState = EGameStateMini.stealCard_or_draw;
            //SoundGameplay.Instances.playAudioDisCard(cardValue, GetPlayer(index), GetNextPlayer(index), GetLastPlayer(index));
        }
        SoundGameplay.Instances.PlaySoundInGame(soundId, GetPlayer(index));
    }
コード例 #28
0
    /// <summary>
    /// Hiện thông tin, kết quả khi hết trận.
    /// </summary>
    private IEnumerator _FinishGame()
    {
        #region SHOW OTHER HAND
        foreach (PlayerControllerChan p in GameModelChan.ListPlayerInGame)
        {
            if (GameModelChan.YourController != null && p.slotServer == YourController.slotServer)
            {
                continue;
            }

            //Đặt những card ăn vào danh sách card của bản thân (Fix trường hợp có người Ù giữa trận card ăn bị kẹt chèn đè lên)
            p.mCardHand.ForEach(c => { c.originSide = c.currentSide; c.originSlot = c.currentSlot; });

            List <int> lst = new List <int>();
            while (p.summary.inHand.Count > 0)
            {
                if (p.mCardHand.Find(c => c.CardId == p.summary.inHand[0]) == null)
                {
                    lst.Add(p.summary.inHand[0]);
                }
                p.summary.inHand.RemoveAt(0);
            }

            foreach (int _value in lst)
            {
                ECard card = p.mCardHand.Find(c => c.CardId == -1);
                if (card != null)
                {
                    card.CardId = _value;
                }
            }

            p.mCardHand.Sort((c1, c2) => c1.CardId.CompareTo(c2.CardId));
        }
        game.UpdateHand();
        #endregion


        //0.5s cho Start Game mới. O.5s cho Gameplay Process Command Update Hand
        float time = game.TimeCountDown;

        float timeShowPoint = (time - 1) / 3f;
        float timeShowResult = timeShowPoint, timeShowMoney = timeShowPoint;

        MiniState = EGameStateMini.summary_point;
        GameModelChan.game.UpdateUI();
        yield return(new WaitForSeconds(timeShowPoint));

        #region PLAY SOUNDS


        #endregion

        MiniState = EGameStateMini.summary_result;
        GameModelChan.game.UpdateUI();
        yield return(new WaitForSeconds(timeShowResult));

        MiniState = EGameStateMini.summary_exchange;

        //GameModel.game.UpdateUserInfo();

        //GameModel.game.UpdateUI();
        //yield return new WaitForSeconds(timeShowMoney);

        MiniState = EGameStateMini.summary_end;
        GameModelChan.game.UpdateUI();
        yield return(new WaitForSeconds(0.5f));

        //DestroyObject();

        game.lbDiscard.text = "";

        ListResultXuongView.Close();
        game.fullLayingEffect.Destroy();

        GameModelChan.CreateNewGame();

        ListPlayerInGame.ForEach(p =>
        {
            p.warningMessage = "";
            p.Reset();
            p.summary.result = PlayerControllerChan.FinishGame.ResultSprite.None;
        });

        game.IsProcesResonseDone = true;
    }
コード例 #29
0
    /// <summary>
    /// Hiện thông tin, kết quả khi hết trận.
    /// </summary>
    private IEnumerator _FinishGame()
    {
        #region SET RESULT
        if (game.gameFinishType == GamePlayPhom.EFinishType.NORMAL)
        {
            GamePlayPhom.Summary sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.TOP_2);
            if (sum != null)
            {
                GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_NHAT;
                GameModelPhom.GetPlayer(sum.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_NHI;
            }
            else
            {
                if (game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.MOM) != null)
                {
                    GameModelPhom.GetPlayer(game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.MOM).targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_NHAT;
                }
                else if (game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.XAO_KHAN) != null)
                {
                    GamePlayPhom.Summary xaoKhan = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.XAO_KHAN);
                    GameModelPhom.GetPlayer(xaoKhan.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.XAO_KHAN;
                    ListPlayerInGame.ForEach(p =>
                    {
                        if (p.username != xaoKhan.targetPlayer)
                        {
                            p.summary.result = PlayerControllerPhom.FinishGame.ResultSprite.MOM;
                        }
                    });
                }
            }

            sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.TOP_3);
            if (sum != null)
            {
                GameModelPhom.GetPlayer(sum.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_BA;
            }

            sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.TOP_4);
            if (sum != null)
            {
                GameModelPhom.GetPlayer(sum.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.VE_TU;
            }

            List <GamePlayPhom.Summary> lstSum = game.summaryGame.FindAll(o => o.action == GamePlayPhom.Summary.EAction.MOM);
            if (lstSum.Count > 0)
            {
                foreach (GamePlayPhom.Summary s in lstSum)
                {
                    GameModelPhom.GetPlayer(s.sourcePlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.MOM;
                }
            }
        }
        else
        {
            GamePlayPhom.Summary sum;
            if (game.gameFinishType == GamePlayPhom.EFinishType.U_THUONG || game.gameFinishType == GamePlayPhom.EFinishType.U_DEN_THUONG)
            {
                sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.U_THUONG || o.action == GamePlayPhom.Summary.EAction.U_TRON || o.action == GamePlayPhom.Summary.EAction.DEN_LANG);
                if (sum != null)
                {
                    GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.U;
                }
            }
            else if (game.gameFinishType == GamePlayPhom.EFinishType.U_TRON || game.gameFinishType == GamePlayPhom.EFinishType.U_DEN_TRON)
            {
                sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.U_TRON || o.action == GamePlayPhom.Summary.EAction.DEN_LANG);
                if (sum != null)
                {
                    GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.U_TRON;
                }
            }
            else if (game.gameFinishType == GamePlayPhom.EFinishType.U_XUONG)
            {
                sum = game.summaryGame.Find(o => o.action == GamePlayPhom.Summary.EAction.U_XUONG);
                if (sum != null)
                {
                    GameModelPhom.GetPlayer(sum.targetPlayer).summary.result = PlayerControllerPhom.FinishGame.ResultSprite.U_XUONG;
                }
            }
        }
        #endregion

        #region SHOW OTHER HAND
        foreach (PlayerControllerPhom p in GameModelPhom.ListPlayerInGame)
        {
            if (p.slotServer == YourController.slotServer)
            {
                continue;
            }

            //Đặt những card ăn vào danh sách card của bản thân (Fix trường hợp có người Ù giữa trận card ăn bị kẹt chèn đè lên)
            p.mCardHand.ForEach(c => { c.originSide = c.currentSide; c.originSlot = c.currentSlot; });

            List <int> lst = new List <int>();
            while (p.summary.inHand.Count > 0)
            {
                if (p.mCardHand.Find(c => c.CardId == p.summary.inHand[0]) == null)
                {
                    lst.Add(p.summary.inHand[0]);
                }
                p.summary.inHand.RemoveAt(0);
            }

            foreach (int _value in lst)
            {
                ECard card = p.mCardHand.Find(c => c.CardId == -1);
                if (card != null)
                {
                    card.CardId = _value;
                }
            }

            p.mCardHand.Sort((c1, c2) => c1.CardId.CompareTo(c2.CardId));
        }
        game.UpdateHand();
        #endregion

        #region CHUYỂN CÁC QUÂN BÀI THẮNG TRẮNG RA GIỮA MÀN HÌNH
        if (game.gameFinishType != GamePlayPhom.EFinishType.NORMAL && YourController.mCardHand.Count == 0)
        {
            int i = 0;
            YourController.mCardMelds.ForEach(meld =>
            {
                for (int j = 0; j < meld.meld.Count; j++)
                {
                    ECard card = meld.meld[j];
                    card.SetHightlight();
                    Hashtable hash = new Hashtable();
                    hash.Add("islocal", true);
                    hash.Add("time", 0.75f);
                    hash.Add("position", game.mPlaymat.GetLocationFulllaying(YourController, i, j));
                    iTween.MoveTo(card.gameObject, hash);
                    iTween.ScaleTo(card.gameObject, Vector3.one * 1.5f, 0.75f);
                }
                i++;
            });
        }
        #endregion

        //0.5s cho Start Game mới. O.5s cho GamePlayPhom Process Command Update Hand
        float time = game.TimeCountDown;

        float timeShowPoint = (time - 1) / 3f;
        float timeShowResult = timeShowPoint, timeShowMoney = timeShowPoint;

        MiniState = EGameStateMini.summary_point;
        GameModelPhom.game.UpdateUI();
        yield return(new WaitForSeconds(timeShowPoint));

        #region PLAY SOUNDS

        SoundGamePhom.Instances.PlaySound(game);


        #endregion

        MiniState = EGameStateMini.summary_result;
        GameModelPhom.game.UpdateUI();
        yield return(new WaitForSeconds(timeShowResult));

        MiniState = EGameStateMini.summary_exchange;

        GameModelPhom.game.UpdateUserInfo();

        GameModelPhom.game.UpdateUI();
        yield return(new WaitForSeconds(timeShowMoney));

        MiniState = EGameStateMini.summary_end;
        GameModelPhom.game.UpdateUI();
        yield return(new WaitForSeconds(0.5f));

        //DestroyObject();

        game.IsProcesResonseDone = true;
    }