SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4519|回复: 0
打印 上一主题 下一主题

[讨论] 代码Remark汇总

[复制链接]

149

主题

331

帖子

2445

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2445
跳转到指定楼层
楼主
发表于 2020-8-24 16:07:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
remark#40
  • 文件:<src>/pathfind/astarsearch.cpp
  • 函数:a_star_search

  1. if (!is_wall) {
  2.         hash[index(dst)].in = search_counter;
  3.         hash[index(dst)].cost = dst_cost;
  4. }
复制代码
原因:当估值的终点坐标是城墙时,不要给填入为提高计算效率而引入的hash表。

钟会要移动到鼠标所在城墙,上图脚印显示的是正确路径。但如果少去此个判断,直接把一开始计算出的MP=1归入hash表,那么会使路径判断从技法所直接上来了!从技法所到城墙本该是4,但由于dst在一开始算出是1,导致出误判。

remark#41
  • 文件:<src>/ai/default/ai.cpp
  • 函数:do_combat

  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
  • 文件:<src>/ai/default/attack.cpp
  • 函数:ai::attack_analysis

  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
  • 文件:<src>/ai/default/ai.cpp
  • 函数:ai::ai_default::do_move

  1. for (std::set<map_location>::const_iterator vill = villages.begin(); vill != villages.end(); ++ vill) {
  2.         if (units_.count(*vill, false)) {
  3.                 continue;
  4. }
复制代码

原因:在形成地图时,有可能出现村庄位在城墙位置,只有城墙是被放在“base”层,“base”层有单位则表示有城墙了。一旦村庄位置建了城墙后,就不必去占这个村庄。同样原因,经济区也有可能被放在城墙位置,对于预去经济区也须要该判断。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2025-5-2 07:26 , Processed in 0.054373 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表