- small AI improvements for Momir
This commit is contained in:
wagic.the.homebrew@gmail.com
2009-04-06 13:04:00 +00:00
parent e9190ff19f
commit e46b199a6c
3 changed files with 12 additions and 4 deletions

View File

@@ -47,6 +47,7 @@ class CmpAbilities { // compares Abilities efficiency
class AIPlayer: public Player{
protected:
MTGCardInstance * nextCardToPlay;
int agressivity;
ManaCost * potentialMana;
queue<AIAction *> clickstream;
void tapLandsForMana(ManaCost * potentialMana, ManaCost * cost);

View File

@@ -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;

View File

@@ -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;