本文整理汇总了C++中Coord::move方法的典型用法代码示例。如果您正苦于以下问题:C++ Coord::move方法的具体用法?C++ Coord::move怎么用?C++ Coord::move使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Coord
的用法示例。
在下文中一共展示了Coord::move方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: walk
// 아바타의 위치를 기반으로 최종 목표지점의 maptile에 walk를 할 수 있도록 한다.
bool GameMap::walk(AvatarPtr& avatar, Direction direction, int distance)
{
// 아바타가 존재하면서 자신의 좌표목록에 등록되어 있는지 검사한다.
if (!avatar || (avatar_position.find(avatar) == avatar_position.end()))
return false;
// 제대로 된 거리인지 검사한다.
if (distance <= 0)
return false;
// 아바타에 필요한 양의 SP가 있는지 검사한다.
if (avatar->getCurrentSP() < SP_WALK * distance)
return false;
// 목적지의 좌표를 구해서 이동할 수 있는 좌표인지 검사한다.
Coord op(avatar_position[avatar]);
Coord dp = op;
for(int i = 0; i < distance; i++)
dp.move(direction);
if(!isInnerCoord(dp))
return false;
// TODO 2.0+ : 목적지로 가는 중간에 장애물이 있는 타일이 존재하는지 검사한다.
// 올바르게 옮기기 위한 검사가 모두 끝났다.
// 이제 아바타를 옮기고, 자신의 좌표목록도 새로운 값으로 고친다.
if(!::AIOnly::moveAvatar(_map[op.y][op.x], _map[dp.y][dp.x]))
return false;
avatar_position[avatar].x = dp.x;
avatar_position[avatar].y = dp.y;
return true;
}
示例2: small_path_search
Coord small_path_search(Coord c1, Coord c2) {
int steps = 10;
auto dist = [](Coord c, Coord cc) { return abs(c.x - cc.x) + abs(c.y - cc.y); };
std::vector<Coord> stack;
std::map<Coord, int> visited;
stack.push_back(c1);
std::vector<Coord> childs;
while(steps-- && stack.size()) {
childs.clear();
Coord c = stack.back();
stack.pop_back();
if (c == c2) {
break;
}
visited[c] = steps;
Coord cc = c.move(Direction::Left);
if (free_place(cc) && visited.find(cc) == visited.end()) {
childs.push_back(cc);
}
cc = c.move(Direction::Right);
if (free_place(cc) && visited.find(cc) == visited.end()) {
childs.push_back(cc);
}
cc = c.move(Direction::Up);
if (free_place(cc) && visited.find(cc) == visited.end()) {
childs.push_back(cc);
}
cc = c.move(Direction::Down);
if (free_place(cc) && visited.find(cc) == visited.end()) {
childs.push_back(cc);
}
std::sort(childs.begin(), childs.end(), [&](Coord c, Coord cc) { return dist(c2, c) > dist(c2, cc); });
for (auto ch : childs) { stack.push_back(ch); }
}
std::pair<Coord, int> min = std::make_pair(c1, 100);
for(auto v : visited) {
if (!(v.first == c1) && can_atack(v.first, c1) && min.second > v.second) {
min = v;
}
}
return min.first;
}