这个转换声明可以缩短吗?

时间:2016-03-10 00:16:31

标签: c++ switch-statement allegro allegro5

可以缩短此切换声明吗?这样做是否正确?这是一件简单的事情,我不知道是否有使用开关的感觉。

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

3 个答案:

答案 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;
}