solve method

  1. @override
bool solve()
override

Implementation

@override
bool solve() {
  Card card;
  List<Card> checkCards;
  resetWildCards();

  if (this.game.wheelStatus == 1) {
    this.cards = getWheel();
    if (this.cards.isNotEmpty) {
      int wildCount = 0;
      for (var i = 0; i < this.cards.length; i++) {
        card = this.cards[i];
        if (card.value == this.game.wildValue) {
          wildCount += 1;
        }
        if (card.rank == 0) {
          card.rank = kValues.indexOf('A');
          card.wildValue = 'A';
          if (card.value == '1') {
            card.value = 'A';
          }
        }
      }
      this.cards.sort(Card.sort);
      for (;
          wildCount < this.wilds.length &&
              this.cards.length < this.game.cardsInHand;
          wildCount++) {
        card = this.wilds[wildCount];
        card.rank = kValues.indexOf('A');
        card.wildValue = 'A';
        this.cards.add(card);
      }
      descr = '${this.name}, Wheel';
      this.sfLength = game.sfQualify;
      if (this.cards[0].value == 'A') {
        this.cards.addAll(this
            .nextHighest()
            .sublist(1, this.game.cardsInHand - this.cards.length + 1));
      } else {
        this.cards.addAll(this
            .nextHighest()
            .sublist(0, this.game.cardsInHand - this.cards.length));
      }
      return true;
    }
    resetWildCards();
  }

  this.cards = getGaps();

  for (var i = 0; i < this.wilds.length; i++) {
    card = this.wilds[i];
    checkCards = getGaps(this.cards.length);
    if (this.cards.length == checkCards.length) {
      if (this.cards[0].rank < (values.length - 1)) {
        card.rank = this.cards[0].rank + 1;
        card.wildValue = kValues[card.rank];
        this.cards.add(card);
      } else {
        card.rank = this.cards[this.cards.length - 1].rank - 1;
        card.wildValue = kValues[card.rank];
        this.cards.add(card);
      }
    } else {
      for (var j = 1; j < this.cards.length; j++) {
        if (this.cards[j - 1].rank - this.cards[j].rank > 1) {
          card.rank = this.cards[j - 1].rank - 1;
          card.wildValue = kValues[card.rank];
          this.cards.add(card);
          break;
        }
      }
    }
    this.cards.sort(Card.sort);
  }
  if (this.cards.length >= this.game.sfQualify) {
    descr =
        '${this.name}, ${this.cards[0].toString().substring(0, this.cards[0].toString().length - 1)} High';
    this.cards = this.cards.sublist(0, this.game.cardsInHand);
    this.sfLength = this.cards.length;
    if (this.cards.length < this.game.cardsInHand) {
      if (this.cards[this.sfLength - 1].rank == 0) {
        this.cards.addAll(this
            .nextHighest()
            .sublist(1, this.game.cardsInHand - this.cards.length + 1));
      } else {
        this.cards.addAll(this
            .nextHighest()
            .sublist(0, this.game.cardsInHand - this.cards.length));
      }
    }
  }

  return this.cards.length >= this.game.sfQualify;
}