c++ - 嵌套的 if 语句 C++

标签 c++ if-statement nested

我正在用 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/

相关文章:

java - 这个 C++ CRC32 函数的 Java 端口有什么问题?

Java嵌套if到switch语句

javascript - 在 switch 上更改 if/else

java - For 循环错误 -> if 语句不产生输出

php - PHP 数组中的嵌套 JSON

c++ - 为类属性设置默认值

c++ - __do_global_ctors 段错误在项目的某处,无法找到它

c++ - Eigen Vector*Scalar + Vector*Scalar 的未定义行为 --> libigl/external/eigen 和其他特征冲突

json 忽略标记 ("-") 不适用于嵌入式子结构

Mysql 嵌套并声明为数组