SDL中文论坛
标题:
代码Remark汇总
[打印本页]
作者:
ancientcc
时间:
2020-8-24 16:07
标题:
代码Remark汇总
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表。
(, 下载次数: 2769)
上传
点击文件名下载附件
钟会要移动到鼠标所在城墙,上图脚印显示的是正确路径。但如果少去此个判断,直接把一开始计算出的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;
}
复制代码
(, 下载次数: 2780)
上传
点击文件名下载附件
原因:在形成地图时,有可能出现村庄位在城墙位置,只有城墙是被放在“base”层,“base”层有单位则表示有城墙了。一旦村庄位置建了城墙后,就不必去占这个村庄。同样原因,经济区也有可能被放在城墙位置,对于预去经济区也须要该判断。
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3