У меня есть объект Deck (колода карт), представляющий собой двустороннюю очередь, реализованную в виде двусвязного списка.Я хотел бы иметь возможность перетасовать очередь по своему желанию, но то, как я это сделаю, мне не под силу.Поэтому вместо этого я решил предварительно перемешать массив указателей на карты и поставить их в очередь после факта.Проблема в том, что код, который у меня сейчас есть, кажется, вообще не инициализирует указатели.
void BuildDeck(Deck* deck) {
Card** cards = new Card*[20];
const size_t MAX_INTEGER_LENGTH = sizeof(int) * 4;
char szPostfix[] = "_Card.bmp";
for(int i = 1; i < 21; i++) {
char path[MAX_INTEGER_LENGTH + sizeof(szPostfix) + 1];
sprintf(path,"%d%s",i, szPostfix);
cards[i-1] = new Card(i,path);
}
ShuffleArray(cards);
for (int i = 0; i < 20; i++) {
deck->PushTop(cards[i]);
}
}
void Swap(Card* a, Card* b) {
Card temp = *a;
*a = *b;
*b = temp;
}
void ShuffleArray(Card** cardArray) {
srand(dbTimer());
for (int i = 0; i < 20; i++)
Swap(cardArray[i],cardArray[rand()%20]);
}
Я думаю, что я облажался в строке card[i] = new Card(...)
, но он как-то выглядит мне правильно.
Буду признателен за любые предложения.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я знаю, что для большинства этих вещей я должен использовать стандартную библиотеку, но я пытаюсь научить себя сложномупервый.Это просто способ, которым я учусь.
РЕДАКТИРОВАТЬ: Я исправил проблему с индексом.Теперь я просто должен выяснить, почему какое-то изображение не рисуется сейчас ...: / Спасибо за помощь!