Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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));
        }
Exemplo n.º 4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="column"></param>
 public Foundation(FoundationColumn column)
 {
     Column = column;
 }