Element* Calculateur::swap()
{
    Element* a = getPile()->pop();
    Element* b = getPile()->pop();
    this->getPile()->swap(a->getXAsInt(),b->getXAsInt());
    delete a;
    delete b;
}
int Player::getAttackRange(bool include_weapon) const{
    int original_range = 1;
    if (hasSkill("zhengfeng") && !weapon && hp > 1) original_range = hp; // @todo_P: new way to remove coupling or just put it into TargetModSkill
    if (hasFlag("InfinityAttackRange") || getMark("InfinityAttackRange") > 0) original_range = 10000; // Actually infinity
    int weapon_range = 0;
    if (include_weapon && weapon != NULL) {
        const Weapon *card = qobject_cast<const Weapon *>(weapon->getRealCard());
        Q_ASSERT(card);
        weapon_range = card->getRange();
    }
    return qMax(original_range, weapon_range) + (hasSkill("fentian") ? getPile("burn").length() : 0);
}
Element* Calculateur::drop()
{
    Element* a = getPile()->pop();
    delete a;
}