Пример #1
0
        private void CreateCards()
        {
            Program.Log("开始洗牌");
            cards = new Selection[3];
            for (int i = 0; i <= 2; i++)
            {
                cards[i] = new Selection();
            }
            baseCard = new Selection();
            Selection Full = new Selection();

            for (Card.Color i = Card.Color.Hongtao; i <= Card.Color.Meihua; i++)
            {
                for (Card.Value j = Card.Value.Three; j <= Card.Value.Two; j++)
                {
                    Full.Add(new Card(i, j));
                }
            }
            Full.Add(new Card(Card.Color.Joker, Card.Value.Grey));
            Full.Add(new Card(Card.Color.Joker, Card.Value.Red));
            Reshuffle(ref Full);
            cards[0].AddRange(Full.GetRange(0, CARDS_PER_PERSON));
            cards[1].AddRange(Full.GetRange(CARDS_PER_PERSON, CARDS_PER_PERSON));
            cards[2].AddRange(Full.GetRange(CARDS_PER_PERSON * 2, CARDS_PER_PERSON));
            //Debug.Assert(cards[0] is Selection);
            baseCard.AddRange(Full.GetRange(CARDS_PER_PERSON * 3, 3));
            Program.Log("洗牌结束");
        }
Пример #2
0
        public bool HasColorInHand([PexAssumeUnderTest] Player target, Card.Color color)
        {
            bool result = target.HasColorInHand(color);

            return(result);
            // TODO: add assertions to method PlayerTest.HasColorInHand(Player, Color)
        }
Пример #3
0
 public bool HasColorInHand(Card.Color color)
 {
     foreach (Card card in cards)
     {
         if (card.GetColor() == color)
         {
             return(true);
         }
     }
     return(false);
 }
Пример #4
0
 private Card.Atout BidTypeToAtout(Card.Color color)
 {
     if (bid.bidType == BidManager.Atout.SA || bid.bidType == BidManager.Atout.TA)
     {
         return((Card.Atout)bid.bidType);
     }
     if (((Card.Color)bid.bidType - 2) == color)
     {
         return(Card.Atout.Atout);
     }
     return(Card.Atout.Normal);
 }
Пример #5
0
        /// <summary>
        /// Skapar en kortlek ifrån grunden med alla fyra "färger".
        /// </summary>
        public void Create()
        {
            for (int i = 0; i < 4; i++)
            {
                Card.Color color = (Card.Color)i;

                for (int y = 2; y <= 14; y++)
                {
                    Card card = new Card();
                    card.color  = color;
                    card.number = y;
                    cards.Add(card);
                }
            }
        }
Пример #6
0
    public void SelectTarget(Card.Color color, Color white, Color black, int cardIndex)
    {
        _shower.gameObject.SetActive(false);

        Color cardColor = (color == Card.Color.White)? white : black;
        Color inverse   = (cardColor == white)? black : white;

        foreach (var button in _buttons)
        {
            ColorBlock block = button.colors;
            block.normalColor      = cardColor;
            block.highlightedColor = cardColor;
            block.disabledColor    = cardColor;
            block.pressedColor     = cardColor;
            button.colors          = block;
        }
        foreach (var text in _texts)
        {
            text.color = inverse;
        }
        _targetIndex            = cardIndex;
        _rectTransform.position = _visiblePos.position;
    }
Пример #7
0
 public Game()
 {
     Deck      = new List <Card>();
     Players   = new List <Player>();
     Bidding   = new Bidding();
     Carpet    = new Carpet();
     CurPlayer = 0;
     CurStep   = Message.Steps.GAME;
     Round     = 0;
     MaxPlayer = 4;
     MaxRound  = 8;
     CountPlay = 0;
     for (Card.Color j = Card.Color.SPADE; j <= Card.Color.DIAMOND; j++)
     {
         for (Card.Number i = Card.Number.SEVEN; i <= Card.Number.ACE; i++)
         {
             Card card = new Card(i, j, 0);
             Deck.Add(card);
         }
     }
     Shuffle();
     Bidding.Reset();
     Carpet.Clear();
 }
Пример #8
0
    //Same concept of the drop area but slightly different behaviour. TO DO Repetition (Refactor by combining his and the other into a single function like for translate in gameController)
    public void OnDrop(PointerEventData eventData)
    {
        Card card = eventData.pointerDrag.GetComponent <Card>();

        if (card != null)
        {
            if ((thisColor != card.thisColor && card.value == currentValue - 1)) //Change it to only allow when there are not covered cards
            {
                GameController.moves         += 1;
                gameController.MovesText.text = GameController.moves.ToString();

                //Here get the reference to the previous parent and if it's a tablepile update the value. if it's the discard pile update that
                if (card.parentToReturnTo.gameObject.tag == "FrontPile")
                {
                    //Getting references to the flipped and front list of its previous tablePile
                    TablePilesDrop    oldPile             = card.parentToReturnTo.gameObject.GetComponent <TablePilesDrop>();
                    FlippedTablePiles oldFlippedTablePile = oldPile.gameObject.GetComponentInParent <FlippedTablePiles>();
                    oldPile.thisPileList.Remove(card.gameObject);

                    Transform draggingItemTransform = card.gameObject.transform.parent;
                    card.parentToReturnTo = this.transform; //On drop fires before end drag so I can override Parent to return to
                    Card lastCard = card;
                    thisPileList.Add(card.gameObject);

                    //You can also use the old table pile list insted of the children of the dragging item (cleaner, change later)
                    if (draggingItemTransform.childCount > 1)
                    {
                        for (int i = 1; i < draggingItemTransform.childCount; ++i)
                        {
                            draggingItemTransform.GetChild(i).gameObject.GetComponent <Card>().parentToReturnTo = this.transform;
                            lastCard = draggingItemTransform.GetChild(i).gameObject.GetComponent <Card>();
                            oldPile.thisPileList.Remove(lastCard.gameObject);
                            thisPileList.Add(lastCard.gameObject);
                        }
                    }

                    currentValue = lastCard.value;
                    thisColor    = lastCard.thisColor;
                    thisSeme     = lastCard.thisSeme;

                    if (oldPile.thisPileList.Count == 0) //If the front list has 0 cards
                    {
                        //Check if the back cards have any cards left
                        if (oldFlippedTablePile.gameObject.transform.childCount > 1)
                        {
                            GameController.score         += 5;
                            gameController.ScoreText.text = GameController.score.ToString();

                            Card lastFlippedCard = oldFlippedTablePile.thisFlippedPileList[oldFlippedTablePile.thisFlippedPileList.Count - 1].GetComponent <Card>();
                            Debug.Log("Last Flipped Card: " + lastFlippedCard.gameObject);
                            oldPile.currentValue = lastFlippedCard.value;
                            oldPile.thisColor    = lastFlippedCard.thisColor;
                            oldPile.thisSeme     = lastFlippedCard.thisSeme;

                            oldFlippedTablePile.thisFlippedPileList.Remove(lastFlippedCard.gameObject);
                            oldPile.thisPileList.Add(lastFlippedCard.gameObject);
                            lastFlippedCard.gameObject.transform.SetParent(oldPile.gameObject.transform);
                            lastFlippedCard.parentToReturnTo = oldPile.gameObject.transform;
                            StartCoroutine(lastFlippedCard.FlippingBackCardAnimation(lastFlippedCard.gameObject.transform, new Vector3(0, -180, 0), 0.5f));
                        }
                        else
                        {
                            oldPile.currentValue = 14;
                            oldPile.thisColor    = Card.Color.NEUTRAL_COLOR;
                            oldPile.thisSeme     = Card.Seme.NEUTRAL_SEME;
                        }
                    }
                    //Give the same value of the next card in the list
                    else if (oldPile.thisPileList.Count != 0)
                    {
                        Card nextCardInList = oldPile.thisPileList[oldPile.thisPileList.Count - 1].GetComponent <Card>();
                        oldPile.currentValue = nextCardInList.value;
                        oldPile.thisColor    = nextCardInList.thisColor;;
                        oldPile.thisSeme     = nextCardInList.thisSeme;
                    }
                }

                //If the card comes from a discard Pile
                else if (card.parentToReturnTo.gameObject.tag == "DiscardPile")
                {
                    GameController.score         += 5;
                    gameController.ScoreText.text = GameController.score.ToString();

                    card.parentToReturnTo = this.transform;
                    currentValue          = card.value;
                    thisColor             = card.thisColor;
                    thisSeme = card.thisSeme;
                    thisPileList.Add(card.gameObject);

                    //Here Update the Discard Pile
                    discardPile.GetComponent <DiscardPile>().discardPileList.Remove(card.gameObject);
                }

                else if (card.parentToReturnTo.gameObject.tag == "DropArea")
                {
                    GameController.score -= 15;
                    if (GameController.score < 0)
                    {
                        GameController.score = 0;
                    }
                    gameController.ScoreText.text = GameController.score.ToString();

                    //Here Update the DropArea
                    card.parentToReturnTo.gameObject.GetComponent <DropZone>().thisDropZoneList.RemoveAt(0);
                    card.parentToReturnTo.gameObject.GetComponent <DropZone>().currentValue -= 1;
                    card.parentToReturnTo = this.transform;
                    currentValue          = card.value;
                    thisColor             = card.thisColor;
                    thisSeme = card.thisSeme;
                    thisPileList.Add(card.gameObject);
                }
            }
        }
    }
Пример #9
0
    //多色カードの色のフェードについて最初の色を返す
    public static Card.Color GetStartColor(Card _card)
    {
        Card.Color re = Card.Color.size;

        for (int i = 0; i < (int)Card.Color.size; ++i)
        {
            if (_card.GetColor()[i] > 0)
            {
                if (_card.GetColor()[(i + (int)Card.Color.size - 1) % (int)Card.Color.size] == 0)
                {
                    var a = new List <int>();    //上から数える
                    var b = new List <int>();    //下から数える
                    for (int j = 0; j < (int)Card.Color.size; ++j)
                    {
                        a.Add(0);
                        b.Add(0);
                        for (int k = 0; k < (int)Card.Color.size; ++k)
                        {
                            if (_card.GetColor()[(i + j + k + (int)Card.Color.size)
                                                 % (int)Card.Color.size] > 0)
                            {
                                ++a[a.Count - 1];
                            }
                            else
                            {
                                break;
                            }
                        }
                        for (int k = 1; k <= (int)Card.Color.size; ++k)
                        {
                            if (_card.GetColor()[(i + j - k + (int)Card.Color.size)
                                                 % (int)Card.Color.size] == 0)
                            {
                                ++b[b.Count - 1];
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                    bool flag = true;
                    for (int j = 0; j < a.Count; ++j)
                    {
                        if (a[0] < a[j])
                        {
                            flag = false; break;
                        }
                        if (b[0] < b[j])
                        {
                            flag = false; break;
                        }
                    }
                    if (!flag)
                    {
                        //1011000 1100010
                        //1011100 1110010
                        //この2つについてはスタート地点を割り出せなかった
                        //ので手動で計算する
                        //共に←を採用(後ろの0が多くなるものを採用)
                        if ((a[0] == 1 && a[2] == 2 && a[5] == 0 &&
                             b[0] == 3 && b[4] == 0 && b[5] == 1) ||
                            (a[0] == 1 && a[2] == 3 && b[0] == 2 &&
                             b[3] == 0 && b[4] == 0 && b[5] == 1))
                        {
                            flag = true;
                        }
                    }
                    if (flag)
                    {
                        re = (Card.Color)i; break;
                    }
                }
            }
        }
        return(re);
    }
Пример #10
0
    //カードの色のエフェクト
    public void ColorEffect()
    {
        --colorFrame;

        //色が決まってないなら色を決める
        if (colorPeriod == 0)
        {
            colorFrame = -1;
            colorFrom  = GetStartColor(card);
        }

        //frameが0なら次の色を決める
        if (colorFrame < 0)
        {
            colorFrom = colorTo;
            int colorHave = 0;
            for (int i = 0; i < (int)Card.Color.size; ++i)
            {
                if (card.GetColor()[(i + 1 + (int)colorFrom) % (int)Card.Color.size] > 0)
                {
                    colorTo = (Card.Color)((i + 1 + (int)colorFrom) % (int)Card.Color.size);
                    ++colorHave; break;
                }
            }
            if (colorHave == 0)
            {
                colorTo = Card.Color.size; ++colorHave;
            }
            if (colorHave == 1)
            {
                colorFrame  = colorPeriodAdd;
                colorPeriod = colorPeriodAdd;
            }
            else
            {
                colorFrame             = colorPeriod
                                       = (colorPeriodMin + (colorHave - 2)
                                          * colorPeriodAdd) / (colorHave - 1);
            }
        }

        //確定した色で塗る
        for (int i = 0; i < (int)ColorMaterial.size; ++i)
        {
            SpriteRenderer spriteRenderer;
            GameObject     gameObject = null;

            switch ((ColorMaterial)i)
            {
            case ColorMaterial.frame: gameObject = child_frame; break;

            case ColorMaterial.name: gameObject = child_namePane; break;

            case ColorMaterial.cost: gameObject = child_stateView[(int)Card.State.cost]; break;

            case ColorMaterial.power: gameObject = child_stateView[(int)Card.State.power]; break;

            case ColorMaterial.toughness: gameObject = child_stateView[(int)Card.State.toughness]; break;
            }

            spriteRenderer = gameObject.GetComponent <SpriteRenderer>();
            spriteRenderer.material.SetColor("_EmissionColor",
                                             Utility.GetRatio(colorList[(int)colorFrom][i], colorList[(int)colorTo][i],
                                                              (Mathf.Cos(Mathf.PI * (float)colorFrame / colorPeriod) + 1f)) / 2f);
        }
    }
Пример #11
0
    //       } else {
    //           if (isClearing) {
    //               view_frame = view_period;
    //               isClearing = false;

    //           }
    //       }
    //   }

    //色の決定
    void ViewFadeColor()
    {
        //       if (view_frame == view_period - 1 && !isClearing) {

        //最初の色を決定
        if (!isClearing)
        {
            colorFrame = -1;
            colorFrom  = CardObj.GetStartColor(card);
        }

        //次の色を決定
        if (colorFrame < 0)
        {
            colorFrom = colorTo;
            int colorHave = 0;
            for (int i = 0; i < (int)Card.Color.size; ++i)
            {
                if (card.color[(i + 1 + (int)colorFrom) % (int)Card.Color.size] > 0)
                {
                    colorTo = (Card.Color)((i + 1 + (int)colorFrom)
                                           % (int)Card.Color.size);
                    ++colorHave; break;
                }
            }
            if (colorHave == 0)
            {
                colorTo = Card.Color.size; ++colorHave;
            }
            if (colorHave == 1)
            {
                colorFrame  = colorPeriodAdd;
                colorPeriod = colorPeriodAdd;
            }
            else
            {
                colorFrame             = colorPeriod
                                       = (colorPeriodMin + (colorHave - 2)
                                          * colorPeriodAdd) / (colorHave - 1);
            }
        }

        //色を確定させて塗る
        if (colorFrom != colorTo || !isClearing)
        {
            for (int i = 0; i < (int)CardObj.ColorMaterial.size; ++i)
            {
                Card.State iState = 0;
                switch ((CardObj.ColorMaterial)i)
                {
                case CardObj.ColorMaterial.frame:
                case CardObj.ColorMaterial.name: continue;

                case CardObj.ColorMaterial.cost: iState = Card.State.cost; break;

                case CardObj.ColorMaterial.power: iState = Card.State.power; break;

                case CardObj.ColorMaterial.toughness: iState = Card.State.toughness; break;
                }
                GameObject obj = obj_stateView[(int)iState];

                //外部のカードの情報を用いる
                Color color = Utility.GetRatio(
                    CardObj.colorList[(int)colorFrom][i], CardObj.colorList[(int)colorTo][i],
                    (Mathf.Cos(Mathf.PI * colorFrame / colorPeriod) + 1f) / 2);

                color.a = viewFrame / viewPeriod;
                obj.GetComponent <Image>().color = color;
                if ((CardObj.ColorMaterial)i == CardObj.ColorMaterial.cost)
                {
                    obj_characterStateView[(int)Card.CharacterState.mana].GetComponent <Image>().color = color;
                    obj_characterStateView[(int)Card.CharacterState.od].GetComponent <Image>().color   = color;
                }
            }
        }
        colorFrame = (colorFrame + 1) % colorPeriod;
    }
Пример #12
0
    //カード情報をウィンドウに反映させる
    void WriteWindow(Card _card)
    {
        text_name.text = _card.GetName();
        text_user.text = "";
        for (int i = 0; i < _card.GetUser().Length; ++i)
        {
            text_user.text += i == 0 ? "" : " " + _card.GetUser()[i];
        }

        //       //書き換えタイミング
        //       if (view_frame == view_period - 1 && !isClearing) {
        //       //if (!isClearing) {

        //           Card cs = card;

        //GetByteCountは使えない
        //nm_size = nm_char_size * System.Text.Encoding.GetEncoding(932)
        //    .GetByteCount(nm.text.ToString()) / 2;
        var gui = new GUIStyle()
        {
            font = font_name
        };

        nameSize = gui.CalcSize(new GUIContent(text_name.text)).x;
        text_name.rectTransform.offsetMin.Set(0, text_name.rectTransform.offsetMin.y);

        nameMode  = ScrollMode.size - 1;
        nameFrame = -1;

        //nmMode = NameModeType.size - 1;
        //nm_frame = -1;


        //テキストの決定

        //テキストで使えるのは
        //\n : 改行
        //\h : ぶら下げ

        float textLength = 0;      //1行に入るテキスト長さ
        float textLine   = 0;      //縦の長さ

        int lineStart     = 0;     //一行の開始地点
        int lineFromFirst = 0;     //段落から何行目か

        bool   yen        = false; //直前が\のときに真
        bool   breakFlag  = false; //改行フラグ
        string hungFirst  = "";    //段落冒頭の左側
        string hungSecond = "";    //段落冒頭以外の左側

        string buffer = "";        //これを最終的にtxt.textに流す

        gui = new GUIStyle()
        {
            font = font_text
        };

        for (int i = 0; i < _card.text.Length; ++i)
        {
            if (_card.text[i] == '\\')
            {
                yen = true; continue;
            }
            if (yen)
            {
                yen = false;
                switch (_card.text[i])
                {
                case 'n': breakFlag = true; hungFirst = ""; hungSecond = ""; continue;

                case 'h': breakFlag = true; hungFirst = ""; hungSecond = " "; continue;
                }
            }
            textLength += gui.CalcSize(new GUIContent(_card.text[i].ToString())).x;
            if (textLength > textLengthBorder || breakFlag || i == _card.text.Length - 1)
            {
                string line = _card.text.Substring(lineStart, i - lineStart);
                line      = line.Replace("\\n", "");
                line      = line.Replace("\\h", "");
                buffer   += lineFromFirst == 0 ? hungFirst : hungSecond + line + "\n";
                lineStart = i;
                if (breakFlag)
                {
                    lineFromFirst = 0;
                }
                else
                {
                    ++lineFromFirst;
                }
                textLine  += gui.CalcSize(new GUIContent(_card.text[i].ToString())).y;
                textLength = gui.CalcSize(new GUIContent(
                                              (lineFromFirst == 0 ? hungFirst : hungSecond))).x;
                breakFlag = false;
            }
        }

        text_text.text = buffer;

        //offsetMin = new Vector2 (left,top);
        //offsetMax = new Vector2 (right,bottom);

        var hoge = new Vector2(0, textLineBorder - textLine);

        text_text.rectTransform.offsetMin = hoge;
        if (textLine < textLineBorder)
        {
            text_text.rectTransform.offsetMax = hoge;
            obj_textScroll.GetComponent <ScrollRect>().vertical = false;
        }
        else
        {
            text_text.rectTransform.offsetMax = new Vector2(0, 0);
            obj_textScroll.GetComponent <ScrollRect>().vertical = true;
        }
        obj_textScroll.GetComponent <ScrollRect>().verticalNormalizedPosition = 1f;

        //コスト火力耐久の反映
        for (int i = 0; i < obj_stateView.Length; ++i)
        {
            int state = 0;
            switch ((Card.State)i)
            {
            case Card.State.cost: state = _card.GetCost(); break;

            case Card.State.power: state = _card.GetPower(); break;

            case Card.State.toughness: state = _card.GetToughness(); break;
            }
            stateNum[i].GetComponent <Number>().num = state;
            stateNum[i].transform.localScale        = new Vector3(1, 1, 0) * numScale;
        }
        stateNum[(int)Card.State.cost].GetComponent <Number>().isVisible
            = _card.type != Card.Type.character;

        for (int i = 0; i < (int)Card.CharacterState.size; ++i)
        {
            var isTypeChar = _card.type == Card.Type.character;
            obj_characterStateView[i].SetActive(isTypeChar);
            characterStateNum[i].GetComponent <Number>().isVisible = isTypeChar;
            characterStateNum[i].transform.localScale = new Vector3(1, 1, 0) * numScale;
            int state = 0;
            switch ((Card.CharacterState)i)
            {
            case Card.CharacterState.mana: state = _card.mana; break;

            case Card.CharacterState.manaCapacity: state = _card.manaCapacity; break;

            case Card.CharacterState.od: state = _card.od; break;
            }
            characterStateNum[i].GetComponent <Number>().num = state;
        }

        //彩度の決定
        foreach (var i in chromas)
        {
            Destroy(i);
        }
        foreach (var i in chromaNums)
        {
            Destroy(i);
        }
        chromas.Clear();
        chromaNums.Clear();

        //スタート地点を見つける
        Card.Color start = CardObj.GetStartColor(_card);

        //シンボルの種類を数える
        int colorHave = 0;

        for (int i = 0; i < (int)Card.Color.size; ++i)
        {
            if (_card.color[i] > 0)
            {
                ++colorHave;
            }
        }

        //配置する
        for (int i = 0, a = 0; i < (int)Card.Color.size; ++i)
        {
            int b = ((int)start + i) % (int)Card.Color.size;

            if (0 < _card.color[b])
            {
                var obj = Utility.InstantiateWithTransform(orig_chroma, orig_chroma.transform);
                obj.transform.localPosition      += new Vector3(chromaBlank * a++, 0, 0);
                obj.transform.localScale          = new Vector3(1, 1, 1) * chromaScale;
                obj.GetComponent <Image>().sprite = chromaPic[b];
                chromas.Add(obj);

                if (1 < _card.color[b])
                {
                    var num = Instantiate(orig_num, obj.transform.position + chromaNumPos,
                                          obj.transform.rotation, obj.transform);

                    num.GetComponent <Number>().num = _card.color[b];
                    num.transform.localScale        = new Vector3(1, 1, 0) * chromaNumScale;
                    chromaNums.Add(num);
                }
            }
        }
    }
Пример #13
0
 public Card(Card.Color color, int number)
 {
     this.color  = color;
     this.number = number;
     this.isOpen = false;
 }