Ваш ctor для руки получает deck
по значению:
hand(deck a) {
for(int i=0;i<5;i++)
hands[i] = a.draw();
}
Поэтому, когда вы draw
из колоды, модифицируется только локальная копия колоды.
Редактировать: вероятно, также стоит отметить, что сейчас вы раздаете 5 карт одному игроку, затем 5 карт следующему игроку (игрок 1 получает карты 1–5, игрок 2 получает карты 6–10 и т. Д.).В обычной схеме вы имеете дело с круговым приемом, поэтому с 2 игроками игрок 1 получит карты 1, 3, 5, 7 и 9, а игрок 2 получит карты 2, 4, 6, 8 и 10.
Ваш алгоритм перемешивания также имеет недостатки.Поиск в Google по «Fisher-Yates» должен помочь вам разобраться в этом.Вы также не хотите снова вызывать srand
каждый раз, когда вы тасуете - вы хотите вызывать его только один раз в начале программы.