【发布时间】:2015-03-17 20:45:49
【问题描述】:
我认为这是一个相当容易实现的事情,但我只是希望幽灵一次开始向玩家移动一个空间,如果玩家在幽灵的 5 个空间内。在我的 if 语句中 move_to_x_y 是应该添加更改的地方。如何根据玩家所在的位置执行 if 语句来移动?
这是检查幽灵是否在五个空格内的函数:
bool Game::nearby (Ghost & ghost) const
{
if (abs(m_player->get_x() - ghost.get_x()) < 5)
return true;
if (abs(m_player->get_y() - ghost.get_y()) < 5)
return true;
return false;
}
那么这里是鬼的移动功能,他通常只是向随机方向移动,当玩家不在五个空间内时是这种情况:
void Ghost::move (Game & game) {
Floor * floor;
int r;
bool moved = false;
floor = game.get_curr_floor();
do
{
if (game.nearby(*this))
r = //WHAT TO ADD HERE???
else {
r = rand() % 4;
switch (r)
{
case 0:
moved = floor->move_to_x_y (game, *this, 1, 0);
break;
case 1:
moved = floor->move_to_x_y (game, *this, 0, -1);
break;
case 2:
moved = floor->move_to_x_y(game, *this, -1, 0);
break;
case 3:
moved = floor->move_to_x_y(game, *this, 0, 1);
break;
}
}
}
while (! moved);
}
因此,根据玩家所在的位置,向上、向下、向左或向右移动。
感谢您的帮助!
【问题讨论】:
-
还有……你有什么问题?
-
已编辑。抱歉,不清楚。 “如何根据玩家的位置执行 if 语句来移动?”
-
另外,为什么会有循环?哦,
rand()。知道了。我可能不会那样做。给它一个fallthrough,所以如果它尝试向右移动但失败了,它会尝试向下,然后向左,然后向上。 -
哦,好的。好吧,它应该能够穿过墙壁,所以我不太担心 rand(),因为幽灵可以在地图上的任何地方移动。
-
这是一个非常糟糕的距离测试,顺便说一句。您可能应该同时考虑 x 和 y 距离(或者添加它们,或者采用欧几里得距离)。否则,重影可能位于屏幕的另一侧,但如果水平或垂直排列,仍会被视为“附近”。