Пример #1
0
        //フラッグにある相手の札が選択された
        public bool SelectCardInYourFlag(Card c, Flag f)
        {
            if (f.IsProved)
            {
                return(false);
            }
            switch (phase)
            {
            case Defines.Phase.Deserter:
                TrashCard(c);
                phase = Defines.Phase.ChooseStack;
                return(true);

            case Defines.Phase.Traitor1:
                if (c.Name == Defines.Tactics.TROOP)
                {
                    pCard = c;
                    RemoveCard(c);
                    phase = Defines.Phase.Traitor2;
                    return(true);
                }
                break;
            }
            return(false);
        }
Пример #2
0
        //自分の手札が選択された
        public bool SelectCardInMyHand(Card c)
        {
            switch (phase)
            {
            case Defines.Phase.ChooseFlag:
            case Defines.Phase.ChooseCard:
                if (c.Name != Defines.Tactics.TROOP && numTCard[turn] > numTCard[NextTurn])
                {
                    return(false);
                }
                if ((c.Name == Defines.Tactics.ALEXANDER || c.Name == Defines.Tactics.DARIUS) && useLeader[turn])
                {
                    return(false);
                }
                pCard = c;
                phase = Defines.Phase.ChooseFlag;
                return(true);

            case Defines.Phase.Discard1:
                ReturnCard(c);
                phase = Defines.Phase.Discard2;
                return(true);

            case Defines.Phase.Discard2:
                ReturnCard(c);
                phase = Defines.Phase.ChooseCard;
                turn  = NextTurn;
                return(true);
            }
            return(false);
        }
Пример #3
0
        // フラッグ獲得解決のチェック
        private bool ProveFlag(Flag f)
        {
            if (f.IsProved)
            {
                return(false);
            }
            if (f.GetLength(Turn) < f.MaxNumber)
            {
                return(false);
            }
            ArrayList   used = new ArrayList();
            ICollection pl   = f.GetCard(Turn);
            ICollection opp  = f.GetCard(NextTurn);

            // 見えているカードのリストを作成
            foreach (Flag it in flag)
            {
                used.AddRange(it.GetCard(0));
                used.AddRange(it.GetCard(1));
            }
            used.AddRange(graveyardStack);
            int winner = WinnerChecker.FlagWinner(pl, opp, used, f.MaxNumber, f.IsFog);

            if (winner == 0)
            {
                f.Prove(Turn);
                if (WinnerChecker.GameWinner(flag, Turn))
                {
                    phase = Defines.Phase.FinishGame;
                }
                return(true);
            }
            return(false);
        }
Пример #4
0
 // 選択の解除
 public bool Undo()
 {
     if (phase == Defines.Phase.ChooseFlag && pCard != null)
     {
         pCard = null;
         phase = Defines.Phase.ChooseCard;
         return(true);
     }
     return(false);
 }
Пример #5
0
        // 「使用」コマンドが選択された
        public bool SelectUse()
        {
            if (pCard == null || phase != Defines.Phase.ChooseFlag)
            {
                return(false);
            }
            switch (pCard.Name)
            {
            case Defines.Tactics.SCOUT:
                if (IsStackEmpty)
                {
                    return(false);
                }
                phase = Defines.Phase.ScoutDraw;
                numTCard[turn]++;
                TrashCard(pCard);
                pCard = null;
                return(true);

            case Defines.Tactics.DESERTER:
                if (!IsCard(NextTurn))
                {
                    return(false);
                }
                phase = Defines.Phase.Deserter;
                numTCard[turn]++;
                TrashCard(pCard);
                pCard = null;
                return(true);

            case Defines.Tactics.REDEPLOY:
                if (!IsCard(turn))
                {
                    return(false);
                }
                phase = Defines.Phase.Redeploy1;
                numTCard[turn]++;
                TrashCard(pCard);
                pCard = null;
                return(true);

            case Defines.Tactics.TRAITOR:
                if (!CanPut(turn) || !IsCard(NextTurn))
                {
                    return(false);
                }
                phase = Defines.Phase.Traitor1;
                numTCard[turn]++;
                TrashCard(pCard);
                pCard = null;
                return(true);
            }
            return(false);
        }
Пример #6
0
 // 「破棄」コマンドが選択された
 public bool SelectGraveyard()
 {
     if (phase == Defines.Phase.Redeploy2 && pCard != null)
     {
         TrashCard(pCard);
         pCard = null;
         phase = Defines.Phase.ChooseStack;
         return(true);
     }
     return(false);
 }
Пример #7
0
 //フラッグにある自分の札が選択された
 public bool SelectCardInMyFlag(Card c, Flag f)
 {
     if (f.IsProved)
     {
         return(false);
     }
     if (phase == Defines.Phase.Redeploy1)
     {
         pCard = c;
         RemoveCard(c);
         phase = Defines.Phase.Redeploy2;
         return(true);
     }
     return(false);
 }
Пример #8
0
        //フラッグが選択された
        public bool SelectFlag(Flag fg)
        {
            Flag f = flag[fg.Index];                    //応急処置

            switch (phase)
            {
            case Defines.Phase.ChooseFlag:
                if (f.IsProved)
                {
                    return(false);
                }
                if (PutCard(Turn, pCard, f))
                {
                    if (pCard.Name != Defines.Tactics.TROOP)
                    {
                        numTCard[turn]++;
                    }
                    if (pCard.Name == Defines.Tactics.DARIUS || pCard.Name == Defines.Tactics.ALEXANDER)
                    {
                        useLeader[turn] = true;
                    }
                    phase = Defines.Phase.ChooseStack;
                    hand[turn].Remove(pCard.SortKey);
                    pCard = null;
                    return(true);
                }
                break;

            case Defines.Phase.Redeploy2:
            case Defines.Phase.Traitor2:
                if (PutCard(Turn, pCard, f))
                {
                    phase = Defines.Phase.ChooseStack;
                    pCard = null;
                    return(true);
                }
                break;

            case Defines.Phase.ChooseCard:
            case Defines.Phase.ChooseStack:
                return(ProveFlag(f));                                           // 証明判定
            }
            return(false);
        }
Пример #9
0
        //カードスタックが選択された
        public bool SelectStack(Defines.StackType t)
        {
            ArrayList arr;

            if (t == Defines.StackType.Tactics)
            {
                arr = tacticsStack;
            }
            else
            {
                arr = combatStack;
            }

            if (arr.Count == 0)
            {
                return(false);
            }

            if (phase == Defines.Phase.ChooseStack)
            {
                if (hand[turn].Count < Defines.MaxHand)
                {
                    Draw(turn, arr);
                    phase = Defines.Phase.ChooseCard;
                    turn  = NextTurn;
                    return(true);
                }
            }
            else if (phase == Defines.Phase.ScoutDraw)
            {
                if (hand[turn].Count <= Defines.MaxHand + 1)
                {
                    if (hand[turn].Count == Defines.MaxHand + 1 || IsStackEmpty)
                    {
                        phase = Defines.Phase.Discard1;
                    }
                    Draw(turn, arr);
                    return(true);
                }
            }
            return(false);
        }
Пример #10
0
        // 次のターンへ
        public bool GoToNext()
        {
            switch (phase)
            {
            case Defines.Phase.ChooseStack:
                if (IsStackEmpty)
                {
                    turn  = NextTurn;
                    phase = Defines.Phase.ChooseCard;
                    return(true);
                }
                return(false);

            case Defines.Phase.ChooseCard:
                if (!CanPut(turn))
                {
                    turn  = NextTurn;
                    phase = Defines.Phase.ChooseCard;
                    return(true);
                }
                return(false);
            }
            return(false);
        }
Пример #11
0
        private void InitializeObjects()
        {
            //カード作成
            for (int c = 0; c < 6; c++)
            {
                for (int n = 1; n < 11; n++)
                {
                    string tail = n.ToString() + "_" + c.ToString();
                    combatStack.Add(new CCard(n, c, "card_" + tail));
                }
            }
            for (int i = 0; i < Defines.NumberOfTactics; i++)
            {
                string tail = i.ToString();
                tacticsStack.Add(new TCard((Defines.Tactics)i, "Tcard_" + tail));
            }

            Shuffle(combatStack, 2000);
            Shuffle(tacticsStack, 2000);

            for (int i = 0; i < Defines.MaxHand; i++)
            {
                Draw(0, combatStack);
                Draw(1, combatStack);
            }

            Random r = new Random();

            turn         = r.Next(2);
            phase        = Defines.Phase.ChooseCard;
            pCard        = null;
            numTCard[0]  = 0;
            numTCard[1]  = 0;
            useLeader[0] = false;
            useLeader[1] = false;
        }