Made requested changes-- added comments to Table variables, made a Suit type
Change-Id: I6c5b97fe6c1cf248c16d66a2c835492502d25cdc
diff --git a/go/src/sprites/card/card.go b/go/src/sprites/card/card.go
index 4aefce0..4417330 100644
--- a/go/src/sprites/card/card.go
+++ b/go/src/sprites/card/card.go
@@ -9,7 +9,16 @@
"golang.org/x/mobile/exp/sprite"
)
-func NewCard(n int, s string) *Card {
+type Suit string
+
+const (
+ Heart Suit = "H"
+ Diamond Suit = "D"
+ Spade Suit = "S"
+ Club Suit = "C"
+)
+
+func NewCard(n int, s Suit) *Card {
return &Card{
suit: s,
num: n,
@@ -22,7 +31,7 @@
}
type Card struct {
- suit string
+ suit Suit
//num ranges from 2-14; jack is 11, queen is 12, king is 13, ace is 14
num int
node *sprite.Node
@@ -32,7 +41,7 @@
height float32
}
-func (c *Card) GetSuit() string {
+func (c *Card) GetSuit() Suit {
return c.suit
}
diff --git a/go/src/sprites/logic_test.go b/go/src/sprites/logic_test.go
index 22f2465..d6c542d 100644
--- a/go/src/sprites/logic_test.go
+++ b/go/src/sprites/logic_test.go
@@ -22,10 +22,10 @@
players := []*player.Player{p0, p1, p2, p3}
t := table.NewTable(players)
t.SetFirstPlayed(1)
- t.PlayCard(card.NewCard(3, "H"), 1)
- t.PlayCard(card.NewCard(7, "H"), 2)
- t.PlayCard(card.NewCard(12, "S"), 3)
- t.PlayCard(card.NewCard(4, "D"), 0)
+ t.PlayCard(card.NewCard(3, card.Heart), 1)
+ t.PlayCard(card.NewCard(7, card.Heart), 2)
+ t.PlayCard(card.NewCard(12, card.Spade), 3)
+ t.PlayCard(card.NewCard(4, card.Diamond), 0)
t.SendTrick()
t.EndRound()
score := p0.GetScore()
@@ -58,16 +58,16 @@
players := []*player.Player{p0, p1, p2, p3}
t := table.NewTable(players)
t.SetFirstPlayed(1)
- t.PlayCard(card.NewCard(3, "H"), 1)
- t.PlayCard(card.NewCard(7, "H"), 2)
- t.PlayCard(card.NewCard(12, "S"), 3)
- t.PlayCard(card.NewCard(4, "D"), 0)
+ t.PlayCard(card.NewCard(3, card.Heart), 1)
+ t.PlayCard(card.NewCard(7, card.Heart), 2)
+ t.PlayCard(card.NewCard(12, card.Spade), 3)
+ t.PlayCard(card.NewCard(4, card.Diamond), 0)
t.SendTrick()
t.SetFirstPlayed(2)
- t.PlayCard(card.NewCard(5, "D"), 2)
- t.PlayCard(card.NewCard(2, "H"), 3)
- t.PlayCard(card.NewCard(13, "D"), 0)
- t.PlayCard(card.NewCard(14, "S"), 1)
+ t.PlayCard(card.NewCard(5, card.Diamond), 2)
+ t.PlayCard(card.NewCard(2, card.Heart), 3)
+ t.PlayCard(card.NewCard(13, card.Diamond), 0)
+ t.PlayCard(card.NewCard(14, card.Spade), 1)
t.SendTrick()
t.EndRound()
score := p0.GetScore()
@@ -100,29 +100,29 @@
players := []*player.Player{p0, p1, p2, p3}
t := table.NewTable(players)
t.SetFirstPlayed(1)
- t.PlayCard(card.NewCard(8, "H"), 1)
- t.PlayCard(card.NewCard(12, "S"), 2)
- t.PlayCard(card.NewCard(13, "S"), 3)
- t.PlayCard(card.NewCard(8, "C"), 0)
+ t.PlayCard(card.NewCard(8, card.Heart), 1)
+ t.PlayCard(card.NewCard(12, card.Spade), 2)
+ t.PlayCard(card.NewCard(13, card.Spade), 3)
+ t.PlayCard(card.NewCard(8, card.Club), 0)
t.SendTrick()
t.SetFirstPlayed(2)
- t.PlayCard(card.NewCard(5, "C"), 2)
- t.PlayCard(card.NewCard(2, "C"), 3)
- t.PlayCard(card.NewCard(13, "H"), 0)
- t.PlayCard(card.NewCard(11, "S"), 1)
+ t.PlayCard(card.NewCard(5, card.Club), 2)
+ t.PlayCard(card.NewCard(2, card.Club), 3)
+ t.PlayCard(card.NewCard(13, card.Heart), 0)
+ t.PlayCard(card.NewCard(11, card.Spade), 1)
t.SendTrick()
t.EndRound()
t.SetFirstPlayed(3)
- t.PlayCard(card.NewCard(5, "S"), 3)
- t.PlayCard(card.NewCard(6, "S"), 0)
- t.PlayCard(card.NewCard(7, "S"), 1)
- t.PlayCard(card.NewCard(10, "H"), 2)
+ t.PlayCard(card.NewCard(5, card.Spade), 3)
+ t.PlayCard(card.NewCard(6, card.Spade), 0)
+ t.PlayCard(card.NewCard(7, card.Spade), 1)
+ t.PlayCard(card.NewCard(10, card.Heart), 2)
t.SendTrick()
t.SetFirstPlayed(1)
- t.PlayCard(card.NewCard(6, "D"), 1)
- t.PlayCard(card.NewCard(2, "C"), 2)
- t.PlayCard(card.NewCard(13, "H"), 3)
- t.PlayCard(card.NewCard(11, "H"), 0)
+ t.PlayCard(card.NewCard(6, card.Diamond), 1)
+ t.PlayCard(card.NewCard(2, card.Club), 2)
+ t.PlayCard(card.NewCard(13, card.Heart), 3)
+ t.PlayCard(card.NewCard(11, card.Heart), 0)
t.SendTrick()
t.EndRound()
score := p0.GetScore()
@@ -203,12 +203,12 @@
//Testing playing a card-- HasSuit()
func TestSix(test *testing.T) {
p := player.NewPlayer(0)
- p.AddToHand(card.NewCard(6, "D"))
- p.AddToHand(card.NewCard(4, "S"))
- if p.HasSuit("D") == false || p.HasSuit("S") == false {
+ p.AddToHand(card.NewCard(6, card.Diamond))
+ p.AddToHand(card.NewCard(4, card.Spade))
+ if p.HasSuit(card.Diamond) == false || p.HasSuit(card.Spade) == false {
test.Errorf("False negative")
}
- if p.HasSuit("C") == true || p.HasSuit("H") == true {
+ if p.HasSuit(card.Club) == true || p.HasSuit(card.Heart) == true {
test.Errorf("False positive")
}
}
@@ -217,10 +217,10 @@
func TestSeven(test *testing.T) {
p1 := player.NewPlayer(0)
p2 := player.NewPlayer(1)
- p1.AddToHand(card.NewCard(6, "H"))
- p1.AddToHand(card.NewCard(12, "S"))
- p2.AddToHand(card.NewCard(2, "D"))
- p2.AddToHand(card.NewCard(5, "H"))
+ p1.AddToHand(card.NewCard(6, card.Heart))
+ p1.AddToHand(card.NewCard(12, card.Spade))
+ p2.AddToHand(card.NewCard(2, card.Diamond))
+ p2.AddToHand(card.NewCard(5, card.Heart))
if p1.HasAllPoints() == false {
test.Errorf("False negative")
}
@@ -235,9 +235,9 @@
players := []*player.Player{p0}
t := table.NewTable(players)
t.SetFirstPlayed(0)
- if t.ValidPlay(card.NewCard(8, "C"), 0) == true {
+ if t.ValidPlay(card.NewCard(8, card.Club), 0) == true {
test.Errorf("Expected invalid play for starting round with card other than 2 of Clubs")
- } else if t.ValidPlay(card.NewCard(2, "C"), 0) == false {
+ } else if t.ValidPlay(card.NewCard(2, card.Club), 0) == false {
test.Errorf("Expected valid play for starting round with 2 of Clubs")
}
}
@@ -246,13 +246,13 @@
func TestNine(test *testing.T) {
p0 := player.NewPlayer(0)
p1 := player.NewPlayer(1)
- p1.AddToHand(card.NewCard(12, "S"))
- p1.AddToHand(card.NewCard(3, "D"))
+ p1.AddToHand(card.NewCard(12, card.Spade))
+ p1.AddToHand(card.NewCard(3, card.Diamond))
players := []*player.Player{p0, p1}
t := table.NewTable(players)
t.SetFirstPlayed(0)
- t.PlayCard(card.NewCard(2, "C"), 0)
- if t.ValidPlay(card.NewCard(12, "S"), 1) == true {
+ t.PlayCard(card.NewCard(2, card.Club), 0)
+ if t.ValidPlay(card.NewCard(12, card.Spade), 1) == true {
test.Errorf("Expected invalid play for points on the first round")
}
}
@@ -261,29 +261,29 @@
func TestTen(test *testing.T) {
p0 := player.NewPlayer(0)
p1 := player.NewPlayer(1)
- p0.AddToHand(card.NewCard(5, "H"))
- p1.AddToHand(card.NewCard(2, "H"))
- p1.AddToHand(card.NewCard(3, "D"))
+ p0.AddToHand(card.NewCard(5, card.Heart))
+ p1.AddToHand(card.NewCard(2, card.Heart))
+ p1.AddToHand(card.NewCard(3, card.Diamond))
players := []*player.Player{p0, p1}
t := table.NewTable(players)
t.SetFirstPlayed(0)
- t.PlayCard(card.NewCard(2, "C"), 0)
- t.PlayCard(card.NewCard(3, "C"), 1)
+ t.PlayCard(card.NewCard(2, card.Club), 0)
+ t.PlayCard(card.NewCard(3, card.Club), 1)
t.SendTrick()
t.SetFirstPlayed(0)
- if t.ValidPlay(card.NewCard(5, "H"), 0) == false {
+ if t.ValidPlay(card.NewCard(5, card.Heart), 0) == false {
test.Errorf("Expected valid play for opener rightfully breaking Hearts")
}
t.SetFirstPlayed(1)
- if t.ValidPlay(card.NewCard(2, "H"), 1) == true {
+ if t.ValidPlay(card.NewCard(2, card.Heart), 1) == true {
test.Errorf("Expected invalid play for opener wrongfully breaking Hearts")
}
- t.PlayCard(card.NewCard(3, "D"), 1)
- if t.ValidPlay(card.NewCard(5, "H"), 0) == false {
+ t.PlayCard(card.NewCard(3, card.Diamond), 1)
+ if t.ValidPlay(card.NewCard(5, card.Heart), 0) == false {
test.Errorf("Expected valid play for follower rightfully breaking Hearts")
}
- p0.AddToHand(card.NewCard(7, "D"))
- if t.ValidPlay(card.NewCard(5, "H"), 0) == true {
+ p0.AddToHand(card.NewCard(7, card.Diamond))
+ if t.ValidPlay(card.NewCard(5, card.Heart), 0) == true {
test.Errorf("Expected invalid play for follower wrongfully breaking Hearts")
}
}
@@ -292,20 +292,20 @@
func TestEleven(test *testing.T) {
p0 := player.NewPlayer(0)
p1 := player.NewPlayer(1)
- p0.AddToHand(card.NewCard(2, "C"))
- p1.AddToHand(card.NewCard(3, "D"))
+ p0.AddToHand(card.NewCard(2, card.Club))
+ p1.AddToHand(card.NewCard(3, card.Diamond))
players := []*player.Player{p0, p1}
t := table.NewTable(players)
t.SetFirstPlayed(0)
- t.PlayCard(card.NewCard(2, "C"), 0)
- if t.ValidPlay(card.NewCard(3, "D"), 1) == false {
+ t.PlayCard(card.NewCard(2, card.Club), 0)
+ if t.ValidPlay(card.NewCard(3, card.Diamond), 1) == false {
test.Errorf("Expected valid play for not following suit when player doesn't have suit")
}
- p1.AddToHand(card.NewCard(5, "C"))
- if t.ValidPlay(card.NewCard(5, "C"), 1) == false {
+ p1.AddToHand(card.NewCard(5, card.Club))
+ if t.ValidPlay(card.NewCard(5, card.Club), 1) == false {
test.Errorf("Expected valid play for following suit")
}
- if t.ValidPlay(card.NewCard(3, "D"), 1) == true {
+ if t.ValidPlay(card.NewCard(3, card.Diamond), 1) == true {
test.Errorf("Expected invalid play for not following suit when player has suit")
}
}
@@ -316,11 +316,11 @@
players := []*player.Player{p0}
t := table.NewTable(players)
t.SetFirstPlayed(0)
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
winner := t.EndRound()
expect := -1
@@ -328,17 +328,17 @@
test.Errorf("Expected %d, got %d", expect, winner)
}
t.NewRound()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
- t.PlayCard(card.NewCard(12, "S"), 0)
+ t.PlayCard(card.NewCard(12, card.Spade), 0)
t.SendTrick()
winner = t.EndRound()
expect = 0
diff --git a/go/src/sprites/player/player.go b/go/src/sprites/player/player.go
index dee1739..8c839ab 100644
--- a/go/src/sprites/player/player.go
+++ b/go/src/sprites/player/player.go
@@ -50,10 +50,10 @@
func (p *Player) CalculateScore() int {
score := 0
- for _, card := range p.tricks {
- if card.GetSuit() == "H" {
+ for _, c := range p.tricks {
+ if c.GetSuit() == card.Heart {
score += 1
- } else if card.GetSuit() == "S" && card.GetNum() == 12 {
+ } else if c.GetSuit() == card.Spade && c.GetNum() == 12 {
score += 13
}
}
@@ -64,9 +64,9 @@
p.tricks = nil
}
-func (p *Player) HasSuit(suit string) bool {
- for _, card := range p.hand {
- if card.GetSuit() == suit {
+func (p *Player) HasSuit(suit card.Suit) bool {
+ for _, c := range p.hand {
+ if c.GetSuit() == suit {
return true
}
}
@@ -74,10 +74,10 @@
}
func (p *Player) HasAllPoints() bool {
- for _, card := range p.hand {
- if card.GetSuit() == "D" || card.GetSuit() == "C" {
+ for _, c := range p.hand {
+ if c.GetSuit() == card.Diamond || c.GetSuit() == card.Club {
return false
- } else if card.GetSuit() == "S" && card.GetNum() != 12 {
+ } else if c.GetSuit() == card.Spade && c.GetNum() != 12 {
return false
}
}
diff --git a/go/src/sprites/table/table.go b/go/src/sprites/table/table.go
index 8816922..fa0d0f1 100644
--- a/go/src/sprites/table/table.go
+++ b/go/src/sprites/table/table.go
@@ -23,14 +23,20 @@
}
type Table struct {
- //players and trick should each have 4 elements
+ //players contains all players in the game, indexed by playerIndex
players []*player.Player
- trick []*card.Card
+ //trick contains all cards in the current trick, indexed by the playerIndex of the player who played them
+ trick []*card.Card
//firstPlayed is the index in trick of the card played first
- firstPlayed int
- allCards []*card.Card
+ firstPlayed int
+ //allCards contains all 52 cards in the deck. GenerateCards() populates this
+ allCards []*card.Card
+ //heartsBroken returns true if a heart has been played yet in the round, otherwise false
heartsBroken bool
- firstTrick bool
+ //firstTrick returns true if the current trick is the first in the round, otherwise false
+ firstTrick bool
+ //winCondition is the number of points needed to win the game
+ //traditionally 100, could set higher or lower for longer or shorter game
winCondition int
}
@@ -45,16 +51,16 @@
func (t *Table) GenerateCards() {
t.allCards = make([]*card.Card, 0)
for i := 0; i < 13; i++ {
- t.allCards = append(t.allCards, card.NewCard(i+2, "C"))
- t.allCards = append(t.allCards, card.NewCard(i+2, "D"))
- t.allCards = append(t.allCards, card.NewCard(i+2, "S"))
- t.allCards = append(t.allCards, card.NewCard(i+2, "H"))
+ t.allCards = append(t.allCards, card.NewCard(i+2, card.Club))
+ t.allCards = append(t.allCards, card.NewCard(i+2, card.Diamond))
+ t.allCards = append(t.allCards, card.NewCard(i+2, card.Spade))
+ t.allCards = append(t.allCards, card.NewCard(i+2, card.Heart))
}
}
func (t *Table) PlayCard(c *card.Card, playerIndex int) {
t.trick[playerIndex] = c
- if c.GetSuit() == "H" && t.heartsBroken == false {
+ if c.GetSuit() == card.Heart && t.heartsBroken == false {
t.heartsBroken = true
}
}
@@ -63,12 +69,14 @@
player := t.players[playerIndex]
if t.firstPlayed == playerIndex {
if t.firstTrick == false {
- if c.GetSuit() != "H" || t.heartsBroken == true {
+ if c.GetSuit() != card.Heart || t.heartsBroken == true {
return true
- } else if player.HasSuit("C") == false && player.HasSuit("D") == false && player.HasSuit("S") == false {
- return true
+ } else {
+ if player.HasSuit(card.Club) == false && player.HasSuit(card.Diamond) == false && player.HasSuit(card.Spade) == false {
+ return true
+ }
}
- } else if c.GetSuit() == "C" && c.GetNum() == 2 {
+ } else if c.GetSuit() == card.Club && c.GetNum() == 2 {
return true
}
} else {
@@ -76,7 +84,7 @@
if c.GetSuit() == firstPlayedSuit || player.HasSuit(firstPlayedSuit) == false {
if t.firstTrick == false {
return true
- } else if c.GetSuit() == "D" || c.GetSuit() == "C" || (c.GetSuit() == "S" && c.GetNum() != 12) {
+ } else if c.GetSuit() == card.Diamond || c.GetSuit() == card.Club || (c.GetSuit() == card.Spade && c.GetNum() != 12) {
return true
} else if player.HasAllPoints() == true {
return true