Строки почти никогда не являются лучшим внутренним представлением чего-либо, кроме фактического текста. Струны предназначены для людей; компьютеры используют числа. Для карт это особенно просто, так как карты часто нужно сравнивать по рангу и добавлять по стоимости. Требуется гораздо меньше кода, чтобы сообщить программе, что 12> 11 или добавить 10 к сумме, чем для того, чтобы сообщить ей, что «K»> «Q» или добавить «J» к сумме. Внутреннее использование строк - обычное дело, когда начинающие программисты слишком ленивы, чтобы узнать о представлении данных.
Конечно, в объектно-ориентированном языке, таком как C ++, вы можете использовать объекты, но переменные-члены тех объектов, которые содержат рейтинг и масти карт, должны быть целыми числами, чтобы вы могли индексировать таблицы поиска, сравнивать диапазоны и т. Д.
Я написал эссе о картах здесь.
Для блэкджека, если вам не нужно универсальное представление карты, то идеальным вариантом будет использование целых чисел от 1 до 10. Используйте 1 для тузов, а не 11, это ускорит ваши общие вычисления: вам нужно будет только повысить один туз с 1 до 11, но вам нужно будет понизить рейтинг нескольких с 11 до 1.
Например, если у вас есть массив этих целых чисел, представляющих руку, сложение общей суммы руки выглядит примерно так (конечно, конкретизировано):
int total = 0, acefound = 0, soft = 0;
for (int i = 0; i < cardsinhand; ++i) {
total += hand[i];
if (1 == hand[i]) acefound = 1;
}
if (acefound && total < 12) {
soft = 1;
total += 10;
}
Просто и невероятно быстро. Если вы представляете реальные карты, то есть у вас будут лицевые карты с рангами 11, 12, 13, тогда просто добавьте туда что-то вроде if (r > 10) r = 10;
(еще одна причина сделать тузов 1). Я могу смоделировать миллиарды рук за такие минуты.
person
Lee Daniel Crocker
schedule
12.06.2013
Card
класс и, возможно, поддержкуenum
для 13 возможных значений. - person Chris Sinclair   schedule 11.06.2013