aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-07-03 21:58:12 -0400
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:22 +0200
commitce22bf133cc341e64a106152e486ba410436710f (patch)
tree50e8cc2de9c07c9b4faf55e7e6cdd4daf8f3a358
parent98c95cdae3193741fd97c0662e6d3397076b8bdb (diff)
downloadmuhqs-game-ce22bf133cc341e64a106152e486ba410436710f.tar.gz
muhqs-game-ce22bf133cc341e64a106152e486ba410436710f.zip
add RandomCard and String to PoC interface
-rw-r--r--go/game/pileOfCards.go17
1 files changed, 15 insertions, 2 deletions
diff --git a/go/game/pileOfCards.go b/go/game/pileOfCards.go
index 88a3c750..27ecb09d 100644
--- a/go/game/pileOfCards.go
+++ b/go/game/pileOfCards.go
@@ -17,9 +17,11 @@ type PileOfCards interface {
AddCards(cards []*Card)
AddCard(card *Card)
RemoveCard(card *Card)
+ RandomCard() *Card
MoveCard(card *Card, into PileOfCards)
MoveInto(into PileOfCards)
ToList() string
+ String() string
}
type PileOfCardsBase struct {
@@ -39,13 +41,13 @@ func (poc *PileOfCardsBase) String() string {
return fmt.Sprintf("[%s]", strings.Join(cardNames, ", "))
}
-var InvalidPocString = errors.New("Invalid PileOfCards format")
+var ErrInvalidPocString = 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
+ return ErrInvalidPocString
}
in = in[1 : len(in)-1]
@@ -106,6 +108,17 @@ func (poc *PileOfCardsBase) RemoveCard(card *Card) {
}
}
+func (poc *PileOfCardsBase) RandomCard() *Card {
+ availCards := poc.Cards()
+ var pick int
+ if n := len(availCards); n > 1 {
+ pick = rand.Intn(n - 1)
+ } else {
+ pick = 0
+ }
+ return availCards[pick]
+}
+
func (poc *PileOfCardsBase) MoveCard(c *Card, into PileOfCards) {
poc.RemoveCard(c)
into.AddCard(c)