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("洗牌结束"); }
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) }
public bool HasColorInHand(Card.Color color) { foreach (Card card in cards) { if (card.GetColor() == color) { return(true); } } return(false); }
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); }
/// <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); } } }
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; }
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(); }
//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); } } } }
//多色カードの色のフェードについて最初の色を返す 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); }
//カードの色のエフェクト 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); } }
// } 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; }
//カード情報をウィンドウに反映させる 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); } } } }
public Card(Card.Color color, int number) { this.color = color; this.number = number; this.isOpen = false; }