相对于其数据在特定方向上移动的有效方法是什么
What is an efficient way to move in a specific direction relative to its data?
所以我正在做一个迷你游戏,你是一个有怪物的竞技场的玩家。目标是通过射击来杀死所有的怪物。你可以向上/向右/向下/向左移动,怪物也可以。如果怪物碰到你,你就死了。
我必须为玩家创建一个玩家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();
相关文章:
- 自定义先决条件对移动分配运算符有效吗
- 如何在C++中有效地将数组移动到向量
- 如何有效地将(一些)项目从一个std::map移动到另一个std::map
- 移动后C++使用:有效的用例?
- 用于删除复制/移动分配运算符的有效签名
- 我可以在移动平台上有效地使用用C/C 编写的数字算法
- 如何有效地将底层数据从 std::string 移动到其他类型的变量?
- 移动变量是否有效,可以在 std::move 之后使用
- 移动后右值是否有效?
- 在 c++11 中,虚函数能否通过移动语义有效地返回大值
- 如何有效地移动大量的图形项目
- 通过移动有效地将元组引入容器
- 移动 ctor 是否在所有情况下都有效
- 移动unique_ptr后,指向unique_ptr内容的指针的内容是否有效?
- 相对于其数据在特定方向上移动的有效方法是什么
- ZeroMQ 的替代方案是什么,用于移动协议缓冲区有效负载
- 有效使用移动语义和 (N)RVO
- 可移动元素向量的大小调整是否有效?
- 在c++ 11中,这是将一个std::vector的内容移动到另一个vector的末尾的最有效的方法吗?
- 有效地将向量的底部四分之一移动到顶部