/// <summary> /// 引数の列の台札に次におけるカードのランク。 /// </summary> /// <param name="column">列</param> /// <returns>次におけるカードのランク</returns> public Rank?NextRank(FoundationColumn column) { int count = Values.Count(e => e is Foundation f && f.Column == column); var FoundationSequence = FoundationSequenceMap[column]; return(count < FoundationSequence.Count ? FoundationSequence[count] : (Rank?)null); }
/// <summary> /// カードを場札に移動する。 /// </summary> /// <param name="card">移動するカード</param> /// <param name="column">移動先の場札の列</param> public void MoveFoundation(Card card, FoundationColumn column) { if (!CanMoveFoundation(card, column)) { throw new InvalidOperationException(); } Dictionary[card] = new Foundation(column); }
/// <summary> /// カードが場札に移動可能か /// </summary> /// <param name="card">移動するカード</param> /// <param name="column">移動先の場札の列</param> /// <returns>可否</returns> public bool CanMoveFoundation(Card card, FoundationColumn column) { if (!(Dictionary[card] is WastePile || (Dictionary[card] is Tableau tableau && tableau.Number == Values.OfType <Tableau>().Where(e => e.Column == tableau.Column).Max(e => e.Number)))) { return(false); } return(card.Rank == NextRank(column)); }
/// <summary> /// /// </summary> /// <param name="column"></param> public Foundation(FoundationColumn column) { Column = column; }