Pig is a folk jeopardy dice game described by John Scarne in 1945, and was an ancestor of the modern game Pass the Pigs® (originally called PigMania®).
The rules are simple: Two players race to reach 100 points. Each turn, a player repeatedly rolls a die until either a 1 is rolled or the player holds and scores the sum of the rolls (i.e. the turn total). At any time during a player's turn, the player is faced with two decisions:
To familiarize yourself with play, you can play an optimal Pig opponent online. The key decision facing a player is how large a turn total should be risked to possibly get an even larger total. To learn more about the game of Pig, visit The Game of Pig web page.
|Summary||The Game of Pig - Milestone-based approach to implementation of the dice game Pig with side opportunities for simple, interesting analysis driven by curiosity to better understand game play. Also includes object-oriented and GUI programming exercises.|
|Topics||Bottom-up, milestone-based development, dynamic programming and Monte Carlo analysis techniques.|
|Audience||Assignment suite below is appropriate for CS1. Upper-level Pig-related assignments for networking, artificial intelligence, etc. are described in Pedagogical Possibilities for the Dice Game Pig. Journal of Computing Sciences in Colleges, vol. 21, no. 6, pp. 149-161, June 2006.|
|Difficulty||These assignments range from beginner to intermediate difficulty. CS1 students complete all but the object-oriented and GUI programming assignments in less than 3 weeks.|
|Strengths||Pig offers one of the best fun-to-SLOC (source lines of code) ratios of any game. One would be hard pressed to find another game with such simple rules that engages and leaves one on the knife-edge of indecision. As such, it is a teaching treasure. Mathematics instructors have long used this game to teach probabilistic concepts. We here offer a rich collection of CS1 Pig exercises that illustrate bottom-up development. Alternatively, one can approach the final "Pig Game" exercise as a good top-down, stepwise refinement exercise. Opportunities for Monte Carlo simulation abound.|
|Weaknesses||Except for GUI assignment, text-based and non-graphical.|
|Dependencies||Most assignments require only understanding of random number generation, text I/O, and simple control structures. GUI assignment requires additional understanding of basic GUI concepts and components including labels, buttons, panel image display, and popup window dialogs. O-O assignment requires understand of basic O-O concepts, including interfaces.|
|Variants||One can easily create variants by choosing different play policies and/or rule variations. Both are described in detail below.|
Each exercise below may be used stand-alone or in a logical sequence of milestones.
|Problem Description||Previous Milestone|
|Hold-at-20 Turn - simulate a single turn of Pig where a player holds at 20 points|
|Hold-at-20 Outcomes (Estimation) - statistics on Monte Carlo simulations of hold-at-20 turn outcomes||Hold-at-20 Turn|
|Hold-at-20 Outcomes (Computation) - dynamic programming computation of hold-at-20 turn outcomes||Hold-at-20 Turn|
|Hold-at-20-or-Goal Turn - simulate a single turn of Pig where a player holds at 20 points or the goal score||Hold-at-20 Turn|
|Hold-at-20-or-Goal Game - simulate a single game of Pig where a player holds at 20 points or the goal score||Hold-at-20-or-Goal Turn|
|Average Pig Turns - average turns of Monte Carlo simulations of hold-at-20-or-goal games||Hold-at-20-or-Goal Game|
|Two-Player Pig - simulate a single two-player game of Pig with hold-at-20-or-goal players||Hold-at-20-or-Goal Game|
|First-Player Advantage - Monte Carlo simulations estimate the first-player advantage in hold-at-20-or-goal Pig||Two-Player Pig|
|Pig Game - the user plays Pig versus a hold-at-20-or-goal player||Two-Player Pig|
|O-O Pig Game - the user plays Pig versus a hold-at-20-or-goal player. Implementation is object-oriented.|
|Pig Game GUI - the user plays Pig versus a keep-pace-and-end-race player via a GUI|
Different subsets of these exercises may be chosen according to different
desired goals/emphases. For example:
Pig Game Milestone track: Hold-at-20 Turn, Hold-at-20-or-Goal Turn, Hold-at-20-or-Goal Game, Two-Player Pig, Pig Game
Monte Carlo track: Hold-at-20 Turn, Hold-at-20 Outcomes (Estimation), Hold-at-20-or-Goal Turn, Hold-at-20-or-Goal Game, Average Pig Turns, Two-Player Pig, First-Player Advantage
Cut-to-the-Chase GUI track: Pig Game GUI
Minimalist O-O track: O-O Pig Game
Creating variations of the these exercises is simple. One can both vary the simulated play policy, and/or rule variations.
Pig Play Policies: Let i be the player's score, j be the opponent's score, and k be the current turn total.
With the many ways the problem set above may be thus varied, it is not difficult to craft a unique (i.e. not easily plagiarized) assignment experience for your students.
With its simple rules and engaging play, Pig lends itself to many uses across the Computer Science curriculum: