Author: dragonking
Date: Sat Jun 28 10:37:17 2008
New Revision: 27546
URL: http://svn.gna.org/viewcvs/wesnoth?rev=27546&view=rev
Log:
Removed unit_chooser and evaluate_village_possession functions, I'll rewrite
them in formula language
Modified:
trunk/src/formula_ai.cpp
Modified: trunk/src/formula_ai.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/formula_ai.cpp?rev=27546&r1=27545&r2=27546&view=diff
==============================================================================
--- trunk/src/formula_ai.cpp (original)
+++ trunk/src/formula_ai.cpp Sat Jun 28 10:37:17 2008
@@ -388,68 +388,7 @@
const std::string& type() const { return type_; }
};
-class evaluate_village_possession_function : public function_expression {
//TODO
-public:
- evaluate_village_possession_function(const args_list& args, const
formula_ai& ai)
- : function_expression("evaluate_village_possession", args, 0, 0),
ai_(ai) {
- }
-
-private:
- variant execute(const formula_callable& /*variables*/) const {
-
- int villages_number = ai_.get_info().map.villages().size();
-
- //in case there are few villages, ignore this evaluation
- if (villages_number < 6)
- return variant(50);
-
- int allied_villages_number = 0;
- int opponents_villages_number = 0;
- int allies = 0;
-
- int teams_number = ai_.get_info().teams.size();
- for( int i = 0; i < teams_number; ++i)
- {
- if ( ai_.current_team().is_enemy(i+1) )
- {
- opponents_villages_number +=
ai_.get_info().teams[i].villages().size();
- } else
- {
- ++allies;
- allied_villages_number +=
ai_.get_info().teams[i].villages().size();
- }
- }
-
- //how important is each village, but multipled by 50
- int single_village_ratio = 0;
-
- if (villages_number != 0)
- single_village_ratio = 5000/villages_number;
-
- int village_state = allied_villages_number -
opponents_villages_number;
-
- //up to this point, vilage_state contains state of the villages
in AI's team
- //now check how the AI is doing compared to its allies
-
- int ai_villages = ai_.current_team().villages().size();
-
- int ai_desired_villages = allied_villages_number / allies;
-
- village_state += ai_villages - ai_desired_villages;
-
- //calculate evaluation
- int evaluation = 50 + (village_state *
single_village_ratio)/100;
-
- if (evaluation > 100)
- evaluation = 100;
- if (evaluation < 0)
- evaluation = 0;
-
- return variant(evaluation);
- }
-
- const formula_ai& ai_;
-};
+
class recruit_function : public function_expression {
public:
@@ -466,107 +405,6 @@
return variant(new recruit_callable(loc, type));
}
-};
-
-class unit_chooser_function : public function_expression {
-public:
- explicit unit_chooser_function(const args_list& args, const formula_ai&
ai)
- : function_expression("unit_chooser", args, 1, 1), ai_(ai)
- {}
-private:
- variant execute(const formula_callable& variables) const {
- const variant input = args()[0]->evaluate(variables);
-
- gamemap::location loc;
-
- if ( !input.is_map() || (input.num_elements() == 0))
- {
- return variant();
- }
-
- if (input.num_elements() == 1)
- {
- return variant(new recruit_callable(loc,
input.get_keys()[0].as_string() ));
- } else
- {
- std::map<std::string, int> current_units;
- std::map<std::string, int>::iterator unit_it;
- int unit_count = 0;
-
- for(unit_map::unit_iterator i =
ai_.get_info().units.begin() ; i != ai_.get_info().units.end() ; ++i)
- {
- if (i->second.side() == ai_.get_info().team_num)
- {
- std::string unit = i->second.type_id();
- unit_it = current_units.find(unit);
- if ( unit_it != current_units.end() )
- {
- unit_it->second++;
- } else
- {
- current_units[ unit ] = 1;
- }
- unit_count++;
- }
- }
-
- std::map<variant, variant> input_map = input.get_map();
-
- for(unit_it = current_units.begin() ; unit_it !=
current_units.end() ; ++unit_it)
- {
- unit_it->second = (unit_it->second * 100) /
unit_count;
- //std::cerr << unit_it->first << " " <<
unit_it->second << std::endl;
- }
-
- for(unit_it = current_units.begin(); unit_it !=
current_units.end(); ++unit_it)
- {
- std::map<variant, variant>::iterator i =
input_map.find( variant(unit_it->first) );
- if ( i != input_map.end() )
- {
- if( unit_it->second >=
i->second.as_int() )
- {
- input_map.erase(i);
- if (input_map.size() == 0)
- break;
- } else
- {
- int number = i->second.as_int()
- unit_it->second;
- i->second = variant(number);
- }
- }
- }
-
- if (input_map.size() == 0)
- {
- //std::cerr << "input_map became empty,
calculating best posible recruit option using base input\n";
- input_map = input.get_map();
- }
-
-
- if (input_map.size() == 1)
- {
- return variant(new recruit_callable(loc,
input_map.begin()->first.as_string() ));
- } else
- {
- int max = 0;
- std::map<variant, variant>::iterator max_it =
input_map.begin();
-
- for(std::map<variant, variant>::iterator i =
input_map.begin(); i != input_map.end(); ++i)
- {
- if (i->second.as_int() > max)
- {
- max = i->second.as_int();
- max_it = i;
- }
- }
-
- return variant(new recruit_callable(loc,
max_it->first.as_string() ));
- }
-
- }
- }
-
- const formula_ai& ai_;
};
class move_function : public function_expression {
@@ -870,16 +708,12 @@
return expression_ptr(new outcomes_function(args, ai_));
} else if(fn == "evaluate_for_position") {
return expression_ptr(new evaluate_for_position_function(args,
ai_));
- } else if(fn == "evaluate_village_possession") {
- return expression_ptr(new
evaluate_village_possession_function(args, ai_));
} else if(fn == "move") {
return expression_ptr(new move_function(args));
} else if(fn == "attack") {
return expression_ptr(new attack_function(args, ai_));
} else if(fn == "recruit") {
return expression_ptr(new recruit_function(args));
- } else if(fn == "unit_chooser") {
- return expression_ptr(new unit_chooser_function(args, ai_));
} else if(fn == "is_village") {
return expression_ptr(new is_village_function(args));
} else if(fn == "unit_at") {
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits