相对于其数据在特定方向上移动的有效方法是什么

What is an efficient way to move in a specific direction relative to its data?

本文关键字:移动 有效 方法 是什么 方向 数据 相对于      更新时间:2023-10-16

所以我正在做一个迷你游戏,你是一个有怪物的竞技场的玩家。目标是通过射击来杀死所有的怪物。你可以向上/向右/向下/向左移动,怪物也可以。如果怪物碰到你,你就死了。

我必须为玩家创建一个玩家AI,以尝试生存。

因此,我为每个方向(DangerUp/DangerDown/DangerRight/DangerLeft)的每个"危险区域"定义了一个整数,并将它们全部初始化为零。所以它看起来像这样:

int DangerUp = 0, DangerDown = 0, DangerRight = 0, DangerLeft = 0;

如果我上面有怪物,危险会增加一个。如果下面有一个,危险就会增加一个。与其他两个相同。

所以我试图写的(在伪代码中)本质上是:

如果我被三个包围(这意味着 4 个危险变量中有 3 个的值为 1),请移动到危险为 0 的方向。

我打算这样做:

if (DangerUP == 1 && DangerDOWN == 1 && DangerLEFT == 1 && DangerRIGHT == 0) // if surrounded by 3 in the up, down, left direction
{
// move right;
player_x_direction++; // (this moves my character one direction to the right)
}

然后我计划做另外三个 if ,在那里我测试所有组合,其中 3 个变量中的 4 个等于 1。

有没有更简单的方法可以让我朝着任何危险方向 = 0 的方向移动?

假设危险值始终为 0 或 1,则:

int danger_everywhere = (dangerUp << 3) | (dangerDown << 2)
                      | (dangerLeft << 1) | (dangerRight);

然后:

if (danger_everywhere == 8 + 4 + 2)
     move_right();
if (danger_everywhere == 8 + 4 + 1)
     move_left();
if (danger_everywhere == 8 + 2 + 1)
     move_down();
if (danger_everywhere == 4 + 2 + 1)
     move_up();