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()
}
}