void Bag::exch(const Move &move, Rack &rack) { LetterString usedTiles(move.usedTiles()); rack.unload(usedTiles); refill(rack); toss(usedTiles); }
LetterString Bag::refill(Rack &rack, const LetterString &drawingOrder) { LetterString ret(drawingOrder); for (int number = QUACKLE_PARAMETERS->rackSize() - rack.tiles().length(); number > 0 && !m_tiles.empty(); --number) { if (drawingOrder.empty()) rack.setTiles(String::alphabetize(rack.tiles() + pluck())); else { removeLetter(String::back(ret)); rack.setTiles(String::alphabetize(rack.tiles() + String::back(ret))); String::pop_back(ret); } } return ret; }
double CatchallEvaluator::endgameResult(const GamePosition &position, const Move &move) const { Rack leave = position.currentPlayer().rack() - move; if (leave.empty()) { double deadwood = 0; for (PlayerList::const_iterator it = position.players().begin(); it != position.players().end(); ++it) { if (!(*it == position.currentPlayer())) { deadwood += it->rack().score(); } } return deadwood * 2; } return -8.00 - 2.61 * leave.score(); }
void Bag::refill(Rack &rack) { for (int number = QUACKLE_PARAMETERS->rackSize() - rack.tiles().length(); number > 0 && !m_tiles.empty(); --number) rack.setTiles(String::alphabetize(rack.tiles() + pluck())); }
bool Rack::equals(const Rack &rack) const { return alphaTiles() == rack.alphaTiles(); }
const Rack operator-(const Rack &rack1, const Rack &rack2) { Rack ret(rack1); ret.unload(rack2.tiles()); return ret; }