#include <iostream>
#include "Deck.h"
#include "string"
#include <cstdlib>
deck::deck() :card{ "Ace", "King", "Queen", "Jack","Ten","9","8","7","6","5","4","3","2" }, suit{"Clubs","Diamonds","Spades","Hearts"},
card_short{ "A", "K", "Q", "J","T","9","8","7","6","5","4","3","2" }, suit_short{ "c","d","s","h" }
{
check = 0;
}
deck::~deck()
{
}
void deck::deal()
{
cards = shuffle();
std::cout << cards;
}
std::string deck::shuffle()
{
failsafe = 0; //Är bara till för att förhindra en oändlig loop tills problemet är löst.
c = rand() % 12; //Bestämmer vilket värde kortet har som printas.
s = rand() & 3; //Bestämmer vilken färg kortet har som printas.
while (dup_check(c, s)) { //Denna while loop säkerställer att vi inte printar en kopia på något kort men fastnar av någon anledning i en loop när vi försöker printa 40+ kort.
c = rand() % 12;
s = rand() & 3;
}
return card_short[c]+suit_short[s]+" - "+card[c]+" of "+suit[s];
}
bool deck::dup_check(int x, int y) {
if (failsafe > 52) { //Denna if funktion kontrollerar så ingen oändlig loop är igång men bara tillfälligt tills problemet är löst.
std::cout << "----- ----- ----- dup_check() stuck in infinite loop detected.\n";
return false;
}
for (int z = 0; z < check; z++) {
if (dupx[z] == x && dupy[z] == y) { //Av någon anledning när vi försöker printa 40+ kort så loopas denna if funktion hela tiden.. varför?
failsafe++; //Berättar för programmet hur många gånger vi loopat utan att komma vidare (tillfällig lösning).
return true;
}
}
dupx[check] = x;
dupy[check] = y;
check++;
return false;
}
[Deck.cpp] Här är koden som fastnar i en loop när vi printar 40+ kort.