コード例 #1
0
ファイル: DuelCardScript.cs プロジェクト: wlzs04/DuelMonsters
        public void OnPointerClick(PointerEventData eventData)
        {
            if (clickCallback != null)
            {
                clickCallback(launchEffectCard, card);
                return;
            }
            if (card.GetCardGameState() == CardGameState.FrontAttack ||
                card.GetCardGameState() == CardGameState.FrontDefense ||
                card.GetCardGameState() == CardGameState.Back)
            {
                //选择祭品
                if (card.GetCardType() == CardType.Monster &&
                    !haveBeChosen &&
                    ownerPlayer.GetCurrentEffectProcess() is CallMonsterEffectProcess)
                {
                    int tempInt = card.GetCanBeSacrificedNumber();
                    if (tempInt > 0)
                    {
                        CallMonsterEffectProcess callMonsterEffectProcess = ownerPlayer.GetCurrentEffectProcess() as CallMonsterEffectProcess;

                        if (callMonsterEffectProcess.CanChooseMonsterAsSacrifice(card))
                        {
                            haveBeChosen = true;
                            ChooseThisCard();
                            callMonsterEffectProcess.TrySacrificeCall();
                        }
                    }
                }
                //选择我方主动攻击的怪兽
                if (ownerPlayer.CanBattle() && !(ownerPlayer.GetCurrentEffectProcess() is AttackEffectProcess))
                {
                    if (ownerPlayer.IsMyPlayer() && !isPrepareAttack && duelScene.GetCurrentPhaseType() == PhaseType.Battle && CanAttack())
                    {
                        Player opponentPlayer = ownerPlayer.GetOpponentPlayer();
                        if (opponentPlayer.CanBeDirectAttacked() &&
                            !opponentPlayer.HaveBeAttackedMonster() &&
                            ownerPlayer.GetCanDirectAttack() && card.CanDirectAttack())
                        {
                            AttackEffectProcess attackEffectProcess = new AttackEffectProcess(card, null, ownerPlayer);
                            ownerPlayer.AddEffectProcess(attackEffectProcess);

                            return;
                        }
                        else
                        {
                            PrepareAttack();

                            AttackEffectProcess attackEffectProcess = new AttackEffectProcess(card, null, ownerPlayer);
                            ownerPlayer.AddEffectProcess(attackEffectProcess);
                            return;
                        }
                    }
                }
                //选择对方被攻击的怪兽
                if (ownerPlayer.GetOpponentPlayer().GetCurrentEffectProcess() is AttackEffectProcess)
                {
                    AttackEffectProcess attackEffectProcess = ownerPlayer.GetOpponentPlayer().GetCurrentEffectProcess() as AttackEffectProcess;
                    if (attackEffectProcess.WaitChooseBeAttackedMonster() && card.GetCardType() == CardType.Monster)
                    {
                        attackEffectProcess.ChooseBeAttackedMonster(card);
                    }
                }
            }
        }
コード例 #2
0
ファイル: ComputerPlayer.cs プロジェクト: wlzs04/DuelMonsters
        /// <summary>
        /// 电脑思考行动,暂时制作简单处理。
        /// </summary>
        public override void ThinkAction()
        {
            //不是自己回合不进行操作
            if (duelScene.GetCurrentPlayer() != this)
            {
                return;
            }
            //受效果处理时进行根据效果类型做特殊操作
            if (currentEffectProcess != null)
            {
                if (currentEffectProcess is DiscardHandCardEffectProcess)
                {
                    (currentEffectProcess as DiscardHandCardEffectProcess).DiscardOneHandCard(null, FindWorstCardInHand());
                }
                if (currentEffectProcess is ChooseCardEffectProcess)
                {
                    ChooseCardEffectProcess chooseCardEffectProcess = currentEffectProcess as ChooseCardEffectProcess;

                    chooseCardEffectProcess.ChooseCardCallBack(chooseCardEffectProcess.GetLaunchEffectCard(), FindCanBeChooseCardFromList(chooseCardEffectProcess.GetCanChooseCardList()));
                }
                return;
            }
            if (duelScene.GetCurrentPhaseType() == PhaseType.Draw)
            {
                duelScene.EnterPhaseType(PhaseType.Prepare);
                return;
            }
            else if (duelScene.GetCurrentPhaseType() == PhaseType.Prepare)
            {
                duelScene.EnterPhaseType(PhaseType.Main);
                return;
            }
            //在主要流程中
            else if (duelScene.GetCurrentPhaseType() == PhaseType.Main)
            {
                //先召唤怪兽
                if (GameManager.GetSingleInstance().GetUserData().opponentCanCallMonster&& CanCallMonster())
                {
                    foreach (var item in handCards)
                    {
                        DuelCardScript duelCardScript = item.GetDuelCardScript();
                        if (duelCardScript.CanCall())
                        {
                            int sacrificeMonsterNumer = item.NeedSacrificeMonsterNumer();
                            if (sacrificeMonsterNumer > 0)
                            {
                                List <CardBase> sacrificeCards = new List <CardBase>();//祭品列表

                                for (int i = 0; i < DuelRuleManager.GetMonsterAreaNumber(); i++)
                                {
                                    if (monsterCardArea[i] != null)
                                    {
                                        sacrificeCards.Add(monsterCardArea[i]);
                                        sacrificeMonsterNumer -= monsterCardArea[i].GetCanBeSacrificedNumber();
                                        if (sacrificeMonsterNumer <= 0)
                                        {
                                            break;
                                        }
                                    }
                                }
                                CardGameState nextCardGameState = ThinkCallMonsterCardGameState(item);

                                CallMonsterEffectProcess callMonsterEffectProcess = new CallMonsterEffectProcess(item, nextCardGameState, sacrificeCards, this);
                                AddEffectProcess(callMonsterEffectProcess);
                            }
                            else
                            {
                                CardGameState nextCardGameState = ThinkCallMonsterCardGameState(item);

                                CallMonsterEffectProcess callMonsterEffectProcess = new CallMonsterEffectProcess(item, nextCardGameState, this);
                                AddEffectProcess(callMonsterEffectProcess);
                            }
                            return;
                        }
                    }
                }
                //然后使用魔法卡
                else if (GameManager.GetSingleInstance().GetUserData().opponentCanLaunchEffect&& CanLanuchMagicCard())
                {
                    foreach (var item in magicTrapCardArea)
                    {
                        if (item != null && item.CanLaunchEffect())
                        {
                            LaunchEffect(item);
                            return;
                        }
                    }
                    foreach (var item in GetHandCards())
                    {
                        if (item.CanLaunchEffect())
                        {
                            LaunchEffect(item);
                            return;
                        }
                    }
                }
                //最后进入战斗流程
                else if (GameManager.GetSingleInstance().GetUserData().opponentCanAttack&& CanEnterBattlePhaseType())
                {
                    Battle();
                    return;
                }
            }
            else if (duelScene.GetCurrentPhaseType() == PhaseType.Battle)
            {
                //先判断是否存在可以进行攻击的怪兽,并选出攻击力最大的怪兽先进行攻击
                int canAttackMonsterIndex = -1;
                int maxAttackValue        = 0;
                for (int i = 0; i < DuelRuleManager.GetMonsterAreaNumber(); i++)
                {
                    if (monsterCardArea[i] != null && monsterCardArea[i].CanAttack() && monsterCardArea[i].GetAttackValue() > maxAttackValue)
                    {
                        canAttackMonsterIndex = i;
                        maxAttackValue        = monsterCardArea[i].GetAttackValue();
                    }
                }

                //没有的话进入第二主要回合或回合结束
                if (canAttackMonsterIndex == -1)
                {
                    duelScene.EnterPhaseType(PhaseType.Second);
                    return;
                }
                else
                {
                    CardBase canAttackMonster = monsterCardArea[canAttackMonsterIndex];
                    //如果对方没有可以受攻击的怪兽时,进行直接攻击
                    if (!GetOpponentPlayer().HaveBeAttackedMonster() &&
                        GetCanDirectAttack() &&
                        GetOpponentPlayer().CanBeDirectAttacked() &&
                        canAttackMonster.CanDirectAttack())
                    {
                        AttackEffectProcess attackEffectProcess = new AttackEffectProcess(canAttackMonster, null, this);
                        AddEffectProcess(attackEffectProcess);
                        return;
                    }

                    //如果当前怪兽攻击力,比对方场上表侧表示的怪兽最小的攻击力或守备力大的话进行攻击
                    //如果对方存在里侧表示的怪兽时进行攻击
                    //以上皆不满足的话退出战斗流程
                    foreach (var item in GetOpponentPlayer().GetMonsterCardArea())
                    {
                        bool attackThisMonster = false;
                        if (item != null && item.CanBeAttacked())
                        {
                            if (item.GetCardGameState() == CardGameState.FrontAttack)
                            {
                                if (maxAttackValue >= item.GetAttackValue())
                                {
                                    attackThisMonster = true;
                                }
                            }
                            else if (item.GetCardGameState() == CardGameState.FrontDefense)
                            {
                                if (maxAttackValue >= item.GetDefenseValue())
                                {
                                    attackThisMonster = true;
                                }
                            }
                            else if (item.GetCardGameState() == CardGameState.Back)
                            {
                                attackThisMonster = true;
                            }
                        }

                        if (attackThisMonster)
                        {
                            AttackEffectProcess attackEffectProcess = new AttackEffectProcess(canAttackMonster, item, this);
                            AddEffectProcess(attackEffectProcess);
                            return;
                        }
                    }
                    return;
                }
            }
            else if (duelScene.GetCurrentPhaseType() == PhaseType.End)
            {
            }
            if (duelScene.GetCurrentPhaseType() == PhaseType.Main ||
                duelScene.GetCurrentPhaseType() == PhaseType.Battle ||
                duelScene.GetCurrentPhaseType() == PhaseType.Second)
            {
                EndTurn();
            }
        }