我正在用 C++ 编写 Snake 程序(使用 JNI 可视化),有效的移动按钮是左(逆时针移动 90°)或右(移动顺时针 90°)。
在游戏循环的每个循环中,我从 GUI 界面检索一个键事件并根据该键事件移动我的蛇,这就是我这样做的方式:
if(key_event != NULL){
if(key_event == LEFT){
if(moveDirection == UP || moveDirection == DOWN){
moveDirection = LEFT;
(moveDirection == UP) ? /*change turn after head*/ : /*change turn after head*/;
} //else if (moveDir == LEFT || RIGHT)
} //else if (key_event == RIGHT)
//...
}
if with: /*change turn after head*/
是因为如果蛇在向下移动并向左移动,则有另一个转弯时 向上 和向左 转弯的图形。
这会导致很多 if 语句,而且可读性不是很好,所以我想知道是否有一种通用的方法来解决像这样的嵌套 if 语句。
编辑:
key_event 和 moveDirection 是枚举。
最佳答案
感觉像Finite State Machine是你在这里需要的。您可以将键定义为事件,将蛇的位置定义为状态,并根据事件(按下的键)描述从一种状态到另一种状态的转换。这几乎可以解决问题并使用转换表而不是嵌套的 if
语句,并使您的实现更不容易出错。 Boost Statechart Library可以帮助您快速实现。
关于c++ - 嵌套的 if 语句 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451291/