//蛇头的运动 if("R".equals(direction)){ snakeX[0]+=25; } if("L".equals(direction)){ snakeX[0]-=25; } if("U".equals(direction)){ snakeY[0]-=25; } if("D".equals(direction)){ snakeY[0]+=25; }优化这段代码,让蛇头不能回头
时间: 2024-02-10 15:16:06 浏览: 32
可以通过添加判断条件来实现蛇头不能回头的功能,具体代码如下:
```
if("R".equals(direction) && !("L".equals(lastDirection))){ // 判断当前方向是否为左并且上一次方向不为右
snakeX[0]+=25;
lastDirection = "R";
}
if("L".equals(direction) && !("R".equals(lastDirection))){ // 判断当前方向是否为右并且上一次方向不为左
snakeX[0]-=25;
lastDirection = "L";
}
if("U".equals(direction) && !("D".equals(lastDirection))){ // 判断当前方向是否为下并且上一次方向不为上
snakeY[0]-=25;
lastDirection = "U";
}
if("D".equals(direction) && !("U".equals(lastDirection))){ // 判断当前方向是否为上并且上一次方向不为下
snakeY[0]+=25;
lastDirection = "D";
}
```
其中 `lastDirection` 表示上一次蛇头移动的方向,初始值可以设置为蛇当前的运动方向。这样就可以避免蛇头回头,从而优化代码。
相关问题
if (isStar){//游戏开始时才开始动,后一节身体走到前一节身体上 for (int i=length-1;i>0;i--){ snakeX[i]=snakeX[i-1]; snakeY[i]=snakeY[i-1]; } //蛇头的运动 if("R".equals(direction)){ snakeX[0]+=25; } if("L".equals(direction)){ snakeX[0]-=25; } if("U".equals(direction)){ snakeY[0]-=25; } if("D".equals(direction)){ snakeY[0]+=25; } //蛇的越界处理 if (snakeX[0]>750) { snakeX[0]=25; } if (snakeX[0]<100){ snakeX[0]=750; } if (snakeY[0]<100){ snakeY[0]=720; } if (snakeY[0]>725){ snakeY[0]=100; }优化这段代码
可以将判断方向的 if 语句改成 switch 语句,这样可以提高代码的可读性和运行效率。同时,可以将越界处理的 if 语句合并成一个 if-else 语句,这样可以减少判断次数,优化代码。修改后的代码如下所示:
```
if (isStar) {
// 游戏开始时才开始动,后一节身体走到前一节身体上
for (int i = length - 1; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}
// 蛇头的运动
switch (direction) {
case "R":
snakeX[0] += 25;
break;
case "L":
snakeX[0] -= 25;
break;
case "U":
snakeY[0] -= 25;
break;
case "D":
snakeY[0] += 25;
break;
default:
break;
}
// 蛇的越界处理
if (snakeX[0] > 750 || snakeX[0] < 100 || snakeY[0] < 100 || snakeY[0] > 725) {
snakeX[0] = (snakeX[0] + 650) % 750 + 25;
snakeY[0] = (snakeY[0] + 525) % 625 + 100;
}
}
```
另外,可以考虑将魔法数字(如 750、25、100、725 等)提取成常量或变量,增强代码的可维护性。
优化以下代码: for (DqExecuteResult dqExecuteResult : dqExecuteResults) { // 一致性 if (RuleTemplateName.MULTI_TABLE_ACCURACY.getCode().equals(dqExecuteResult.getRuleName())) { coherenceTotal += dqExecuteResult.getTotal(); if (DqTaskState.FAILURE.getCode() == dqExecuteResult.getState()) { coherenceSuccess += (dqExecuteResult.getTotal() - Math.round(dqExecuteResult.getStatisticsValue())); } else{ coherenceSuccess += dqExecuteResult.getTotal(); } } // 完备性 else if(RuleTemplateName.NULL_CHECK.getCode().equals(dqExecuteResult.getRuleName())){ completeTotal += dqExecuteResult.getTotal(); if (DqTaskState.FAILURE.getCode() == dqExecuteResult.getState()) { completeSuccess += (dqExecuteResult.getTotal() - Math.round(dqExecuteResult.getStatisticsValue())); } else{ completeSuccess += dqExecuteResult.getTotal(); } } // 有效性 else { effectiveTotal += dqExecuteResult.getTotal(); if (DqTaskState.FAILURE.getCode() == dqExecuteResult.getState()) { effectiveSuccess += (dqExecuteResult.getTotal() - Math.round(dqExecuteResult.getStatisticsValue())); } else{ effectiveSuccess += dqExecuteResult.getTotal(); } } }
可以考虑以下优化:
1. 将重复的代码提取出来,避免重复书写,可以提高代码的可读性和维护性;
2. 可以使用 switch-case 语句替代 if-else if 语句,使代码更加简洁;
3. 可以将常量提取出来,避免在代码中多次出现,提高可维护性。
下面是优化后的代码:
```
final String MULTI_TABLE_ACCURACY = RuleTemplateName.MULTI_TABLE_ACCURACY.getCode();
final String NULL_CHECK = RuleTemplateName.NULL_CHECK.getCode();
for (DqExecuteResult dqExecuteResult : dqExecuteResults) {
String ruleName = dqExecuteResult.getRuleName();
int state = dqExecuteResult.getState();
int total = dqExecuteResult.getTotal();
double statisticsValue = dqExecuteResult.getStatisticsValue();
switch (ruleName) {
case MULTI_TABLE_ACCURACY:
coherenceTotal += total;
coherenceSuccess += (state == DqTaskState.FAILURE.getCode()) ? (total - Math.round(statisticsValue)) : total;
break;
case NULL_CHECK:
completeTotal += total;
completeSuccess += (state == DqTaskState.FAILURE.getCode()) ? (total - Math.round(statisticsValue)) : total;
break;
default:
effectiveTotal += total;
effectiveSuccess += (state == DqTaskState.FAILURE.getCode()) ? (total - Math.round(statisticsValue)) : total;
}
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)