Суть программы: игра "Пьяница".
Основное задание: реализовать очередь игровых карт.
Мой класс карты:
class card {
public:
card() {
next = NULL;
}
void setValue(int i); // Записывает значние в карту
int getValue(); // Получает значение карты
void printCard(); // Вывод карты
void setNext(card &adr); // Записать адрес следующей карты
card* getNext(); // Получить адрес следующей карты
private:
int value; // Значение карты
card *next; // Адрес следующей карты
};
Класс колоды (собственно это и есть очередь карт):
class player {
public:
player() {
}
void enqueue(int value); // Добавить карту в руку игрока (в очередь)
card* dequeue(); // Получить карту из руки игрока (из очереди)
int empty(); // Остались ли у игрока еще карты
void clear(); // Очистить руку игрока
void printPlayer(); // Вывести все карты игрока (для тестирования)
private:
card *lastCard = NULL; // Ссылка на последнюю карту в очереди
card *firstCard = NULL; // Ссылка на первую карту в очереди
};
И методы добавления и удаления карты из очереди соответственно:
void player::enqueue(int value){
if (empty()) {
firstCard = new card;
firstCard->setValue(value);
lastCard = new card;
firstCard->setNext(*lastCard);
}
else {
card *newCard = new card;
lastCard->setValue(value);
lastCard->setNext(*newCard);
lastCard = newCard;
}
}
card* player::dequeue() {
card *tmp = firstCard;
firstCard = firstCard->getNext();
return tmp;
}
Я создаю первую карту, чтобы знать начало, и в первой карте присваиваю переменной next указатель на последующую, таким образом получается очередь последовательно связанных друг с другом карт. Но у меня реализовано неверно, так как после добавления карты в очередь, я создаю следующую карту, куда будет внесено значение следующей добавленной в очередь карты. Получается, что после добавления карты у меня в конце очереди появляется пустой элемент.
Я чувствую, что решение на поверхности, но не могу его понять. Подскажите пожалуйста.