mpondu Ответов: 1

коды пасьянсов


Не могли бы вы сказать мне, что означают приведенные ниже коды в Карточном классе пасьянса:


deck.pile.remove (this);
    deck = value;
    deck.add(this); 
  
    if (DeckChanged != null)
        DeckChanged(this, null);
}


Вот класс колоды

public class Card
   {
       public static boolean IsAceBiggest = true;

      private char rank;
       private String suit;
        public String Color;

        public String NumberString()
       {
               switch (rank)
               {
                   case 'A':
                       return "Ace";

                   case 'J':
                       return "Jack";

                   case 'Q':
                       return "Queen";

                   case 'K':
                       return "King";


                   default:
                       return ""+rank;
               }
           }

       private DeckPile deck;
       public DeckPile Deck()
       {
               if (deck.Game != value.Game)
                   throw new InvalidOperationException("The new deck must be in the same game like the old deck of the card.");

               if (deck != value)
               {
                   deck.pile.remove(this);
                   deck = value;
                   deck.add(this);

                   if (DeckChanged != null)
                       DeckChanged(this, null);
               }
       }

       private boolean visible = true;
       public boolean Visible
       {
           get
           {
               return visible;
           }
           set
           {
               if (visible != value)
               {
                   visible = value;

                   if (VisibleChanged != null)
                       VisibleChanged(this, null);
               }
           }
       }

       private boolean enabled = true;
       public boolean Enabled
       {
           get
           {
               return enabled;
           }
           set
           {
               enabled = value;
           }
       }

       private boolean isDragable = true;

       public boolean IsDragable
       {
          get { return isDragable; }
           set { isDragable = value; }
       }

       public Card(CardRank rank, CardSuit suit, Deck deck)
       {
           this.rank = rank;
           this.suit = suit;
           this.deck = deck;
           this.deck.Game.Cards.Add(this);
       }

       public Card(int number, CardSuit suit, Deck deck)
       {
           this.rank = (CardRank)number;
           this.suit = suit;
           this.deck = deck;
           this.deck.Game.Cards.Add(this);
       }

       public int CompareTo(Card other)
       {
           int value1 = this.Number;
           int value2 = other.Number;

           if(Card.IsAceBiggest)
           {
           if (value1 == 1)
               value1 = 14;

           if (value2 == 1)
               value2 = 14;
           }

           if (value1 > value2)
               return 1;
           else if (value1 < value2)
              return -1;
           else
               return 0;
       }

      public void MoveToFirst()
       {
           MoveToIndex(0);
       }

       public void MoveToLast()
       {
           MoveToIndex(Deck.Cards.Count);
       }

       public void Shuffle()
       {
           MoveToIndex(Deck.Game.random.Next(0, Deck.Cards.Count));
       }

       public void MoveToIndex(int index)
       {
           Deck.Cards.Remove(this);
           Deck.Cards.Insert(index, this);
       }


       public override string ToString()
       {
          return this.NumberString + " of " + this.Suit.ToString();
       }

   }

Chandrasekharan P

Как мы узнаем, как выглядит класс карт?? Неужели на сайте не было объяснения, откуда вы взяли этот код?

Keith Barrow

[Переведено из ОП - не мой ответ]
Да потому что это относится к кодам классов созданных например CardPile и Solitaire построенных на Eclipse Java

Keith Barrow

Я отформатировал ваш код: Пожалуйста, сделайте это в будущем, так как это облегчает чтение вопроса и повышает вероятность ответа!

Keith Barrow

Можете ли вы подтвердить: код, который вы опубликовали, выглядит как c#, вы сказали, что вопрос был на c++ до того, как я его отредактировал, и вы прокомментировали, что используете Java. Какой язык вы используете? Вы переходите с одного языка на другой?

mpondu

да, я преобразовал его из c# в java-коды

Keith Barrow

В этом случае мой ответ ниже расскажет вам, что делает код. Надеюсь, это поможет!

1 Ответов

Рейтинг:
1

Keith Barrow

Он удаляет текущую карту из своей текущей колоды в другую колоду, передаваемую как value. Затем он *выглядит* так, как будто вызывает какое-то событие Deckchanged. Что value это я не знаю (см. ниже), это имеет смысл, если похоже, что метод Deck() сделан в свойство (что, вероятно, и должно быть):

public DeckPile Deck
          {
get {return deck;}
set
{
        if (deck.Game != value.Game)
            throw new InvalidOperationException("The new deck must be in the same game like the old deck of the card.");

        if (deck != value)
        {
            deck.pile.remove(this);
            deck = value;
            deck.add(this);

            if (DeckChanged != null)
                DeckChanged(this, null);
        }
    }
}


Другое дело, что класс os плохо спроектирован: методы move/shuffle правильно относятся к колоде AFAICT. Вам также, вероятно, нужен класс, который управляет игрой, присматривая за различными стеками/колодами.