const (
WEAK = iota
NORMAL
STRONG
JOKER
GOD
)
// 게임에 사용할 카드 종류는 고정되어 있으므로 미리 정의해둔다.
var CardPool = map[int]Card{
0: {0, JOKER, "1광"}, 1: {0, NORMAL, "1-10점"}, 2: {0, NORMAL, "1-5점"}, 3: {0, WEAK, "1-피"},
4: {0, JOKER, "똥광"}, 5: {0, NORMAL, "똥-5점"}, 6: {0, STRONG, "똥쌍피"}, 7: {0, STRONG, "똥쓰리피"},
8: {0, JOKER, "비광"}, 9: {0, NORMAL, "비-5점"}, 10: {0, STRONG, "비쌍피"}, 11: {0, WEAK, "비껍데기"}}
// CardPool의 카드들을 섞은 새로운 카드 스택을 리턴한다.
func NewGodoriStack() []Card {
// 새로 순서가 정해진 카드 슬라이스를 CardPool 개수만큼 미리 만들어둔다
cards := make([]Card, 0, len(CardPool))
// 0 ~ len(CardPool) 범위 안의 자연수를 랜덤하게 가진다
rand.Seed(time.Nanoseconds())
keys := rand.Perm(len(CardPool))
// 랜덤하게 생성된 CardPool 키 값으로 리턴할 cards 슬라이스를 차례로 채운다
for idx, key := range keys {
one := CardPool[key]
one.idx = idx
cards = append(cards, one)
}
return cards
}
func main() {
cards := NewGodoriStack()
fmt.Printf("== Card count: %d\n", len(cards))
fmt.Printf("== Card info\n")
for _, v := range cards {
fmt.Printf("%v\n", v)
}
}
===========================================================================