turn.
</step>
-<step title="Multiple return values" src="doc/codewalk/pig.go:/\/\/ roll returns/,/stay.*true\n}/">
+<step title="Multiple return values" src="doc/codewalk/pig.go:/\/\/ roll returns/,/true\n}/">
Go functions can return multiple values.
<br/><br/>
associated with the current player.
</step>
-<step title="Comparing functions" src="doc/codewalk/pig.go:/if action/,/currentPlayer\)\)\n\t\t}/">
- Functions can be compared for equality in Go. From the
- <a href="http://golang.org/doc/go_spec.html#Comparison_operators">language specification</a>:
- Function values are equal if they refer to the same function or if both are <code>nil</code>.
- <br/><br/>
-
- We enforce that a <code>strategy</code> function can only return a legal
- <code>action</code>: either <code>roll</code> or <code>stay</code>.
-</step>
-
<step title="Simulating a tournament" src="doc/codewalk/pig.go:/\/\/ roundRobin/,/gamesPerStrategy\n}/">
The <code>roundRobin</code> function simulates a tournament and tallies wins.
Each strategy plays each other strategy <code>gamesPerSeries</code> times.
currentPlayer := rand.Intn(2) // Randomly decide who plays first
for s.player+s.thisTurn < win {
action := strategies[currentPlayer](s)
- if action != roll && action != stay {
- panic(fmt.Sprintf("Player %d is cheating", currentPlayer))
- }
s, turnIsOver = action(s)
if turnIsOver {
currentPlayer = (currentPlayer + 1) % 2