AI Refactoring2009Crab

From The Battle for Wesnoth Wiki
Revision as of 18:17, 11 April 2009 by Crab (talk | contribs) (CURRENT)

CURRENT

extract gamestate-changing actions from AI code to separate classes.

Proposed syntax (A):

ai_move_command move_my_leader = execute_move_unit_command(from,keep);
if (move_my_leader.ok()){
   ai_recruit_command recruit_soldiers = execute_recruit_command();
   if (!recruit_soldiers.ok()){
   }
}

Benefits:

1. well-defined interface between c++ ai and game state changes

2. separate return status from other values (such as 'move ok/move failed/move interrupted' vs 'where moved unit is now')

3. ability to detect unchecked ai commands at runtime (if .ok() wasn't called, we can complain in the destructor of called command).

Proposed syntax (B):

ai_move_command move_my_leader(from,keep);
move_my_leader.execute();
if (move_my_leader.ok()){
  ai_recruit_command recruit_soldiers;
  recruit_soldiers.set_preference_("archers");
  recruit_soldiers.execute();
  if (!recruit_soldiers.ok()){
     ...
  }
}

Benefits (comparing with A):

  1. Ability to supply additional parameters before execution.
  2. Ability to do a 'mock execution' and check, if the move allowed. (e.g. if (recruit_soldiers.is_possible()) ... )

DONE

r34723 AI Refactoring: changed 'team' to 'side' when it means 'side number that starts from 1'.

r34720 AI Refactoring: Moved location of ai_interface::info to ai_manager. Now using a single copy of ai_interface::info for all AIs, and using get_info() accessor to get it from AIs. Also, fixed side to be unsigned int where it is possible.

r34719 AI Refactoring: removed unused turn_data_ from ai_interface::info

r34705 AI Refactoring. Extracted 'team number' and 'master' from ai_interface::info. This makes ai_interface::info ai-independent and allows to push it out of ai.