|
remark#40
- 文件:<src>/pathfind/astarsearch.cpp
- 函数:a_star_search
- if (!is_wall) {
- hash[index(dst)].in = search_counter;
- hash[index(dst)].cost = dst_cost;
- }
复制代码 原因:当估值的终点坐标是城墙时,不要给填入为提高计算效率而引入的hash表。
钟会要移动到鼠标所在城墙,上图脚印显示的是正确路径。但如果少去此个判断,直接把一开始计算出的MP=1归入hash表,那么会使路径判断从技法所直接上来了!从技法所到城墙本该是4,但由于dst在一开始算出是1,导致出误判。
remark#41
- 文件:<src>/ai/default/ai.cpp
- 函数:do_combat
- mover.set_movement(0);
- if (mover.movement_left() == mover.total_movement()) {
- std::vector<map_location> steps;
- steps.push_back(arrived_at);
- recorder.add_movement(steps);
- }
复制代码 原因:AI部队去攻击,可因为一些原因一步也没移动(已试图去移动),实时部分为不陷入死循环会把该部队置为不再能移动,录像为和它同步,录像部分需显示给发个要把该部队移动力置0命令。
remark#42
- 文件:<src>/ai/default/attack.cpp
- 函数:ai::attack_analysis
- std::pair<map_location, unit*>* up;
- std::pair<map_location, unit*> up_reside;
复制代码 “up”表示用于分析的坐标、单位对,它用了指针而不是对象。
原因:城外部队要移动时,“up”是使用unit_map::move回到原地,而unit_map::move要求“src”对应的坐标、单位对是持久对象!up采用指针方式则可使用“原本”存在的那个对。up_reside则是用于城内部队移动的坐标单位对,用于给“up”提供对象。
注:ai::attack_analysis不能分析城内部队原地攻击,因而要绝对避免城内部队在原地攻击这种情形。
remark#43
- 文件:<src>/ai/default/ai.cpp
- 函数:ai::ai_default::do_move
- for (std::set<map_location>::const_iterator vill = villages.begin(); vill != villages.end(); ++ vill) {
- if (units_.count(*vill, false)) {
- continue;
- }
复制代码
原因:在形成地图时,有可能出现村庄位在城墙位置,只有城墙是被放在“base”层,“base”层有单位则表示有城墙了。一旦村庄位置建了城墙后,就不必去占这个村庄。同样原因,经济区也有可能被放在城墙位置,对于预去经济区也须要该判断。 |
|