fix infinite check bug
[rofl0r-oopoker.git] / deck.cpp
blob5f150f9dcf7a4895f7a196578253c2582503ca3c
1 /*
2 OOPoker
4 Copyright (c) 2010 Lode Vandevenne
5 All rights reserved.
7 This file is part of OOPoker.
9 OOPoker is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
14 OOPoker is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with OOPoker. If not, see <http://www.gnu.org/licenses/>.
23 #include "deck.h"
24 #include "random.h"
26 Deck::Deck()
27 : index(0)
29 for(size_t i = 0; i < 52; i++) cards[i].setIndex(i);
32 void Deck::shuffle()
34 index = 0;
36 Card old[52];
37 for(size_t i = 0; i < 52; i++) old[i] = cards[i];
39 //Fisher-Yates shuffle
40 for(size_t i = 0; i < 52; i++)
42 int r = (int)(getRandom() * (52 - i));
43 cards[i] = old[r];
44 std::swap(old[r], old[(52 - 1 - i)]);
49 Card Deck::next()
51 if(index >= 52) return Card();
53 Card result = cards[index];
54 index++;
55 return result;