'=========================================================================== ' Subject: GAME OF NIM Date: 10/96 (00:00) ' Author: Steven Anthony Morisi Code: QB, QBasic, PDS ' Origin: steve179@ix.netcom.com Packet: GAMES.ABC '=========================================================================== DECLARE SUB tokens () DECLARE SUB cputakes () '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Date : 10/96 ' 'Author : Steven A. Morisi ' 'E-Mail : steve179@ix.netcom.com ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Overview ' 'The game of NIM is played between 2 players ' 'There are 15 counters to start. On a turn a player must take either ' '1,2 or 3 counters. The player who takes the last counter loses. ' '(there are variations where Taking the last counter wins). ' 'This program does NOT use perfect play ( since it was written to ' 'amuse my kids!) You can find the logic in several books. Try ' 'Martin Gardners Scientific American Compilations ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' SCREEN 9 ' 640 x 350 DIM SHARED remaining% COLOR 7, 1 'Start of game .... 15 tokens remaining% = 15 done$ = "NO" tokens COLOR 7, 1 DO UNTIL done$ = "YES" move$ = "NG" DO UNTIL move$ = "OK" LOCATE 18, 23: PRINT "How many will you remove " LOCATE 18, 55: INPUT number% IF number% = 1 OR number% = 2 OR number% = 3 THEN move$ = "OK" ELSE BEEP END IF LOOP remaining% = remaining% - number% tokens IF remaining% = 1 THEN tokens LOCATE 22, 30: PRINT "You win !" done$ = "YES" END IF cputakes 'what it says! IF remaining% = 1 THEN LOCATE 22, 30: PRINT "I win !" ''''' FOR i% = 1 TO 10: SOUND 600 + (10 * i%), 1: NEXT i% done$ = "YES" END IF LOOP SLEEP SYSTEM SUB cputakes 'Very rudimentary logic to give it the impression that it is thinking take% = 1 IF remaining% = 3 THEN take% = 2 IF remaining% = 2 THEN take% = 1 IF remaining% = 10 THEN take% = 3 IF remaining% = 7 THEN take% = 1 FOR cpu% = 1 TO take% whichone% = remaining% 'which one to disolve remaining% = remaining% - 1 'reset number remaining z% = 35 + (whichone% * 35) FOR r% = 1 TO 18 CIRCLE (z%, 150), r%, 4 SOUND 400 + (12 * r%), 1 FOR delay% = 1 TO 30000: NEXT delay% NEXT r% NEXT cpu% END SUB SUB tokens CLS 'Title LOCATE 2, 25: PRINT "ÛÛ Û ÛÛÛÛÛÛÛ ÛÛ ÛÛ " LOCATE 3, 25: PRINT "Û Û Û Û Û Û Û Û " LOCATE 4, 25: PRINT "Û Û Û Û Û Û Û " LOCATE 5, 25: PRINT "Û ÛÛ ÛÛÛÛÛÛÛ Û Û " 'Paint the playing area FOR i% = 1 TO 4 LINE (40 + i%, 100 + i%)-(600 - i%, 200 - i%), 4, BF NEXT i% 'Print the remaining tokens FOR i% = 1 TO remaining% x% = 35 + (i% * 35) CIRCLE (x%, 150), 15, 15: PAINT (x%, 150), 6, 15 NEXT i% COLOR 11 LOCATE 20, 16: PRINT " On each turn you opt to remove 1,2 or 3 tokens " LOCATE 21, 16: PRINT " The player who is forced to take the last one loses " END SUB