Начиная с
- У вас небольшой массив
- Размер массива фиксирован
- Каждый элемент в массиве может быть представлен примитивным типом
- Вы выполняете арифметические операции с элементами массива
Ваша проблема заключается в том, что вы умоляете вас использовать массив C.Ваша идея использования
int letterScore[]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5};
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
достаточно хороша.
Как вы заметили, основная проблема заключается в сопоставлении символов с позициями в массиве.В общем, вы можете использовать макрос препроцессора, например:
#define CHAR2INDEX(x) (x - 'A')
score += letterScore[CHAR2INDEX(tile.letter)];
Я согласен, что инициализация массива не совсем похожа на AS, но, опять же, C - это другой язык, который пытается быть таким же простым и эффективным, каквозможный.Тем не менее, есть альтернативные способы инициализации массива.
Во-первых, вы можете использовать что-то вроде:
int letterScore[] = {
['A' - 'A'] = 0,
['B' - 'A'] = 1,
['C' - 'A'] = 2,
…
};
или, используя этот предыдущий макрос,
int letterScore[] = {
[CHAR2INDEX('A')] = 0,
[CHAR2INDEX('B')] = 1,
[CHAR2INDEX('C')] = 1,
…
};
Если тратить 65 ints
не проблема - чего не должно быть, если только вы не нацеливаетесь на устройство с серьезным ограничением памяти - вы можете иметь массив, 65 первых элементов которого не используются.Это сделало бы вещи более читабельными.Например:
int letterScore[] = { ['A'] = 0, ['B'] = 1, ['C'] = 2, … };
score += letterScore[tile.letter];