-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathcardBag.go
79 lines (69 loc) · 1.87 KB
/
cardBag.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
* Copyright 2011 Colin Patrick McCabe
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package main
import (
"fmt"
"sort"
)
type CardBag struct {
allCards CardSlice
}
func Make52CardBag() *CardBag {
// generate a CardBag that has every possible card
bag := &CardBag { make(CardSlice, 52) }
idx := 0
for val := 2; val <= 14; val++ {
for suit := range([]int { DIAMONDS, CLUBS, HEARTS, SPADES }) {
bag.allCards[idx] = new(Card)
bag.allCards[idx].suit = suit
bag.allCards[idx].val = val
idx++
}
}
sort.Sort(bag.allCards)
return bag
}
func (bag *CardBag) Clone() *CardBag {
ret := new(CardBag)
ret.allCards = bag.allCards
return ret
}
func (bag *CardBag) Subtract(c *Card) {
nextAllCards := make(CardSlice, len(bag.allCards) - 1)
i := 0
for i = 0; i < len(bag.allCards); i++ {
if (bag.allCards[i].Compare(c) == 0) {
break
}
}
if (i == len(bag.allCards)) {
panic(fmt.Sprintf("tried to subtract %v from this cardbag, but " +
"it doesn't currently contain that card.", c))
}
copy(nextAllCards[0:i], bag.allCards[0:i])
copy(nextAllCards[i:], bag.allCards[i+1:])
bag.allCards = nextAllCards
}
func (bag *CardBag) Get(num uint) *Card {
return bag.allCards[num]
}
func (bag *CardBag) Len() int {
return len(bag.allCards)
}
func (bag *CardBag) String() string {
return fmt.Sprintf("CardBag{allCards=%v}",
bag.allCards)
}