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