コード例 #1
0
 virtual bool isEnabledAtPlay(const Player *player) const{
     if (player->hasUsed("TaichenFightCard"))
         return false;
     Duel *duel = new Duel(Card::NoSuit, 0);
     duel->deleteLater();
     if (player->isCardLimited(duel, Card::MethodUse))
         return false;
     return true;
 }
コード例 #2
0
void LijianCard::use(Room *room, ServerPlayer *, QList<ServerPlayer *> &targets) const{
    ServerPlayer *to = targets.at(0);
    ServerPlayer *from = targets.at(1);

    Duel *duel = new Duel(Card::NoSuit, 0);
    duel->setCancelable(duel_cancelable);
    duel->setSkillName(QString("_%1").arg(getSkillName()));
    if (!from->isCardLimited(duel, Card::MethodUse) && !from->isProhibited(to, duel))
        room->useCard(CardUseStruct(duel, from, to));
    else
        delete duel;
}
コード例 #3
0
void TaichenFightCard::use(Room *room, ServerPlayer *source, QList<ServerPlayer *> &) const{
    room->loseHp(source);

    if (source->isAlive()) {
        Duel *duel = new Duel(Card::NoSuit, 0);
        duel->setSkillName("_taichenfight");
        duel->setCancelable(false);

        room->addPlayerMark(source, "WushuangTarget");
        room->useCard(CardUseStruct(duel, source, room->getLord()));
        room->removePlayerMark(source, "WushuangTarget");
    }
}
コード例 #4
0
bool LijianCard::targetFilter(const QList<const Player *> &targets, const Player *to_select, const Player *Self) const{
    if (!to_select->isMale())
        return false;

    Duel *duel = new Duel(Card::NoSuit, 0);
    duel->deleteLater();
    if (targets.isEmpty() && Self->isProhibited(to_select, duel))
        return false;

    if (targets.length() == 1 && to_select->isCardLimited(duel, Card::MethodUse))
        return false;

    return targets.length() < 2 && to_select != Self;
}
コード例 #5
0
void LijianCard::use(Room *room, ServerPlayer *source, const QList<ServerPlayer *> &targets) const{
    room->throwCard(this);

    ServerPlayer *to = targets.at(0);
    ServerPlayer *from = targets.at(1);

    Duel *duel = new Duel(Card::NoSuit, 0);
    duel->setCancelable(false);

    CardEffectStruct effect;
    effect.card = duel;
    effect.from = from;
    effect.to = to;

    room->cardEffect(effect);
}
コード例 #6
0
void TaichenFightCard::use(Room *room, ServerPlayer *source, const QList<ServerPlayer *> &targets) const{
    room->loseHp(source);

    if(source->isAlive()){
        Duel *duel = new Duel(Card::NoSuit, 0);
        duel->setCancelable(false);

        CardEffectStruct effect;
        effect.card = duel;
        effect.from = source;
        effect.to = room->getLord();

        room->acquireSkill(source, "wushuang", false);
        room->cardEffect(effect);
        source->loseSkill("wushuang");
    }
}
コード例 #7
0
ファイル: AIInterface.cpp プロジェクト: rianneogi/DuelMasters
int AIInterface::Search(Duel* pos, int depth, int player)
{
	//Duel* lastpos
	if (depth == 0)
	{
		return Evaluate(pos, player);
	}
	int value = 0;
	vector<Message> moves = getValidMoves(pos);
	for (int i = 0; i < min(10, int(moves.size())); i++)
	{
		//Duel* d = new Duel(*pos);
		Duel* d = new Duel;
		ActiveDuel = d;
		d->isSimulation = true;
		d->RandomGen.SetRandomSeed(pos->RandomGen.GetRandomSeed());
		d->setDecks(pos->decknames[0], pos->decknames[1]);
		d->startDuel();
		d->dispatchAllMessages();
		cout << "AI: move size: " << pos->MoveHistory.size() << endl;
		for (vector<Message>::iterator i = pos->MoveHistory.begin(); i != pos->MoveHistory.end(); i++)
		{
			//cout << "AI sim move: " << (*i).getType() << endl;
			d->handleInterfaceInput(*i);
			d->dispatchAllMessages();
		}
		if (d->hands[0].cards.size() != pos->hands[0].cards.size())
		{
			cout << "AI: ERROR check not valid NON-ROOT " << d->hands[0].cards.size() << " " << pos->hands[0].cards.size() << endl;
			cout << d->MoveHistory.size() << " " << pos->MoveHistory.size() << endl;
		}
	
		for (int i = 0; i < depth; i++)
		{
			vector<Message> m = getValidMoves(d);
			if (m.size() == 0)
			{
				cout << "AI: out of moves" << endl;
				break;
			}
			Message mov = m.at(rand() % m.size());
			d->handleInterfaceInput(mov);
			d->dispatchAllMessages();
			cout << "AI: move made: " << mov.getType() << endl;
		}
		value += Evaluate(d, player);
		
		if (d!=NULL)
			delete d;
	}

	return value;
}
コード例 #8
0
void TaichenFightCard::use(Room *room, ServerPlayer *source, QList<ServerPlayer *> &) const
{
    room->loseHp(source);

    if (source->isAlive()) {
        Duel *duel = new Duel(Card::NoSuit, 0);
        duel->setSkillName("_taichenfight");
        duel->setCancelable(false);

        QStringList wushuang_tag;
        wushuang_tag << room->getLord()->objectName();
        source->tag["Wushuang_" + duel->toString()] = wushuang_tag;
        try {
            room->useCard(CardUseStruct(duel, source, room->getLord()));
        }
        catch (TriggerEvent triggerEvent) {
            if (triggerEvent == StageChange || triggerEvent == TurnBroken)
                source->tag.remove("Wushuang_" + duel->toString());
            throw triggerEvent;
        }
        source->tag.remove("Wushuang_" + duel->toString());
    }
}