可以缩短此切换声明吗?这样做是否正确?这是一件简单的事情,我不知道是否有使用开关的感觉。
这部分代码遍历数组以获取颜色的交互性值(从0到约10)并使用allegro库绘制一个具有此颜色的正方形。因此对于7或更多它将是黑色,少于它将是灰色而对于1它将是非常浅灰色。
for (int j = 0; j < 50; j++) {
for (int i = 0; i < 50; i++) {
int value = cells[i + j * 50];
if(value > 0) {
unsigned char color;
switch (value) {
case 1 :
color = 200;
break;
case 2 :
color = 180;
break;
case 3 :
color = 140;
break;
case 4 :
color = 100;
break;
case 5 :
color = 60;
break;
case 6 :
color = 40;
break;
case 7 :
color = 20;
break;
default: color = 0;
}
al_draw_filled_rectangle(i * 8, 400 - (j * 8), i * 8 + 8, 400 - (j * 8 + 8),
al_map_rgb(color, color, color));
}
}
}
答案 0 :(得分:4)
您可以使用查找表而不是switch
语句
static const unsigned char COLORS[] = { 0, 200, 180, 140, 100, 60, 40, 20 };
unsigned char color =
value >= 0 && value < sizeof COLORS / sizeof *COLORS ? COLORS[value] : 0;
答案 1 :(得分:3)
可以改写如下:
int colors[]={100,80,60,40,20};
for (int j = 0; j < 50; j++) {
for (int i = 0; i < 50; i++) {
int value = cells[i + j * 50];
unsigned int color=0;
color=colors[value];
}
}
答案 2 :(得分:0)
这可以帮助您缩短开关。你只需要浪费7行来填充地图:
#include <map>
#include <iostream>
using namespace std;
int main() {
int color;
int value;
cout << "Enter a color value 1-7: ";
cin >> value;
map<int, int> colormap;
colormap[1] = 200;
colormap[2] = 180;
// etc...
color = colormap[value];
cout << "color = " << color << endl;
return 0;
}