Re-examined for loops in player and table to eliminate constants and meaningless variables wherever possible

Change-Id: Iefa7a665400efb9a721016a5d190159eb5057890
diff --git a/go/src/sprites/logic_test.go b/go/src/sprites/logic_test.go
index f96ac01..2c933ef 100644
--- a/go/src/sprites/logic_test.go
+++ b/go/src/sprites/logic_test.go
@@ -7,9 +7,10 @@
 	"testing"
 )
 
-//Testing scoring
+//Testing scoring after 1 trick
 func TestOne(test *testing.T) {
-	expect := 15
+	p2Expect := 15
+	otherExpect := 0
 	p0 := player.NewPlayer(0)
 	p1 := player.NewPlayer(1)
 	p2 := player.NewPlayer(2)
@@ -22,15 +23,124 @@
 	t.PlayCard(card.NewCard(12, "S"), 3)
 	t.PlayCard(card.NewCard(4, "D"), 0)
 	t.SendTrick()
-	t.ScoreRound()
-	score := p2.GetScore()
-	if score != expect {
-		test.Errorf("Expected %d, got %d", expect, score)
+	t.EndRound()
+	score := p0.GetScore()
+	if score != otherExpect {
+		test.Errorf("Expected %d, got %d", otherExpect, score)
+	}
+	score = p1.GetScore()
+	if score != otherExpect {
+		test.Errorf("Expected %d, got %d", otherExpect, score)
+	}
+	score = p2.GetScore()
+	if score != p2Expect {
+		test.Errorf("Expected %d, got %d", p2Expect, score)
+	}
+	score = p3.GetScore()
+	if score != otherExpect {
+		test.Errorf("Expected %d, got %d", otherExpect, score)
+	}
+}
+
+//Testing scoring after multiple tricks
+func TestTwo(test *testing.T) {
+	p0Expect := 1
+	p2Expect := 15
+	otherExpect := 0
+	p0 := player.NewPlayer(0)
+	p1 := player.NewPlayer(1)
+	p2 := player.NewPlayer(2)
+	p3 := player.NewPlayer(3)
+	players := []*player.Player{p0, p1, p2, p3}
+	t := table.NewTable(players)
+	t.SetFirst(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.SendTrick()
+	t.SetFirst(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.SendTrick()
+	t.EndRound()
+	score := p0.GetScore()
+	if score != p0Expect {
+		test.Errorf("Expected %d, got %d", p0Expect, score)
+	}
+	score = p1.GetScore()
+	if score != otherExpect {
+		test.Errorf("Expected %d, got %d", otherExpect, score)
+	}
+	score = p2.GetScore()
+	if score != p2Expect {
+		test.Errorf("Expected %d, got %d", p2Expect, score)
+	}
+	score = p3.GetScore()
+	if score != otherExpect {
+		test.Errorf("Expected %d, got %d", otherExpect, score)
+	}
+}
+
+//Testing scoring after multiple rounds
+func TestThree(test *testing.T) {
+	p1Expect := 17
+	p2Expect := 1
+	otherExpect := 0
+	p0 := player.NewPlayer(0)
+	p1 := player.NewPlayer(1)
+	p2 := player.NewPlayer(2)
+	p3 := player.NewPlayer(3)
+	players := []*player.Player{p0, p1, p2, p3}
+	t := table.NewTable(players)
+	t.SetFirst(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.SendTrick()
+	t.SetFirst(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.SendTrick()
+	t.EndRound()
+	t.SetFirst(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.SendTrick()
+	t.SetFirst(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.SendTrick()
+	t.EndRound()
+	score := p0.GetScore()
+	if score != otherExpect {
+		test.Errorf("Expected %d, got %d", otherExpect, score)
+	}
+	score = p1.GetScore()
+	if score != p1Expect {
+		test.Errorf("Expected %d, got %d", p1Expect, score)
+	}
+	score = p2.GetScore()
+	if score != p2Expect {
+		test.Errorf("Expected %d, got %d", p2Expect, score)
+	}
+	score = p3.GetScore()
+	if score != otherExpect {
+		test.Errorf("Expected %d, got %d", otherExpect, score)
 	}
 }
 
 //Testing dealing to make sure no duplicates are dealt
-func TestTwo(test *testing.T) {
+func TestFour(test *testing.T) {
 	p0 := player.NewPlayer(0)
 	p1 := player.NewPlayer(1)
 	p2 := player.NewPlayer(2)
@@ -67,3 +177,34 @@
 		}
 	}
 }
+
+//Testing dealing to make sure enough cards are dealt
+func TestFive(test *testing.T) {
+	expect := 13
+	p0 := player.NewPlayer(0)
+	p1 := player.NewPlayer(1)
+	p2 := player.NewPlayer(2)
+	p3 := player.NewPlayer(3)
+	players := []*player.Player{p0, p1, p2, p3}
+	t := table.NewTable(players)
+	t.GenerateCards()
+	t.Deal()
+	for i := 0; i < 4; i++ {
+		if len(players[i].GetHand()) != expect {
+			test.Errorf("Expected %d cards in the hand of player %d, got %d cards", expect, i, len(players[i].GetHand()))
+		}
+	}
+}
+
+//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 {
+		test.Errorf("False negative")
+	}
+	if p.HasSuit("C") == true || p.HasSuit("H") == true {
+		test.Errorf("False positive")
+	}
+}
diff --git a/go/src/sprites/player/player.go b/go/src/sprites/player/player.go
index c909916..08fe143 100644
--- a/go/src/sprites/player/player.go
+++ b/go/src/sprites/player/player.go
@@ -28,8 +28,8 @@
 	return p.score
 }
 
-func (p *Player) SetHand(cards []*card.Card) {
-	p.hand = cards
+func (p *Player) AddToHand(card *card.Card) {
+	p.hand = append(p.hand, card)
 }
 
 func (p *Player) TakeTrick(cards []*card.Card) {
@@ -42,13 +42,25 @@
 
 func (p *Player) CalculateScore() int {
 	score := 0
-	for i := 0; i < len(p.tricks); i++ {
-		curCard := p.tricks[i]
-		if curCard.GetSuit() == "H" {
+	for _, card := range p.tricks {
+		if card.GetSuit() == "H" {
 			score += 1
-		} else if curCard.GetSuit() == "S" && curCard.GetNum() == 12 {
+		} else if card.GetSuit() == "S" && card.GetNum() == 12 {
 			score += 13
 		}
 	}
 	return score
 }
+
+func (p *Player) ResetTricks() {
+	p.tricks = nil
+}
+
+func (p *Player) HasSuit(suit string) bool {
+	for _, card := range p.hand {
+		if card.GetSuit() == suit {
+			return true
+		}
+	}
+	return false
+}
diff --git a/go/src/sprites/table/table.go b/go/src/sprites/table/table.go
index de2cddb..b9c47c5 100644
--- a/go/src/sprites/table/table.go
+++ b/go/src/sprites/table/table.go
@@ -50,7 +50,7 @@
 	trickSuit := t.trick[t.firstPlayed].GetSuit()
 	highest := -1
 	highestIndex := -1
-	for i := 0; i < 4; i++ {
+	for i := 0; i < len(t.trick); i++ {
 		curCard := t.trick[i]
 		if curCard.GetSuit() == trickSuit && curCard.GetNum() > highest {
 			highest = curCard.GetNum()
@@ -65,10 +65,10 @@
 }
 
 func (t *Table) ScoreRound() {
-	roundScores := []int{0, 0, 0, 0}
+	roundScores := make([]int, len(t.players))
 	shotMoon := false
 	shooter := -1
-	for i := 0; i < 4; i++ {
+	for i := 0; i < len(t.players); i++ {
 		roundScores[i] = t.players[i].CalculateScore()
 		if roundScores[i] == 26 {
 			shotMoon = true
@@ -77,7 +77,7 @@
 	}
 	//if the moon was shot
 	if shotMoon == true {
-		for i := 0; i < 4; i++ {
+		for i := 0; i < len(t.players); i++ {
 			if i == shooter {
 				roundScores[i] = 0
 			} else {
@@ -86,21 +86,25 @@
 		}
 	}
 	//sending scores to players
-	for i := 0; i < 4; i++ {
+	for i := 0; i < len(t.players); i++ {
 		t.players[i].UpdateScore(roundScores[i])
 	}
 }
 
 func (t *Table) Deal() {
+	numPlayers := len(t.players)
 	if t.allCards == nil {
 		t.GenerateCards()
 	}
 	shuffle := rand.Perm(52)
-	for i := 0; i < 4; i++ {
-		hand := make([]*card.Card, 0)
-		for j := 0; j < 13; j++ {
-			hand = append(hand, t.allCards[shuffle[j+13*i]])
-		}
-		t.players[i].SetHand(hand)
+	for i := 0; i < len(t.allCards); i++ {
+		t.players[i%numPlayers].AddToHand(t.allCards[shuffle[i]])
+	}
+}
+
+func (t *Table) EndRound() {
+	t.ScoreRound()
+	for _, p := range t.players {
+		p.ResetTricks()
 	}
 }