Aer*_*rus 2 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)
//...
}
Run Code Online (Sandbox Code Playgroud)
if with:/*change turn after head*/是因为如果蛇向下移动并向左移动则转弯处有另一个图形,然后向上并向左移动.
这导致很多if语句的和不很readible,所以我不知道是否有解决嵌套的if语句这样的通用方法.
编辑:
key_event和moveDirection是枚举.
小智 6
感觉就像有限状态机是你需要的.您可以将键定义为事件,将蛇位置定义为状态,并根据事件(按下的键)描述从一种状态到另一种状态的转换.这将解决问题并使用转换表而不是嵌套if语句,并使您的实现不易出错.Boost Statechart Library可以帮助您快速实施.
我本人会有另一个功能来应用此举.
if(key_event != NULL){
if(key_event == LEFT){
moveLeft();
}
...
}
void moveLeft()
{
switch(moveDirection)
{
case UP:
case DOWN:
moveDirection = LEFT;
break;
case ...
}
}
Run Code Online (Sandbox Code Playgroud)
我使用switch case,在我看来这个例子更容易阅读而不是if .. else if .. else if ...
关键是,当您有嵌套循环时,看看是否可以将其中的一些分解为函数以简化问题.
我希望这有帮助.