$constant maxtokens = 12 $constant machine = 0 $constant human = 1 $constant false = 0 $constant true = 0FFFFH procedure welcome print "Welcome to the Game of Nim." print "We begin with";maxtokens;" tokens. On each turn, a player" print "may take between 1 and 3 tokens. The player who takes the" print "last token wins." print end procedure show(n = integer) var i = integer print "Available tokens:";n;" "; rem - provide a visual display for i = 1 to n print "o "; next i print end function getnum(lowlim, toplim = integer) = integer var ok, n = integer repeat begin input "You take:";n if n < lowlim or n > toplim then begin print "Must take between";lowlim;" and";toplim print "Try again." ok = false end else ok = true end until ok end = n function play(player, tokens, taken = integer) = integer if player = human then taken = getnum(1,3) else begin if tokens <= 3 then taken = tokens else taken = 4 - taken end end = taken procedure report(player = integer) if player = human then print "You took the last one. You win. Congratulations!" else print "I took the last one, so I win. Sorry about that." end var player, tokens, taken = integer welcome tokens = maxtokens taken = 0 player = human print "You go first." repeat begin show tokens taken = play(player, tokens, taken) if player = machine then print "I took:";taken tokens = tokens - taken if tokens > 0 then player = 1 - player end until tokens <= 0 report player print "Thanks for playing!" end