diff --git a/projects/mtg/include/AIPlayer.h b/projects/mtg/include/AIPlayer.h index c93689fc8..62e066bbc 100644 --- a/projects/mtg/include/AIPlayer.h +++ b/projects/mtg/include/AIPlayer.h @@ -47,6 +47,7 @@ class CmpAbilities { // compares Abilities efficiency class AIPlayer: public Player{ protected: MTGCardInstance * nextCardToPlay; + int agressivity; ManaCost * potentialMana; queue clickstream; void tapLandsForMana(ManaCost * potentialMana, ManaCost * cost); diff --git a/projects/mtg/src/AIMomirPlayer.cpp b/projects/mtg/src/AIMomirPlayer.cpp index 883f3d220..5bdd604ce 100644 --- a/projects/mtg/src/AIMomirPlayer.cpp +++ b/projects/mtg/src/AIMomirPlayer.cpp @@ -12,13 +12,14 @@ MTGAbility * AIMomirPlayer::momirAbility = NULL; AIMomirPlayer::AIMomirPlayer(MTGPlayerCards * _deck, char * file, char * avatarFile): AIPlayerBaka(_deck,file, avatarFile){ // TODO count min and max number of mana (should probably be part of the gameobserver so that human players don't make mistakes) momirAbility = NULL; + agressivity = 100; } int AIMomirPlayer::getEfficiency(AIAction * action){ int efficiency = AIPlayerBaka::getEfficiency(action); -if (efficiency < 15) return 0; + GameObserver * g = GameObserver::GetInstance(); if (g->getCurrentGamePhase() < Constants::MTG_PHASE_FIRSTMAIN) return 0; return efficiency; diff --git a/projects/mtg/src/AIPlayer.cpp b/projects/mtg/src/AIPlayer.cpp index 6163feb35..3e9de6173 100644 --- a/projects/mtg/src/AIPlayer.cpp +++ b/projects/mtg/src/AIPlayer.cpp @@ -30,6 +30,7 @@ AIPlayer::AIPlayer(MTGPlayerCards * _deck, string file): Player(_deck, file){ potentialMana = NEW ManaCost(); nextCardToPlay = NULL; stats = NULL; + agressivity = 50; } AIPlayer::~AIPlayer(){ @@ -374,16 +375,21 @@ int AIPlayer::chooseAttackers(){ int myForce = getCreaturesInfo(this,INFO_CREATURESPOWER,-1,1); int myCreatures = getCreaturesInfo(this, INFO_NBCREATURES, -1,1); bool attack = ((myCreatures > opponentCreatures) || (myForce > opponentForce) || (myForce > 2*opponent()->life)); + if (agressivity > 80 && !attack && life > opponentForce) { + opponentCreatures = getCreaturesInfo(opponent(), INFO_NBCREATURES,-1); + opponentForce = getCreaturesInfo(opponent(),INFO_CREATURESPOWER,-1); + attack = (myCreatures >= opponentCreatures && myForce > opponentForce) || (myForce > opponentForce) || (myForce > opponent()->life); + } printf("Choose attackers : %i %i %i %i -> %i\n", opponentForce, opponentCreatures, myForce, myCreatures, attack); if (attack){ CardDescriptor cd; cd.init(); cd.setType("creature"); MTGCardInstance * card = NULL; + GameObserver * g = GameObserver::GetInstance(); + MTGAbility * a = g->mLayers->actionLayer()->getAbility(MTGAbility::MTG_ATTACK_RULE); while((card = cd.nextmatch(game->inPlay, card))){ - GameObserver * g = GameObserver::GetInstance(); - g->cardClick(card); - if (g->mLayers->actionLayer()->menuObject) g->mLayers->actionLayer()->doReactTo(0); + g->mLayers->actionLayer()->reactToClick(a,card); } } return 1;