Esempio n. 1
0
    // DealPlayer
    void DealPlayer()
    {
        CardStruct pick = Deck.Pop();

        if (Deck.IsEmpty())
        {
            OnDeckConsumed();
        }

        if (pick != null)
        {
            string     name   = "PlayingCards_" + pick.Symbol + pick.Suit;
            GameObject newObj = GameObject.Find(name);
            if (newObj == null)
            {
                Debug.Log(string.Format("DealPlayer() - Object Not Found: {0}", name));
            }

            Card newCard = newObj.AddComponent(typeof(Card)) as Card;
            newCard.Definition      = pick;
            newObj.transform.parent = Deck.transform;
            PlayerHand = newCard;
            PlayerHand.gameObject.GetComponent <MeshRenderer>().enabled = true;

            newCard.SetFlyTarget(Transform_Deck.position,
                                 Transform_PlayerHand.position,
                                 CardFlipDuration);
        }
        else
        {
            OnDeckConsumed();
        }
    }
Esempio n. 2
0
    void SetCardSprite(CardStruct card)
    {
        string spName = "";

        ENUM_CARD_TYPE  cardType  = (ENUM_CARD_TYPE)card.CardType;
        ENUM_CARD_COLOR cardColor = (ENUM_CARD_COLOR)card.CardColor;

        switch (cardType)
        {
        case ENUM_CARD_TYPE.NONE:
            break;

        case ENUM_CARD_TYPE.NUMBER:
        case ENUM_CARD_TYPE.STOP:
        case ENUM_CARD_TYPE.FLIP:
        case ENUM_CARD_TYPE.DRAW2:
            spName = Utils.GetCardTypeNameWithType(cardType) + "_" + Utils.GetColorNameWithType(cardColor);
            break;

        case ENUM_CARD_TYPE.WILD:
        case ENUM_CARD_TYPE.WILD_DRAW4:
            spName = Utils.GetCardTypeNameWithType(cardType);
            break;

        default:
            break;
        }
        _bg.spriteName = spName;
    }
Esempio n. 3
0
        public async Task <CardModel> CreateCard()
        {
            var       newCardId = Guid.NewGuid();
            CardModel cardModel = null;

            var mDict = await StateManager.GetOrAddAsync <IReliableDictionary <Guid, CardStruct> >(_cardDictName);

            using (var tx = StateManager.CreateTransaction())
            {
                while (await mDict.ContainsKeyAsync(tx, newCardId))
                {
                    newCardId = Guid.NewGuid();
                }

                var cardStruct = new CardStruct
                {
                    Id    = newCardId,
                    Value = 0.0m
                };

                await mDict.AddAsync(tx, newCardId, cardStruct);

                cardModel = StructToModel(cardStruct);

                // If an exception is thrown before calling CommitAsync, the transaction aborts, all changes are
                // discarded, and nothing is saved to the secondary replicas.
                await tx.CommitAsync();
            }

            return(cardModel);
        }
Esempio n. 4
0
    void ServerPlayCards()
    {
        if (PlayCards.Count > 0)
        {
            for (int i = 0; i < PlayCards.Count; i++)
            {
                CardStruct card = PlayCards[i];

                for (int j = 0; j < HaveCards.Count; j++)
                {
                    CardStruct playCard = HaveCards[j];
                    if (playCard.UID == card.UID)
                    {
                        HaveCards.RemoveAt(j);

                        NetworkGameMgr.Instance.PlayCard(playCard);

                        //更新牌桌上的显示
                        NetworkGameMgr.Instance.MyCardsMgr.Rpc_UpdateCardToTable(playCard);
                    }
                }
            }
            //更新卡牌显示
            Rpc_SetCardsNumb(HaveCards.Count);

            NetworkGameMgr.Instance.MyCardsMgr.Rpc_UpdateCardNumbers();

            //更新下一个可行动的玩家
            NetworkGameMgr.Instance.UpdateCurPlayerIndex();
        }
    }
Esempio n. 5
0
 private static CardModel StructToModel(CardStruct @struct)
 {
     return(new CardModel
     {
         Id = @struct.Id,
         Value = @struct.Value
     });
 }
Esempio n. 6
0
 public void AddCard(SyncListCardItem cardList)
 {
     for (int i = 0; i < cardList.Count; i++)
     {
         CardStruct card = cardList[i];
         AddCard(card);
     }
 }
Esempio n. 7
0
    public void CreateFirstCard()
    {
        //创建首牌
        CardStruct firstCard = GetCard(true);

        LastCard           = firstCard;
        LastCard.HasEffect = false;
        //牌桌上显示第一张牌
        Rpc_UpdateCardToTable(LastCard);
    }
Esempio n. 8
0
    public void PlayCard(CardStruct playCard)
    {
        CloseCardList.Add(playCard);

        if (LastCard.HasEffect)
        {
            switch ((ENUM_CARD_TYPE)LastCard.CardType)
            {
            case ENUM_CARD_TYPE.NONE:
                break;

            case ENUM_CARD_TYPE.NUMBER:
                break;

            case ENUM_CARD_TYPE.STOP:
                NetworkGameMgr.Instance.UpdateCurPlayerIndex();
                break;

            case ENUM_CARD_TYPE.FLIP:
                NetworkGameMgr.Instance.IsClockWise = !NetworkGameMgr.Instance.IsClockWise;
                break;

            case ENUM_CARD_TYPE.DRAW2:
            {
                //禁止下家出牌
                NetworkGameMgr.Instance.UpdateCurPlayerIndex();
                //下家摸2张牌
                NetworkGameMgr.Instance.NextPlayerGetCards(2);
            }
            break;

            case ENUM_CARD_TYPE.WILD:
            {
                //变色
            }
            break;

            case ENUM_CARD_TYPE.WILD_DRAW4:
            {
                //禁止下家出牌
                NetworkGameMgr.Instance.UpdateCurPlayerIndex();
                //下家摸4张牌
                NetworkGameMgr.Instance.NextPlayerGetCards(4);
            }
            break;

            default:
                break;
            }
        }

        //更新上一张牌
        LastCard = playCard;
    }
Esempio n. 9
0
    public override bool Execute()
    {
        for (int i = _cardsMgr.CloseCardList.Count - 1; i >= 0; i--)
        {
            CardStruct card = _cardsMgr.CloseCardList[i];
            _cardsMgr.CloseCardList.Remove(card);
            _cardsMgr.OpenCardList.Add(card);
        }

        return(base.Execute());
    }
Esempio n. 10
0
    public void RemoveCard(CardStruct card)
    {
        UICard uicard = _cardsList.Find(a => a.UID == card.UID);

        if (uicard != null)
        {
            _cardsList.Remove(uicard);
            Destroy(uicard.gameObject);
            _grid.enabled = true;
        }
    }
Esempio n. 11
0
 public void ShowCardInfo(CardStruct card)
 {
     // this.isPlayer = isPlayer;
     HideObj.SetActive(false);
     this.card             = card;
     this.logo.sprite      = card.logo;
     logo.preserveAspect   = true;
     this.name.text        = card.name;
     this.description.text = card.description;
     this.cost.text        = card.cost.ToString();
     this.number.text      = card.number.ToString();
 }
Esempio n. 12
0
        private Guid AddNewCard(Guid?id = null, decimal?value = null)
        {
            var card = new CardStruct
            {
                Id    = id ?? Guid.NewGuid(),
                Value = value ?? 0.0m
            };

            _cardDict.Add(card.Id, card);

            return(card.Id);
        }
Esempio n. 13
0
    public CardStruct Pop()
    {
        int last = liveCards.Count - 1;

        if (last >= 0)
        {
            CardStruct result = liveCards[last];
            liveCards.RemoveAt(last);
            return(result);
        }
        return(null);
    }
Esempio n. 14
0
 public void Shuffle()
 {
     for (int i = 0; i < liveCards.Count; ++i)
     {
         int other = Random.Range(0, liveCards.Count);
         if (other != i)
         {
             CardStruct swap = liveCards[i];
             liveCards[i]     = liveCards[other];
             liveCards[other] = swap;
         }
     }
 }
Esempio n. 15
0
 public void RemoveCard_toPlayCards(CardStruct card)
 {
     for (int i = 0; i < PlayCards.Count; i++)
     {
         CardStruct item = PlayCards[i];
         if (item.UID == card.UID)
         {
             PlayCards.RemoveAt(i);
             MyUIMain.SetLabelChooseCards(PlayCards.Count);
             return;
         }
     }
 }
Esempio n. 16
0
    public void server_AddCard(List <CardStruct> cards)
    {
        Debug.Log("cards count:" + cards.Count);
        //摸牌
        for (int i = 0; i < cards.Count; i++)
        {
            CardStruct card = cards[i];
            HaveCards.Add(card);
            AddCards.Add(card);
        }

        Rpc_AddCard();
    }
Esempio n. 17
0
    public List <CardStruct> GetCards(uint numb)
    {
        List <CardStruct> getCardList = new List <CardStruct>();

        for (int i = 0; i < numb; i++)
        {
            CardStruct card = OpenCardList[OpenCardList.Count - 1];
            OpenCardList.Remove(card);
            CloseCardList.Add(card);
            getCardList.Add(card);
        }
        Rpc_UpdateCardNumbers();
        return(getCardList);
    }
Esempio n. 18
0
    public void AddCard(CardStruct card)
    {
        GameObject go = GameObject.Instantiate(ResUICard) as GameObject;

        go.SetActive(true);
        _grid.AddChild(go.transform);
        go.transform.localScale = Vector3.one;
        UICard uicard = go.GetComponent <UICard>();

        uicard.Init(card);
        _cardsList.Add(uicard);

        _grid.Reposition();
    }
Esempio n. 19
0
    public void AddCard_toPlayCards(CardStruct card)
    {
        for (int i = 0; i < PlayCards.Count; i++)
        {
            CardStruct item = PlayCards[i];
            if (item.UID == card.UID)
            {
                return;
            }
        }

        PlayCards.Add(card);

        MyUIMain.SetLabelChooseCards(PlayCards.Count);
    }
Esempio n. 20
0
    private void addCardToField(ISFSObject card)
    {
        GameObject cardGo = Instantiate(CardPref, PlayerField, false);

        fieldTMPInst.Add(cardGo);

        CardStruct tmpCard = new CardStruct(card.GetText("Name"),
                                            card.GetText("Description"),
                                            "Sprites/Cards/" + card.GetText("ImageId"),
                                            card.GetInt("Cost"),
                                            10, card.GetText("Type"),
                                            card.GetInt("Money"), card.GetInt("Action"), card.GetInt("Buy"));

        cardGo.GetComponent <CardInfo>().ShowCardInfo(tmpCard);
    }
Esempio n. 21
0
    public void InitCard(CardStruct card)
    {
        UID       = card.UID;
        _cardNumb = card.CardNumber;

        SetCardSprite(card);

        if ((ENUM_CARD_TYPE)card.CardType == ENUM_CARD_TYPE.NUMBER)
        {
            _label.text = card.CardNumber.ToString();
        }
        else
        {
            _label.text = "";
        }

        _sp_choose.gameObject.SetActive(isChoose);
    }
Esempio n. 22
0
    /// <summary>
    /// 能否出牌
    /// </summary>
    /// <param name="playCards">当前牌组</param>
    /// <param name="lastCard">上一张牌</param>
    /// <param name="isLastOne">是否是最后一张牌</param>
    /// <returns></returns>
    public static bool IsPlayWithCards(SyncListCardItem playCards, CardStruct lastCard, bool isLastOne)
    {
        if (playCards == null || playCards.Count == 0)
        {
            return(false);
        }

        for (int i = 0; i < playCards.Count; i++)
        {
            CardStruct curCard = playCards[i];
            if (!IsPlayWithCard(curCard, lastCard, isLastOne))
            {
                return(false);
            }
        }

        return(true);
    }
Esempio n. 23
0
    public void StartGame(ISFSArray cards, List <GameObject> prefabCards)
    {
        Debug.Log("Getting cards number: " + cards.Count);

        for (int i = 0; i < cards.Count && i < 10; i++)
        {
            CardStruct card = new CardStruct(cards.GetSFSObject(i).GetText("Name"),
                                             cards.GetSFSObject(i).GetText("Description"),
                                             "Sprites/Cards/" + cards.GetSFSObject(i).GetText("ImageId"),
                                             cards.GetSFSObject(i).GetInt("Cost"),
                                             10, cards.GetSFSObject(i).GetText("Type"),
                                             cards.GetSFSObject(i).GetInt("Money"),
                                             cards.GetSFSObject(i).GetInt("Action"),
                                             cards.GetSFSObject(i).GetInt("Buy"));

            this.prefabCards.Add(prefabCards[i]);
            prefabCards[i].GetComponent <CardInfo>().ShowCardInfo(card);
        }
    }
Esempio n. 24
0
    public void Init(CardStruct card)
    {
        InitCard(card);

        UIEventListener.Get(_bg.gameObject).onClick = (go) =>
        {
            if (isChoose)
            {
                Utils.ClientLocalPlayer().RemoveCard_toPlayCards(card);
                isChoose = !isChoose;
            }
            else
            {
                Utils.ClientLocalPlayer().AddCard_toPlayCards(card);
                isChoose = !isChoose;
            }
            _sp_choose.gameObject.SetActive(isChoose);
        };
    }
Esempio n. 25
0
    public CardStruct GetCard(bool isWild = false)
    {
        int randIndex = UnityEngine.Random.Range(0, OpenCardList.Count - 1);

        CardStruct card = OpenCardList[randIndex];

        if (isWild)
        {
            if ((ENUM_CARD_TYPE)card.CardType == ENUM_CARD_TYPE.WILD_DRAW4 || (ENUM_CARD_TYPE)card.CardType == ENUM_CARD_TYPE.WILD)
            {
                return(GetCard(isWild));
            }
        }

        OpenCardList.Remove(card);
        CloseCardList.Add(card);

        Rpc_UpdateCardNumbers();
        return(card);
    }
Esempio n. 26
0
 public void HideInfoCard(CardStruct card)
 {
     this.card = card;
     HideObj.SetActive(true);
     isPlayer = false;
 }
Esempio n. 27
0
 public void Rpc_UpdateCardToTable(CardStruct playCard)
 {
     NetworkGameMgr.Instance.MyUIMain._UICardsTable.PlayCard(playCard);
 }
 public void Server_AddCard(CardStruct cards)
 {
     //摸牌
     HaveCards.Add(cards);
 }
Esempio n. 29
0
    /// <summary>
    /// 是否能出牌
    /// </summary>
    /// <param name="curCard">当前牌</param>
    /// <param name="lastCard">上一张牌</param>
    /// <param name="isLastOne">是否是最后一张牌</param>
    /// <returns></returns>
    public static bool IsPlayWithCard(CardStruct curCard, CardStruct lastCard, bool isLastOne)
    {
        if (lastCard.HasEffect == true)
        {
            switch ((ENUM_CARD_TYPE)lastCard.CardType)
            {
            case ENUM_CARD_TYPE.NONE:
                break;

            case ENUM_CARD_TYPE.NUMBER:
            {
                if (curCard.CardColor == lastCard.CardColor ||
                    (ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD ||
                    (ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD_DRAW4
                    )
                {
                    return(true);
                }
            }
            break;

            case ENUM_CARD_TYPE.STOP:
            {
                if ((ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.STOP)
                {
                    return(true);
                }
            }
            break;

            case ENUM_CARD_TYPE.FLIP:
                return(false);

                break;

            case ENUM_CARD_TYPE.DRAW2:
            {
                if ((ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.DRAW2)
                {
                    return(true);
                }
            }
            break;

            case ENUM_CARD_TYPE.WILD:
            {
                if (curCard.CardColor == lastCard.CardColor ||
                    (ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD ||
                    (ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD_DRAW4
                    )
                {
                    if (((ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD || (ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD_DRAW4) && isLastOne)
                    {
                        return(false);
                    }
                    return(true);
                }
            }
            break;

            case ENUM_CARD_TYPE.WILD_DRAW4:
            {
                if ((ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD_DRAW4 && !isLastOne)
                {
                    return(true);
                }
            }
            break;

            default:
                break;
            }
        }
        else
        {
            if (curCard.CardColor == lastCard.CardColor ||
                curCard.CardNumber == lastCard.CardNumber ||
                (ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD ||
                (ENUM_CARD_TYPE)curCard.CardType == ENUM_CARD_TYPE.WILD_DRAW4
                )
            {
                return(true);
            }
        }

        return(false);
    }
Esempio n. 30
0
    void Update()
    {
        switch (process)
        {
        case Process.waitLogin:
            foreach (Player pl in allPlayer)
            {
                pl.SysMsg = "等待玩家連線...目前人數:" + allPlayer.Count;
            }

            break;

        case Process.shuffle:



            foreach (Player pl in allPlayer)
            {
                pl.SysMsg = "遊戲開始 開始發牌";
            }



            // 重製卡牌
            for (int i = 0; i < NUMBER_OF_CARDS; i++)
            {
                Cards[i] = i;
            }

            // 進行洗牌
            for (int i = 0; i < NUMBER_OF_CARDS; i++)
            {
                int swap_index = UnityEngine.Random.Range(0, 51);
                int t          = Cards[i];
                Cards[i]          = Cards[swap_index];
                Cards[swap_index] = t;
            }

            // 建立牌庫

            for (int i = 0; i < NUMBER_OF_CARDS; i++)
            {
                CardStruct card = new CardStruct();
                card.UID = Cards[i];
                CardList.Add(card);
            }

            //建立牌庫並發牌
            for (int i = 0; i < 13; i++)
            {
                allPlayer[0].Server_AddCard(CardList.GetItem(i));
                allPlayer[1].Server_AddCard(CardList.GetItem(13 + i));
                allPlayer[2].Server_AddCard(CardList.GetItem(26 + i));
                allPlayer[3].Server_AddCard(CardList.GetItem(39 + i));
            }


            allPlayer[0].IsGameStart = true;
            allPlayer[1].IsGameStart = true;
            allPlayer[2].IsGameStart = true;
            allPlayer[3].IsGameStart = true;

            process = Process.decidePlayer;

            break;

        case Process.decidePlayer:

            foreach (Player pl in allPlayer)
            {
                pl.SysMsg = "等待時間 準備開始 尋找梅花3玩家";
            }

            Load();

            for (int i = 0; i < NUMBER_OF_CARDS / 4; i++)
            {
                if (allPlayer[0].HaveCards.GetItem(i).UID == 8)
                {
                    process = Process.p1Action;
                }
                else if (allPlayer[1].HaveCards.GetItem(i).UID == 8)
                {
                    process = Process.p2Action;
                }
                else if (allPlayer[2].HaveCards.GetItem(i).UID == 8)
                {
                    process = Process.p3Action;
                }
                else if (allPlayer[3].HaveCards.GetItem(i).UID == 8)
                {
                    process = Process.p4Action;
                }
            }
            break;

        case Process.p1Action:
            allPlayer[0].SysMsg = "輪到你了!";
            allPlayer[0].SetProcess(Player.Process.action);
            allPlayer[1].SysMsg = "等待對方...";
            allPlayer[1].SetProcess(Player.Process.wait);
            allPlayer[2].SysMsg = "等待對方...";
            allPlayer[2].SetProcess(Player.Process.wait);
            allPlayer[3].SysMsg = "等待對方...";
            allPlayer[3].SetProcess(Player.Process.wait);
            break;

        case Process.p2Action:
            allPlayer[1].SysMsg = "輪到你了!";
            allPlayer[1].SetProcess(Player.Process.action);
            allPlayer[0].SysMsg = "等待對方...";
            allPlayer[0].SetProcess(Player.Process.wait);
            allPlayer[2].SysMsg = "等待對方...";
            allPlayer[2].SetProcess(Player.Process.wait);
            allPlayer[3].SysMsg = "等待對方...";
            allPlayer[3].SetProcess(Player.Process.wait);
            break;

        case Process.p3Action:
            allPlayer[2].SysMsg = "輪到你了!";
            allPlayer[2].SetProcess(Player.Process.action);
            allPlayer[0].SysMsg = "等待對方...";
            allPlayer[0].SetProcess(Player.Process.wait);
            allPlayer[1].SysMsg = "等待對方...";
            allPlayer[1].SetProcess(Player.Process.wait);
            allPlayer[2].SysMsg = "等待對方...";
            allPlayer[2].SetProcess(Player.Process.wait);
            break;

        case Process.p4Action:
            allPlayer[3].SysMsg = "輪到你了!";
            allPlayer[3].SetProcess(Player.Process.action);
            allPlayer[1].SysMsg = "等待對方...";
            allPlayer[1].SetProcess(Player.Process.wait);
            allPlayer[2].SysMsg = "等待對方...";
            allPlayer[2].SetProcess(Player.Process.wait);
            allPlayer[0].SysMsg = "等待對方...";
            allPlayer[0].SetProcess(Player.Process.wait);
            break;

        case Process.checkWin:
            switch (round)
            {
            case Round.player1:
                allPlayer[0].SysMsg = "Winner";
                allPlayer[1].SysMsg = "Loser";
                break;

            case Round.player2:
                allPlayer[1].SysMsg = "Winner";
                allPlayer[0].SysMsg = "Loser";
                break;
            }
            allPlayer[0].SetProcess(Player.Process.end);
            allPlayer[1].SetProcess(Player.Process.end);
            process = Process.end;
            break;
        }
    }