可以缩短此 switch 语句吗?

Can this switch statement be shortened?

这个 switch 语句可以缩短吗?这是这样做的正确方法吗?很简单的事情,不知道用switch有没有意义

这部分代码遍历数组以获取颜色的强度值(从 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));
        }
    }
}

您可以使用查找 table 而不是 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;

可以改写为:

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];          
    }
}

这应该可以帮助您缩短开关。你只需要浪费 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;
}