//フラッグにある相手の札が選択された 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); }
//自分の手札が選択された 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); }
// フラッグ獲得解決のチェック 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); }
// 選択の解除 public bool Undo() { if (phase == Defines.Phase.ChooseFlag && pCard != null) { pCard = null; phase = Defines.Phase.ChooseCard; return(true); } return(false); }
// 「使用」コマンドが選択された 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); }
// 「破棄」コマンドが選択された public bool SelectGraveyard() { if (phase == Defines.Phase.Redeploy2 && pCard != null) { TrashCard(pCard); pCard = null; phase = Defines.Phase.ChooseStack; return(true); } return(false); }
//フラッグにある自分の札が選択された 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); }
//フラッグが選択された 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); }
//カードスタックが選択された 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); }
// 次のターンへ 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); }
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; }