solve method

  1. @override
bool solve()
override

Implementation

@override
bool solve() {
  resetWildCards();

  for (var i = 0; i < values.length; i++) {
    var cards = values[i];
    if (cards.length > 2 && getNumCardsByRank(i) == 2) {
      cards.addAll(cards ?? []);
      for (var j = 0; j < wilds.length; j++) {
        var wild = wilds[j];
        if (wild.rank != -1) {
          continue;
        }
        if (cards != null) {
          wild.rank = cards[0].rank;
        } else if (cards[0].rank == values.length - 1 &&
            game.wildStatus == 1) {
          wild.rank = values.length - 2;
        } else {
          wild.rank = values.length - 1;
        }
        wild.wildValue = kValues[wild.rank];
        cards.add(wild);
      }
      cards.addAll(nextHighest().sublist(0, game.cardsInHand - 6));
      break;
    } else if (cards.isNotEmpty && getNumCardsByRank(i) == 2) {
      cards.addAll(cards ?? []);
      for (var j = 0; j < wilds.length; j++) {
        var wild = wilds[j];
        if (wild.rank != -1) {
          continue;
        }
        if (cards != null) {
          wild.rank = cards[0].rank;
        } else if (cards[0].rank == values.length - 1 &&
            game.wildStatus == 1) {
          wild.rank = values.length - 2;
        } else {
          wild.rank = values.length - 1;
        }
        wild.wildValue = kValues[wild.rank];
        cards.add(wild);
      }
    } else if (getNumCardsByRank(i) == 2) {
      cards.addAll(cards);
      for (var j = 0; j < wilds.length; j++) {
        var wild = wilds[j];
        if (wild.rank != -1) {
          continue;
        }
        if (cards != null) {
          wild.rank = cards[0].rank;
        } else if (cards[0].rank == values.length - 1 &&
            game.wildStatus == 1) {
          wild.rank = values.length - 2;
        } else {
          wild.rank = values.length - 1;
        }
        wild.wildValue = kValues[wild.rank];
        cards.add(wild);
      }
    }
  }

  if (cards.length >= 6) {
    var type =
        '${cards[0]?.toString()?.substring(0, cards[0].toString().length - 1) ?? ''}\'s & '
        '${cards[2]?.toString()?.substring(0, cards[2].toString().length - 1) ?? ''}\'s & '
        '${cards[4]?.toString()?.substring(0, cards[4].toString().length - 1) ?? ''}\'s';
    descr = '$name, $type';
  }

  return cards.length >= 6;
}