Write definitions for all the procedures that are in bold and use the skeleton (or outline) below to make the program NIM work. The computer should play perfectly, and win whenever possible. The game starts with some number of sticks between 1 and 20, and the player and computer alternate turns taking 1, 2 or 3 sticks until all the sticks are gone. The one to take the last stick wins. The details of the game strategy will be discovered in class. Your program need not be very fancy graphically, but it should do all input/output on the Graphics window rather than on the "listener" screen.
The outline is carefully designed:
a. Every method exits back to the method that called it, (there is no "winding up" of procedure calls) and
b. Each loop is clear and simple tail recursion.
Stray from the outline at your own risk. The main theme here is appreciating the notion of top-down design, understanding the program outline, and in the future, using this outline to learn how to make the outline for your project.
make "player_win 0 ; variable to hold number of times user wins
make "comp_win 0 ; variable counting number of times computer wins
Explain_Rules ; explains rules until user clicks the mouse or types ok.
Bye_Bye ; prints out summary of wins and losses
make "sticks random 20 ; Game can have up to 20 sticks
if not playagain? then stop ; this prints a summary of wins and losses so far and asks the player if
Play_the_Game ; he/she wants to play again
; and outputs “true or “false
printsticks ; This prints a picture of the sticks and the number of sticks
if not gofirst? then comp_move ; gofirst? should ask the player if
; he/she wants to go first, and output
; “true or “false appropriately
if win? then printwinc make "comp_win (+ :comp_win 1) stop
;win? checks if the number of
sticks is 0 and outputs "true or "false
; printwinc prints a congratulatory message to the computer
This uses a GUI to let the player choose 1, 2, or 3 sticks
; modifies “sticks, and
; prints out a new picture.
if win? then printwinp make "player_win (+ :player_win 1) stop
; printwinp prints a congratulatory message to the player
; The computer makes its move, prints the number of sticks it
; modifies "sticks, and prints out a new picture.
; Before the computer moves, it is nice to ask the user to hit
; any key when he/she is ready for the computer to move
; This lets the user see the sticks after his/her move before the computer changes it.