Example #1
0
 public Card.Card OnCardTaken()
 {
     Card.Card cardTaken = getRandomCard();
     cards.Remove(cardTaken);
     //Debug.Log ("OnCardTaken by Deck.cs");
     return(cardTaken);
 }
Example #2
0
 /// <summary>
 /// 检查是否可以使用
 /// </summary>
 /// <returns></returns>
 public String CheckCondition(Card.CardBasicInfo card)
 {
     //剩余的法力是否足够实际召唤的法力
     String Message = String.Empty;
     if (card.Overload > 0 && OverloadPoint > 0)
     {
         Message = "已经使用过载";
         return Message;
     }
     if (card.CardType == CardBasicInfo.CardTypeEnum.法术)
     {
         if (((Card.AbilityCard)card).CheckCondition(this) == false)
         {
             Message = "没有法术使用对象";
             return Message;
         }
     }
     if (card.CardType == CardBasicInfo.CardTypeEnum.随从)
     {
         if (MySelf.RoleInfo.BattleField.MinionCount == Card.Client.BattleFieldInfo.MaxMinionCount)
         {
             Message = "随从已经满员";
             return Message;
         }
     }
     if (MySelf.RoleInfo.crystal.CurrentRemainPoint < card.ActualCostPoint)
     {
         Message = "法力水晶不足";
     }
     return Message;
 }
Example #3
0
 public void sendCardToTrash(Card.Card card)
 {
     cardsInTrash.Add(card);
     cardsInHand.Remove(card);
     //Debug.Log("Player" + noUrut + " sendCardToTrash");
     printCardsInHand();
     printCardsInTrash();
     deactivate();          // also deactivate player
 }
Example #4
0
 private Card.Card getTopTrash()
 {
     if (cardsInTrash.Count <= 0)
     {
         return(null);
     }
     Card.Card topTrashCard = cardsInTrash [cardsInTrash.Count - 1];
     return(topTrashCard);
 }
Example #5
0
 public bool addCardToHand(Card.Card card)
 {
     if (cardsInHand.Count < maxCards - 1)           //pengaman. kartu yg boleh dipegang di awal permainan hanya 11 kartu. (player mendapatkan kartu dari host/wasit pertandingan)
     {
         cardsInHand.Add(card);
         return(true);
     }
     Debug.Log("Player" + noUrut + " reach maximum of cards in hand(" + maxCards + ")");
     return(false);
 }
Example #6
0
 /**
  * Return a card picked randomly
  */
 public Card.Card         PickACard()
 {
     if (Packet.Any())
     {
         Random    rand   = new Random();
         int       randNb = rand.Next(Packet.Count());
         Card.Card tmp    = new Card.Card(Packet[randNb]);
         Packet.RemoveAt(randNb);
         return(tmp);
     }
     return(null);
 }
Example #7
0
        public ConcentrateTrail(Card.Card card)
        {
            this.card       = card;
            isExist         = true;
            delayedDeletion = false;
            points          = new List <Vector2>();
            drawer          = new TrailDrawer();

            arbitraryEffects = new List <ConcentrateEffect>();
            reactEffects     = new List <ConcentrateEffect>();
            terminateEffects = new List <ConcentrateEffect>();
        }
Example #8
0
    //Kresna: Initiate Players in Arena - END

    //Kresna - memindah kartu - START
    //dilakukan oleh host(wasit/pembagi kartu), awal main
    bool moveCard(GameObject deck, GameObject targetPlayer)
    {
        Deck scriptDeck = (Deck)deck.GetComponent(typeof(Deck));

        if (scriptDeck.countCards() < 1)
        {
            Debug.Log("Kartu di Deck telah habis!");
            return(false); // kartu habis
        }
        Card.Card card = scriptDeck.getRandomCard();
        if (!scriptDeck.removeCard(card))
        {
            //	Debug.Log ("Cannot remove card!");
            return(false); //error remove card
        }

        Player scriptPlayer = (Player)targetPlayer.GetComponent(typeof(Player));

        scriptPlayer.addCardToHand(card);
        //Debug.Log ("moveCard("+ card.code +")");
        return(true); //berhasil memindah kartu
    }
Example #9
0
 public Card.Card onTrashTakenByOtherPlayer()
 {
     Card.Card topTrash = getTopTrash();
     removeTopTrash();
     return(topTrash);
 }
Example #10
0
 /// <summary>
 /// 运行奥秘
 /// </summary>
 /// <param name="SecretCardSN"></param>
 /// <param name="ActionCode"></param>
 /// <param name="HitMySelf"></param>
 /// <returns></returns>
 public static List<String> RunSecretHit(String SecretCardSN, String ActionCode, Boolean HitMySelf, Card.Client.GameManager game)
 {
     List<String> ActionLst = new List<string>();
     SecretCard card = (SecretCard)CardUtility.GetCardInfoBySN(SecretCardSN);
     var actiontype = Card.Server.ActionCode.GetActionType(ActionCode);
     var actionField = ActionCode.Split(Card.CardUtility.strSplitMark.ToCharArray());
     ActionLst.Add(Card.Server.ActionCode.strHitSecret + CardUtility.strSplitMark + (HitMySelf ? CardUtility.strMe : CardUtility.strYou) +
                                                         CardUtility.strSplitMark + SecretCardSN);
     //HitMySelf 在自己的回合运行自己的奥秘
     switch (card.Condition)
     {
         case SecretCondition.对方召唤随从:
             //如果是召唤系的
             if (HitMySelf)
             {
                 //在自己的回合运行自己的奥秘
                 //SUMMON#YOU#M000001#POS
                 //例如:亡语的时候可能召唤一个新的随从
                 PointEffect.RunPointEffect(game.YourInfo.BattleField.BattleMinions[int.Parse(actionField[3]) - 1],card.AdditionInfo);
                 ActionLst.Add(Card.Server.ActionCode.strPoint + Card.CardUtility.strSplitMark + CardUtility.strYou + Card.CardUtility.strSplitMark +
                             actionField[3] + Card.CardUtility.strSplitMark + card.AdditionInfo);
             }
             else
             {
                 //在自己的回合运行别人的奥秘
                 if (actiontype == Server.ActionCode.ActionType.Summon)
                 {
                     //SUMMON#YOU#M000001#POS
                     PointEffect.RunPointEffect(game.MySelf.RoleInfo.BattleField.BattleMinions[int.Parse(actionField[3]) - 1], card.AdditionInfo);
                     ActionLst.Add(Card.Server.ActionCode.strPoint + Card.CardUtility.strSplitMark + CardUtility.strMe + Card.CardUtility.strSplitMark +
                             actionField[3] + Card.CardUtility.strSplitMark + card.AdditionInfo);
                 }
                 else
                 {
                     //MINION#M000001#1
                     PointEffect.RunPointEffect(game.MySelf.RoleInfo.BattleField.BattleMinions[int.Parse(actionField[2]) - 1], card.AdditionInfo);
                     ActionLst.Add(Card.Server.ActionCode.strPoint + Card.CardUtility.strSplitMark + CardUtility.strMe + Card.CardUtility.strSplitMark +
                             actionField[2] + Card.CardUtility.strSplitMark + card.AdditionInfo);
                 }
             }
             break;
         default:
             break;
     }
     return ActionLst;
 }
Example #11
0
 public bool removeCard(Card.Card card)
 {
     return(this.cards.Remove(card));
 }
Example #12
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="事件"></param>
 public List<String> 触发事件(Card.CardUtility.全局事件 事件, GameManager game)
 {
     List<String> ActionLst = new List<string>();
     if (!Is沉默Status && 事件.事件类型 == 自身事件.事件类型)
     {
         if (自身事件.触发方向 != CardUtility.TargetSelectDirectEnum.双方)
         {
             if (自身事件.触发方向 != 事件.触发方向) return ActionLst;
         }
         if (!String.IsNullOrEmpty(自身事件.附加信息) && (事件.附加信息 != 自身事件.附加信息)) return ActionLst;
         ActionLst.Add(Card.Server.ActionCode.strHitEvent + CardUtility.strSplitMark);
         if (自身事件.事件效果.StartsWith("A"))
         {
             ActionLst.AddRange(game.UseAbility((Card.AbilityCard)Card.CardUtility.GetCardInfoBySN(自身事件.事件效果), false));
         }
         else
         {
             Card.Effect.PointEffect.RunPointEffect(this, 自身事件.事件效果);
         }
     }
     return ActionLst;
 }
Example #13
0
 /// <summary>
 /// 选择目标
 /// </summary>
 /// <returns></returns>
 private CardUtility.TargetPosition SelectPanel(Card.CardUtility.TargetSelectDirectEnum direct,
                                                Card.CardUtility.TargetSelectRoleEnum role,
                                                Boolean 嘲讽限制)
 {
     CardUtility.TargetPosition SelectPos;
     var frm = new TargetSelect(direct, role, game, 嘲讽限制);
     frm.ShowDialog();
     SelectPos = frm.pos;
     return SelectPos;
 }
Example #14
0
 /// <summary>
 /// 使用法术
 /// </summary>
 /// <param name="card"></param>
 /// <param name="ConvertPosDirect">对象方向转换</param>
 public List<String> UseAbility(Card.AbilityCard card, Boolean ConvertPosDirect)
 {
     List<String> Result = new List<string>();
     Card.CardUtility.PickEffect PickEffectResult = CardUtility.PickEffect.第一效果;
     if (card.CardAbility.IsNeedSelect())
     {
         PickEffectResult = PickEffect(card.CardAbility.FirstAbilityDefine.Description, card.CardAbility.SecondAbilityDefine.Description);
         if (PickEffectResult == CardUtility.PickEffect.取消) return new List<string>();
     }
     var SingleEffectList = card.CardAbility.GetSingleEffectList(PickEffectResult == CardUtility.PickEffect.第一效果);
     for (int i = 0; i < SingleEffectList.Count; i++)
     {
         Card.CardUtility.TargetPosition Pos = new CardUtility.TargetPosition();
         //取消处理
         if (Pos.Postion == -1) return new List<string>();
         var singleEff = SingleEffectList[i];
         singleEff.EffectCount = 1;
         if (singleEff.IsNeedSelectTarget())
         {
             Pos = GetSelectTarget(singleEff.EffectTargetSelectDirect, singleEff.EffectTargetSelectRole, false);
         }
         else
         {
             if (ConvertPosDirect)
             {
                 switch (singleEff.EffectTargetSelectDirect)
                 {
                     case CardUtility.TargetSelectDirectEnum.本方:
                         singleEff.EffectTargetSelectDirect = CardUtility.TargetSelectDirectEnum.对方;
                         break;
                     case CardUtility.TargetSelectDirectEnum.对方:
                         singleEff.EffectTargetSelectDirect = CardUtility.TargetSelectDirectEnum.本方;
                         break;
                     case CardUtility.TargetSelectDirectEnum.双方:
                         break;
                     default:
                         break;
                 }
             }
         }
         Result.AddRange(EffectDefine.RunSingleEffect(singleEff, this, Pos, Seed));
         Seed++;
         //每次原子操作后进行一次清算
         //将亡语效果也发送给对方
         Result.AddRange(Settle());
     }
     return Result;
 }
 abstract public Card swap(Card card);
 public void receive(Card card)
 {
     this.hand.Add(card);
 }
Example #17
0
 /// <summary>
 /// Gets the card as object.
 /// </summary>
 /// <param name="cardAsNumber">HandFactor value of the card as integer number.</param>
 /// <returns>Returns a new card.</returns>
 public static ICard GetCard(int cardAsNumber)
 {
     ICard card = new Card(cardAsNumber);
     return card;
 }
Example #18
0
 /// <summary>
 /// 使用法术
 /// </summary>
 /// <param name="card"></param>
 /// <param name="ConvertPosDirect">对象方向转换</param>
 public List<String> UseAbility(Card.AbilityCard card, Boolean ConvertPosDirect)
 {
     List<String> Result = new List<string>();
     //法术伤害
     if (MySelf.RoleInfo.BattleField.AbilityEffect != 0)
     {
         card.JustfyEffectPoint(MySelf.RoleInfo.BattleField.AbilityEffect);
     }
     Card.CardUtility.PickEffect PickEffectResult = CardUtility.PickEffect.第一效果;
     if (card.CardAbility.IsNeedSelect())
     {
         PickEffectResult = PickEffect(card.CardAbility.FirstAbilityDefine.Description, card.CardAbility.SecondAbilityDefine.Description);
         if (PickEffectResult == CardUtility.PickEffect.取消) return new List<string>();
     }
     var SingleEffectList = card.CardAbility.GetSingleEffectList(PickEffectResult == CardUtility.PickEffect.第一效果);
     //Pos放在循环外部,这样的话,达到继承的效果
     Card.CardUtility.TargetPosition TargetPosInfo = new CardUtility.TargetPosition();
     for (int i = 0; i < SingleEffectList.Count; i++)
     {
         var singleEffect = SingleEffectList[i];
         singleEffect.StandardEffectCount = 1;
         if (singleEffect.IsNeedSelectTarget())
         {
             TargetPosInfo = GetSelectTarget(singleEffect.SelectOpt, false);
             //取消处理
             if (TargetPosInfo.Postion == -1) return new List<string>();
         }
         else
         {
             if (ConvertPosDirect)
             {
                 switch (singleEffect.SelectOpt.EffectTargetSelectDirect)
                 {
                     case CardUtility.TargetSelectDirectEnum.本方:
                         singleEffect.SelectOpt.EffectTargetSelectDirect = CardUtility.TargetSelectDirectEnum.对方;
                         break;
                     case CardUtility.TargetSelectDirectEnum.对方:
                         singleEffect.SelectOpt.EffectTargetSelectDirect = CardUtility.TargetSelectDirectEnum.本方;
                         break;
                     case CardUtility.TargetSelectDirectEnum.双方:
                         break;
                     default:
                         break;
                 }
             }
         }
         Result.AddRange(EffectDefine.RunSingleEffect(singleEffect, this, TargetPosInfo, Seed));
         Seed++;
         //每次原子操作后进行一次清算
         //将亡语效果也发送给对方
         Result.AddRange(Settle());
     }
     return Result;
 }
Example #19
0
 /// <summary>
 /// 使用法术
 /// </summary>
 /// <param name="CardSn"></param>
 public List<String> UseAbility(Card.AbilityCard card)
 {
     List<String> Result = new List<string>();
     Card.CardUtility.PickEffect PickEffectResult = CardUtility.PickEffect.第一效果;
     if (card.CardAbility.IsNeedSelect())
     {
         PickEffectResult = PickEffect(card.CardAbility.FirstAbilityDefine.Description, card.CardAbility.SecondAbilityDefine.Description);
         if (PickEffectResult == CardUtility.PickEffect.取消) return new List<string>();
     }
     var SingleEffectList = card.CardAbility.GetSingleEffectList(PickEffectResult == CardUtility.PickEffect.第一效果);
     for (int i = 0; i < SingleEffectList.Count; i++)
     {
         Card.CardUtility.TargetPosition Pos = new CardUtility.TargetPosition();
         //取消处理
         if (Pos.Postion == -1) return new List<string>();
         var singleEff = SingleEffectList[i];
         singleEff.EffectCount = 1;
         if (singleEff.IsNeedSelectTarget())
         {
             Pos = GetSelectTarget(singleEff.EffectTargetSelectDirect, singleEff.EffectTargetSelectRole, false);
         }
         Result.AddRange(EffectDefine.RunSingleEffect(singleEff, this, Pos, Seed));
         Seed++;
         //每次原子操作后进行一次清算
         Settle();
     }
     return Result;
 }