SDL中文论坛

标题: 代码Remark汇总 [打印本页]

作者: ancientcc    时间: 2020-8-24 16:07
标题: 代码Remark汇总
remark#40

  1. if (!is_wall) {
  2.         hash[index(dst)].in = search_counter;
  3.         hash[index(dst)].cost = dst_cost;
  4. }
复制代码
原因:当估值的终点坐标是城墙时,不要给填入为提高计算效率而引入的hash表。
(, 下载次数: 2769)
钟会要移动到鼠标所在城墙,上图脚印显示的是正确路径。但如果少去此个判断,直接把一开始计算出的MP=1归入hash表,那么会使路径判断从技法所直接上来了!从技法所到城墙本该是4,但由于dst在一开始算出是1,导致出误判。

remark#41

  1. mover.set_movement(0);
  2. if (mover.movement_left() == mover.total_movement()) {
  3.         std::vector<map_location> steps;
  4.         steps.push_back(arrived_at);
  5.         recorder.add_movement(steps);
  6. }
复制代码
原因:AI部队去攻击,可因为一些原因一步也没移动(已试图去移动),实时部分为不陷入死循环会把该部队置为不再能移动,录像为和它同步,录像部分需显示给发个要把该部队移动力置0命令。

remark#42

  1. std::pair<map_location, unit*>* up;
  2. 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

  1. for (std::set<map_location>::const_iterator vill = villages.begin(); vill != villages.end(); ++ vill) {
  2.         if (units_.count(*vill, false)) {
  3.                 continue;
  4. }
复制代码
(, 下载次数: 2780)
原因:在形成地图时,有可能出现村庄位在城墙位置,只有城墙是被放在“base”层,“base”层有单位则表示有城墙了。一旦村庄位置建了城墙后,就不必去占这个村庄。同样原因,经济区也有可能被放在城墙位置,对于预去经济区也须要该判断。




欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/) Powered by Discuz! X3.3