/usr/share/gocode/src/github.com/smartystreets/goconvey/examples/bowling_game.go is in golang-github-smartystreets-goconvey-dev 1.5.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package examples
type Game struct {
rolls []int
rollIndex int
}
func NewGame() *Game {
game := Game{}
game.rolls = make([]int, 21)
return &game
}
func (self *Game) Roll(pins int) {
self.rolls[self.rollIndex] = pins
self.rollIndex++
}
func (self *Game) Score() int {
sum, throw, frame := 0, 0, 0
for ; frame < 10; frame++ {
if self.isStrike(throw) {
sum += self.strikeBonus(throw)
throw += 1
} else if self.isSpare(throw) {
sum += self.spareBonus(throw)
throw += 2
} else {
sum += self.currentFrame(throw)
throw += 2
}
}
return sum
}
func (self *Game) isStrike(throw int) bool {
return self.rolls[throw] == 10
}
func (self *Game) isSpare(throw int) bool {
return self.rolls[throw]+self.rolls[throw+1] == 10
}
func (self *Game) strikeBonus(throw int) int {
return 10 + self.rolls[throw+1] + self.rolls[throw+2]
}
func (self *Game) spareBonus(throw int) int {
return 10 + self.rolls[throw+2]
}
func (self *Game) currentFrame(throw int) int {
return self.rolls[throw] + self.rolls[throw+1]
}
|