/// <summary> /// The special skill of this card. /// </summary> /// <param name="game">Game instance.</param> /// <param name="opt">Input option parameter.</param> /// <returns>Result.</returns> public bool Special(CardGame game, params string[] opt) { bool ret = true; if (this.power == 1) { Field field = game.Fields[Int32.Parse(opt[1])]; if (field.IsFixed) { throw GameException.getCardAlreadyFixedException(); } string cardStr = opt[0]; game.Trash(field.Number, cardStr); //CardDeck fieldDeck = field.CardList[game.Turn]; //fieldDeck.Move(cardStr, game.Talon.Trash); ret = false; } else if (this.power == 3) { int count = game.Player.Hand.Count(); game.Player.Hand.MoveAll(game.Talon.Trash); for (int i = 0; i < count; i++) { game.Draw(); } } else if (this.power == 5) { Field field = game.LastTrashedField; char c = ((string)opt[0])[0]; field.Color = Color.Get(c); } else if (this.power == 7) { Field field = game.Fields[Int32.Parse(opt[1])]; if (field.IsFixed) { throw GameException.getCardAlreadyFixedException(); } string cardStr = (string)opt[0]; CardDeck fieldDeck = field.CardList[(game.Turn + 1) % 2]; fieldDeck.Move(cardStr, game.Talon.Trash); } else if (this.power == 9) { game.Card9[(game.Turn + 1) % 2] = Constants.CARD9_AFFECTED; } return(ret); }
private IEnumerable <GameInput> Turn() { CardGame game = round.Current; observer.TurnStart(round); while (true) { GameInput gi = new GameInput(); yield return(gi); observer.Input(round, gi); try { Command mode = gi.Command; string[] opt = gi.Options; if (mode == Command.Discard) { string cardStr = opt[0]; int field = Int32.Parse(opt[1]); game.Discard(field, cardStr); observer.CmdEnd(round); } else if (mode == Command.Trash) { string cardStr = opt[0]; int field = Int32.Parse(opt[1]); game.Trash(field, cardStr); observer.CmdEnd(round); } else if (mode == Command.Special) { game.Special(opt); observer.CmdEnd(round); } else if (mode == Command.Next) { observer.TurnEnd(round); game.nextTurn(); break; } } catch (GameException ex) { observer.CmdError(round, ex); } } }