Hand constructor
Implementation
Hand(List<dynamic> cards, this.name, this.game, bool? canDisqualify) {
cardPool = [];
this.cards = [];
suits = {};
values = List.generate(14, (index) => []);
wilds = [];
sfLength = 0;
alwaysQualifies = true;
if (canDisqualify == true && game.lowestQualified != null) {
alwaysQualifies = false;
}
if (game.descr == 'standard' && Set.from(cards).length != cards.length) {
throw Error();
}
var handRank = game.handValues.length;
var i = 0;
for (; i < game.handValues.length; i++) {
if (game.handValues[i] == runtimeType) {
break;
}
}
rank = handRank - i;
cardPool = cards.map((c) => (c is String) ? Card(c) : c as Card).toList();
for (var i = 0; i < cardPool.length; i++) {
var card = cardPool[i];
if (card.value == game.wildValue) {
card.rank = -1;
}
}
cardPool.sort((a, b) => Card.sort(a, b));
for (var i = 0; i < cardPool.length; i++) {
var card = cardPool[i];
if (card.rank == -1) {
wilds.add(card);
} else {
suits.putIfAbsent(card.suit, () => []);
suits[card.suit]!.add(card);
values[card.rank].add(card);
}
}
values = List.from(values.reversed);
isPossible = solve();
}