Если в инструкциях switch нет реальных совпадений между различными случаями, вам, вероятно, лучше разделить их.
Если бы между действиями было большинство общего, вы могли бы объединить их с определенными особыми случаями в отдельных блоках case
, но вы, похоже, указываете, что это не тот случай.
Однако, если это не просто простой пример намного более сложного случая, вы можете получить более компактное решение с чем-то вроде:
// index: 0 1 2 3 4 5 6 7 8 9 10 11 12
static const int lookupX[] = { 2, 7, 1, 8, 2, 8, 1, 8, 2, 8, 4, 5, 9};
static const int lookupY[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9};
if ((a >=0) && (a < sizeof(lookupX) / sizeof(*lookupX)))
x = lookupX[a];
if ((a >=0) && (a < sizeof(lookupY) / sizeof(*lookupY)))
y = lookupY[a];
Это позволит вам хранить значения в гораздо меньшем разделе «конфигурации», чтобы вы могли легко увидеть намерение. Проверка диапазона и поиск становятся очень простыми.
Этот код предназначен для C - я не уверен, какой конкретный язык вы используете (из-за оператора var
), но он в основном выполняет поиск, только если индекс будет действительным. Вам нужно будет перевести этот бит на свой язык.