diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-06-16 21:42:11 -0500 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:57:20 +0200 |
| commit | d0ef05a6aa0464dec5deb02741f159bee6050bbc (patch) | |
| tree | 517000a63320d0694b737bc2a4f75099be98ac00 /go | |
| parent | f9d0181147c7d6a31ea7e244cc7f4445a14d3cb8 (diff) | |
| download | muhqs-game-d0ef05a6aa0464dec5deb02741f159bee6050bbc.tar.gz muhqs-game-d0ef05a6aa0464dec5deb02741f159bee6050bbc.zip | |
support marshaling and unmarshaling of PoCs
Diffstat (limited to 'go')
| -rw-r--r-- | go/game/pileOfCards.go | 32 | ||||
| -rw-r--r-- | go/game/pileOfCards_test.go | 25 |
2 files changed, 57 insertions, 0 deletions
diff --git a/go/game/pileOfCards.go b/go/game/pileOfCards.go index 0ad0f157..88a3c750 100644 --- a/go/game/pileOfCards.go +++ b/go/game/pileOfCards.go @@ -1,8 +1,10 @@ package game import ( + "errors" "fmt" "math/rand" + "strings" "golang.org/x/exp/slices" ) @@ -28,6 +30,36 @@ func NewPileOfCards() *PileOfCardsBase { return &PileOfCardsBase{[]*Card{}} } +// Stringify to a []-bracket enclosed comma-seperated list of card names. +func (poc *PileOfCardsBase) String() string { + cardNames := make([]string, 0, len(poc.Cards())) + for _, card := range poc.Cards() { + cardNames = append(cardNames, card.Path()) + } + return fmt.Sprintf("[%s]", strings.Join(cardNames, ", ")) +} + +var InvalidPocString = errors.New("Invalid PileOfCards format") + +// Initialise a PileOfCard from a string. +// Return InvalidPocString on error. +func (poc *PileOfCardsBase) FromString(in string) error { + if in[0] != '[' || in[len(in)-1] != ']' { + return InvalidPocString + } + + in = in[1 : len(in)-1] + + for cardName := range strings.SplitSeq(in, ", ") { + if card, err := NewCardSafe(cardName); err != nil { + return err + } else { + poc.AddCard(card) + } + } + return nil +} + func (poc *PileOfCardsBase) Size() int { return len(poc.cards) } diff --git a/go/game/pileOfCards_test.go b/go/game/pileOfCards_test.go new file mode 100644 index 00000000..0c9532fe --- /dev/null +++ b/go/game/pileOfCards_test.go @@ -0,0 +1,25 @@ +package game + +import ( + "testing" +) + +func TestPocToString(t *testing.T) { + poc := NewPileOfCards() + cards := []*Card{NewCard("base/archer"), NewCard("magic/ritual!")} + poc.AddCards(cards) + exp := "[base/archer, magic/ritual!]" + is := poc.String() + if is != exp { + t.Fatalf("expected string %s does not match %s\n", exp, is) + } +} + +func TestPocFromString(t *testing.T) { + poc := NewPileOfCards() + in := "[base/archer, magic/ritual!]" + err := poc.FromString(in) + if err != nil { + t.Fatal(err) + } +} |
