solve method
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;
}