_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

NIM5

FILE INFORMATION

FILENAME(S): NIM5

FILE TYPE(S): SEQ

FILE SIZE: 2.9K

FIRST SEEN: 2025-11-30 21:29:04

APPEARS ON: 1 disk(s)

FILE HASH

a1a57989a96d3ea5b56fa87b6356c34b98497162d33b1b39350266b405a79981

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
TIGA NIM5 SEQ DuncanTwain 15 0 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 20 70 72 6F 67 72 61 6D  20 6E 69 6D 20 28 69 6E  | program nim (in|
00000010: 70 75 74 2C 20 6F 75 74  70 75 74 29 3B 0D 63 6F  |put, output);.co|
00000020: 6E 73 74 20 20 20 6E 72  6F 77 73 20 3D 20 32 35  |nst   nrows = 25|
00000030: 3B 0D 64 65 6C 61 79 20  3D 20 31 30 30 30 3B 0D  |;.delay = 1000;.|
00000040: 63 6F 69 6E 20 3D 20 31  36 38 3B 0D 76 61 72 20  |coin = 168;.var |
00000050: 70 69 6C 65 20 3A 20 61  72 72 61 79 20 5B 31 2E  |pile : array [1.|
00000060: 2E 33 5D 20 6F 66 20 30  2E 2E 6E 72 6F 77 73 3B  |.3] of 0..nrows;|
00000070: 0D 6D 6F 76 65 20 20 3A  20 72 65 63 6F 72 64 0D  |.move  : record.|
00000080: 6E 74 61 6B 65 6E 2C 20  70 69 6C 65 6E 6F 20 3A  |ntaken, pileno :|
00000090: 20 69 6E 74 65 67 65 72  3B 0D 65 6E 64 3B 0D 69  | integer;.end;.i|
000000A0: 20 3A 20 69 6E 74 65 67  65 72 3B 0D 6B 65 79 20  | : integer;.key |
000000B0: 3A 20 63 68 61 72 3B 0D  66 75 6E 63 74 69 6F 6E  |: char;.function|
000000C0: 20 67 61 6D 65 6F 76 65  72 20 3A 20 62 6F 6F 6C  | gameover : bool|
000000D0: 65 61 6E 3B 0D 62 65 67  69 6E 20 67 61 6D 65 6F  |ean;.begin gameo|
000000E0: 76 65 72 20 3A 3D 20 28  70 69 6C 65 20 5B 31 5D  |ver := (pile [1]|
000000F0: 20 2B 20 70 69 6C 65 20  5B 32 5D 20 2B 20 70 69  | + pile [2] + pi|
00000100: 6C 65 20 5B 33 5D 20 3D  20 30 29 20 65 6E 64 3B  |le [3] = 0) end;|
00000110: 0D 66 75 6E 63 74 69 6F  6E 20 61 73 63 20 28 6E  |.function asc (n|
00000120: 20 3A 20 69 6E 74 65 67  65 72 29 20 3A 20 63 68  | : integer) : ch|
00000130: 61 72 3B 0D 62 65 67 69  6E 20 61 73 63 20 3A 3D  |ar;.begin asc :=|
00000140: 20 63 68 72 20 28 6E 2B  6F 72 64 20 28 27 30 27  | chr (n+ord ('0'|
00000150: 29 29 20 65 6E 64 3B 0D  70 72 6F 63 65 64 75 72  |)) end;.procedur|
00000160: 65 20 64 69 73 70 6C 61  79 3B 0D 76 61 72 20 20  |e display;.var  |
00000170: 20 20 20 70 2C 20 72 6F  77 2C 20 63 6F 6C 2C 20  |   p, row, col, |
00000180: 66 69 72 73 74 63 6F 6C  20 3A 20 69 6E 74 65 67  |firstcol : integ|
00000190: 65 72 3B 0D 62 65 67 69  6E 0D 70 61 67 65 3B 0D  |er;.begin.page;.|
000001A0: 66 6F 72 20 70 20 3A 3D  20 31 20 74 6F 20 33 20  |for p := 1 to 3 |
000001B0: 64 6F 0D 62 65 67 69 6E  0D 66 69 72 73 74 63 6F  |do.begin.firstco|
000001C0: 6C 20 3A 3D 20 70 2A 31  30 3B 0D 66 6F 72 20 72  |l := p*10;.for r|
000001D0: 6F 77 20 3A 3D 20 30 20  74 6F 20 4E 52 4F 57 53  |ow := 0 to NROWS|
000001E0: 2D 31 20 64 6F 0D 69 66  20 70 69 6C 65 20 5B 70  |-1 do.if pile [p|
000001F0: 5D 20 3E 3D 20 4E 52 4F  57 53 2D 72 6F 77 20 74  |] >= NROWS-row t|
00000200: 68 65 6E 0D 66 6F 72 20  63 6F 6C 20 3A 3D 20 66  |hen.for col := f|
00000210: 69 72 73 74 63 6F 6C 2B  33 20 74 6F 20 66 69 72  |irstcol+3 to fir|
00000220: 73 74 63 6F 6C 2B 35 20  64 6F 0D 76 64 75 20 28  |stcol+5 do.vdu (|
00000230: 72 6F 77 2C 20 63 6F 6C  20 2C 20 63 68 72 20 28  |row, col , chr (|
00000240: 43 4F 49 4E 29 29 3B 0D  69 66 20 70 69 6C 65 20  |COIN));.if pile |
00000250: 5B 70 5D 20 3E 3D 20 31  30 20 74 68 65 6E 0D 20  |[p] >= 10 then. |
00000260: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000270: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 76  |               v|
00000280: 64 75 20 28 4E 52 4F 57  53 2D 31 2C 20 66 69 72  |du (NROWS-1, fir|
00000290: 73 74 63 6F 6C 2C 20 61  73 63 20 28 70 69 6C 65  |stcol, asc (pile|
000002A0: 5B 70 5D 20 64 69 76 20  31 30 29 29 3B 0D 20 20  |[p] div 10));.  |
000002B0: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000002C0: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 76 64  |              vd|
000002D0: 75 20 28 4E 52 4F 57 53  2D 31 2C 20 66 69 72 73  |u (NROWS-1, firs|
000002E0: 74 63 6F 6C 2B 31 2C 61  73 63 28 70 69 6C 65 5B  |tcol+1,asc(pile[|
000002F0: 70 5D 20 6D 6F 64 20 31  30 29 29 3B 0D 65 6E 64  |p] mod 10));.end|
00000300: 3B 0D 65 6E 64 3B 20 28  2A 20 64 69 73 70 6C 61  |;.end; (* displa|
00000310: 79 20 2A 29 0D 70 72 6F  63 65 64 75 72 65 20 73  |y *).procedure s|
00000320: 69 67 6E 6F 6E 3B 0D 62  65 67 69 6E 0D 70 61 67  |ignon;.begin.pag|
00000330: 65 3B 0D 77 72 69 74 65  6C 6E 20 28 27 20 20 20  |e;.writeln ('   |
00000340: 20 20 20 20 20 20 20 20  2A 2A 2A 20 20 4E 49 4D  |        ***  NIM|
00000350: 20 20 2A 2A 2A 27 29 3B  0D 77 72 69 74 65 6C 6E  |  ***');.writeln|
00000360: 3B 0D 77 72 69 74 65 6C  6E 3B 0D 77 72 69 74 65  |;.writeln;.write|
00000370: 6C 6E 20 28 27 49 6B 20  7A 65 74 20 64 69 65 20  |ln ('Ik zet die |
00000380: 73 74 61 70 65 6C 73 20  6D 75 6E 74 65 6E 20 6F  |stapels munten o|
00000390: 70 2E 27 29 3B 0D 77 72  69 74 65 6C 6E 20 28 27  |p.');.writeln ('|
000003A0: 7A 65 74 74 65 6E 3A 2C  6E 65 65 6D 20 65 65 6E  |zetten:,neem een|
000003B0: 20 77 69 6C 6C 65 6B 65  75 72 69 67 20 61 61 6E  | willekeurig aan|
000003C0: 74 61 6C 27 29 3B 0D 77  72 69 74 65 6C 6E 20 28  |tal');.writeln (|
000003D0: 27 76 61 6E 20 65 65 6E  20 73 74 61 70 65 6C 2E  |'van een stapel.|
000003E0: 20 20 64 65 20 73 70 65  6C 65 72 20 64 69 65 20  |  de speler die |
000003F0: 64 65 20 6C 61 61 74 73  74 65 27 29 3B 0D 77 72  |de laatste');.wr|
00000400: 69 74 65 6C 6E 20 28 27  6E 65 65 6D 74 2C 20 77  |iteln ('neemt, w|
00000410: 69 6E 74 2E 27 29 3B 0D  77 72 69 74 65 6C 6E 3B  |int.');.writeln;|
00000420: 0D 77 72 69 74 65 20 28  27 2A 74 6F 65 74 73 2A  |.write ('*toets*|
00000430: 20 76 6F 6F 72 20 73 74  61 72 74 20 3A 27 29 3B  | voor start :');|
00000440: 0D 77 68 69 6C 65 20 67  65 74 6B 65 79 20 3D 20  |.while getkey = |
00000450: 63 68 72 20 28 30 29 20  64 6F 3B 0D 65 6E 64 3B  |chr (0) do;.end;|
00000460: 0D 70 72 6F 63 65 64 75  72 65 20 68 69 73 6D 6F  |.procedure hismo|
00000470: 76 65 3B 20 0D 76 61 72  20 20 20 20 20 6F 6B 20  |ve; .var     ok |
00000480: 3A 20 62 6F 6F 6C 65 61  6E 3B 0D 62 65 67 69 6E  |: boolean;.begin|
00000490: 0D 77 72 69 74 65 6C 6E  20 28 27 76 6F 65 72 20  |.writeln ('voer |
000004A0: 6A 65 20 7A 65 74 20 69  6E 20 3A 27 29 3B 0D 77  |je zet in :');.w|
000004B0: 69 74 68 20 6D 6F 76 65  20 64 6F 20 72 65 70 65  |ith move do repe|
000004C0: 61 74 0D 77 72 69 74 65  6C 6E 3B 0D 77 72 69 74  |at.writeln;.writ|
000004D0: 65 20 28 27 73 74 61 70  65 6C 20 28 31 20 2D 20  |e ('stapel (1 - |
000004E0: 33 29 20 3F 20 27 29 3B  0D 72 65 61 64 20 28 70  |3) ? ');.read (p|
000004F0: 69 6C 65 6E 6F 29 3B 0D  6F 6B 20 3A 3D 20 70 69  |ileno);.ok := pi|
00000500: 6C 65 6E 6F 20 69 6E 20  5B 31 2E 2E 33 5D 3B 0D  |leno in [1..3];.|
00000510: 69 66 20 6F 6B 20 74 68  65 6E 0D 20 62 65 67 69  |if ok then. begi|
00000520: 6E 0D 77 72 69 74 65 20  28 27 68 6F 65 76 65 65  |n.write ('hoevee|
00000530: 6C 20 77 65 67 6E 65 6D  65 6E 20 3F 20 27 29 3B  |l wegnemen ? ');|
00000540: 0D 72 65 61 64 20 28 6E  74 61 6B 65 6E 29 3B 0D  |.read (ntaken);.|
00000550: 6F 6B 20 3A 3D 20 6E 74  61 6B 65 6E 20 69 6E 20  |ok := ntaken in |
00000560: 5B 31 2E 2E 70 69 6C 65  20 5B 70 69 6C 65 6E 6F  |[1..pile [pileno|
00000570: 5D 5D 3B 0D 65 6E 64 3B  0D 69 66 20 6E 6F 74 20  |]];.end;.if not |
00000580: 6F 6B 20 74 68 65 6E 20  77 72 69 74 65 6C 6E 20  |ok then writeln |
00000590: 28 27 57 61 74 20 3F 3F  27 29 3B 0D 75 6E 74 69  |('Wat ??');.unti|
000005A0: 6C 20 6F 6B 3B 0D 77 69  74 68 20 6D 6F 76 65 20  |l ok;.with move |
000005B0: 64 6F 20 70 69 6C 65 20  5B 70 69 6C 65 6E 6F 5D  |do pile [pileno]|
000005C0: 20 3A 3D 20 70 69 6C 65  20 5B 70 69 6C 65 6E 6F  | := pile [pileno|
000005D0: 5D 2D 6E 74 61 6B 65 6E  3B 0D 65 6E 64 3B 0D 70  |]-ntaken;.end;.p|
000005E0: 72 6F 63 65 64 75 72 65  20 6D 79 6D 6F 76 65 3B  |rocedure mymove;|
000005F0: 0D 76 61 72 20 20 20 20  20 62 69 74 20 3A 20 61  |.var     bit : a|
00000600: 72 72 61 79 20 5B 31 2E  2E 33 2C 20 31 2E 2E 34  |rray [1..3, 1..4|
00000610: 5D 20 6F 66 20 62 6F 6F  6C 65 61 6E 3B 0D 70 61  |] of boolean;.pa|
00000620: 72 69 74 79 20 3A 20 61  72 72 61 79 20 5B 31 2E  |rity : array [1.|
00000630: 2E 34 5D 20 6F 66 20 62  6F 6F 6C 65 61 6E 3B 0D  |.4] of boolean;.|
00000640: 66 69 72 73 74 62 69 74  2C 20 78 2C 20 69 2C 20  |firstbit, x, i, |
00000650: 6A 20 3A 20 69 6E 74 65  67 65 72 3B 0D 62 65 67  |j : integer;.beg|
00000660: 69 6E 0D 66 6F 72 20 69  20 3A 3D 20 31 20 74 6F  |in.for i := 1 to|
00000670: 20 33 20 64 6F 0D 62 65  67 69 6E 0D 78 20 3A 3D  | 3 do.begin.x :=|
00000680: 20 70 69 6C 65 20 5B 69  5D 3B 0D 66 6F 72 20 6A  | pile [i];.for j|
00000690: 20 3A 3D 20 34 20 64 6F  77 6E 74 6F 20 31 20 64  | := 4 downto 1 d|
000006A0: 6F 0D 62 65 67 69 6E 0D  62 69 74 20 5B 69 2C 6A  |o.begin.bit [i,j|
000006B0: 5D 20 3A 3D 20 6F 64 64  20 28 78 29 3B 0D 78 20  |] := odd (x);.x |
000006C0: 3A 3D 20 78 20 64 69 76  20 32 3B 0D 65 6E 64 3B  |:= x div 2;.end;|
000006D0: 0D 65 6E 64 3B 0D 66 6F  72 20 69 20 3A 3D 20 31  |.end;.for i := 1|
000006E0: 20 74 6F 20 34 20 64 6F  20 70 61 72 69 74 79 20  | to 4 do parity |
000006F0: 5B 69 5D 20 3A 3D 0D 62  69 74 20 5B 31 2C 69 5D  |[i] :=.bit [1,i]|
00000700: 20 3C 3E 20 28 62 69 74  20 5B 32 2C 69 5D 20 3C  | <> (bit [2,i] <|
00000710: 3E 20 62 69 74 20 5B 33  2C 69 5D 29 3B 0D 6D 6F  |> bit [3,i]);.mo|
00000720: 76 65 2E 70 69 6C 65 6E  6F 20 3A 3D 20 31 3B 0D  |ve.pileno := 1;.|
00000730: 6D 6F 76 65 2E 6E 74 61  6B 65 6E 20 3A 3D 20 30  |move.ntaken := 0|
00000740: 3B 0D 77 69 74 68 20 6D  6F 76 65 20 64 6F 0D 69  |;.with move do.i|
00000750: 66 20 6E 6F 74 20 28 70  61 72 69 74 79 20 5B 31  |f not (parity [1|
00000760: 5D 20 6F 72 20 70 61 72  69 74 79 5B 32 5D 20 6F  |] or parity[2] o|
00000770: 72 20 70 61 72 69 74 79  20 5B 33 5D 20 6F 72 0D  |r parity [3] or.|
00000780: 70 61 72 69 74 79 20 5B  34 5D 29 20 74 68 65 6E  |parity [4]) then|
00000790: 0D 62 65 67 69 6E 0D 77  68 69 6C 65 20 70 69 6C  |.begin.while pil|
000007A0: 65 20 5B 70 69 6C 65 6E  6F 5D 20 3D 20 30 20 64  |e [pileno] = 0 d|
000007B0: 6F 20 70 69 6C 65 6E 6F  20 3A 3D 0D 70 69 6C 65  |o pileno :=.pile|
000007C0: 6E 6F 2B 31 3B 0D 69 66  20 70 69 6C 65 20 5B 70  |no+1;.if pile [p|
000007D0: 69 6C 65 6E 6F 5D 20 3D  20 31 20 74 68 65 6E 20  |ileno] = 1 then |
000007E0: 20 6E 74 61 6B 65 6E 20  3A 3D 31 0D 65 6C 73 65  | ntaken :=1.else|
000007F0: 20 6E 74 61 6B 65 6E 20  3A 3D 20 72 61 6E 64 6F  | ntaken := rando|
00000800: 6D 20 6D 6F 64 20 28 70  69 6C 65 0D 5B 70 69 6C  |m mod (pile.[pil|
00000810: 65 6E 6F 5D 2D 31 29 2B  31 3B 0D 65 6E 64 0D 65  |eno]-1)+1;.end.e|
00000820: 6C 73 65 20 62 65 67 69  6E 0D 66 69 72 73 74 62  |lse begin.firstb|
00000830: 69 74 20 3A 3D 20 31 3B  0D 77 68 69 6C 65 20 6E  |it := 1;.while n|
00000840: 6F 74 20 70 61 72 69 74  79 20 5B 66 69 72 73 74  |ot parity [first|
00000850: 62 69 74 5D 20 64 6F 0D  66 69 72 73 74 62 69 74  |bit] do.firstbit|
00000860: 20 3A 3D 20 66 69 72 73  74 62 69 74 20 2B 20 31  | := firstbit + 1|
00000870: 3B 0D 77 68 69 6C 65 20  6E 6F 74 20 62 69 74 20  |;.while not bit |
00000880: 5B 70 69 6C 65 6E 6F 20  2C 20 66 69 72 73 74 62  |[pileno , firstb|
00000890: 69 74 5D 20 64 6F 0D 70  69 6C 65 6E 6F 20 3A 3D  |it] do.pileno :=|
000008A0: 20 70 69 6C 65 6E 6F 20  2B 20 31 3B 0D 66 6F 72  | pileno + 1;.for|
000008B0: 20 69 20 3A 3D 20 66 69  72 73 74 62 69 74 20 74  | i := firstbit t|
000008C0: 6F 20 34 20 64 6F 0D 62  65 67 69 6E 0D 78 20 3A  |o 4 do.begin.x :|
000008D0: 3D 20 31 3B 0D 66 6F 72  20 6A 20 3A 3D 20 33 20  |= 1;.for j := 3 |
000008E0: 64 6F 77 6E 74 6F 20 69  20 64 6F 20 78 20 3A 3D  |downto i do x :=|
000008F0: 20 78 2A 32 3B 0D 69 66  20 70 61 72 69 74 79 20  | x*2;.if parity |
00000900: 5B 69 5D 20 74 68 65 6E  0D 69 66 20 62 69 74 20  |[i] then.if bit |
00000910: 5B 70 69 6C 65 6E 6F 2C  20 69 5D 20 74 68 65 6E  |[pileno, i] then|
00000920: 20 6E 74 61 6B 65 6E 20  3A 3D 0D 6E 74 61 6B 65  | ntaken :=.ntake|
00000930: 6E 20 2B 20 78 0D 65 6C  73 65 20 6E 74 61 6B 65  |n + x.else ntake|
00000940: 6E 20 3A 3D 20 6E 74 61  6B 65 6E 20 2D 20 78 3B  |n := ntaken - x;|
00000950: 0D 65 6E 64 3B 0D 65 6E  64 3B 0D 77 69 74 68 20  |.end;.end;.with |
00000960: 6D 6F 76 65 20 64 6F 20  70 69 6C 65 20 5B 70 69  |move do pile [pi|
00000970: 6C 65 6E 6F 5D 20 3A 3D  20 70 69 6C 65 20 5B 70  |leno] := pile [p|
00000980: 69 6C 65 6E 6F 5D 20 2D  20 6E 74 61 6B 65 6E 3B  |ileno] - ntaken;|
00000990: 0D 65 6E 64 3B 0D 62 65  67 69 6E 0D 73 69 67 6E  |.end;.begin.sign|
000009A0: 6F 6E 3B 0D 72 65 70 65  61 74 0D 66 6F 72 20 69  |on;.repeat.for i|
000009B0: 20 3A 3D 20 31 20 74 6F  20 33 20 64 6F 20 70 69  | := 1 to 3 do pi|
000009C0: 6C 65 20 5B 69 5D 20 3A  3D 20 72 61 6E 64 6F 6D  |le [i] := random|
000009D0: 20 6D 6F 64 20 31 30 20  2B 20 36 3B 0D 64 69 73  | mod 10 + 6;.dis|
000009E0: 70 6C 61 79 3B 0D 72 65  70 65 61 74 0D 68 69 73  |play;.repeat.his|
000009F0: 6D 6F 76 65 3B 0D 69 66  20 67 61 6D 65 6F 76 65  |move;.if gameove|
00000A00: 72 20 74 68 65 6E 20 77  72 69 74 65 6C 6E 20 28  |r then writeln (|
00000A10: 27 47 65 66 65 6C 69 63  69 74 65 65 72 64 2E 2E  |'Gefeliciteerd..|
00000A20: 2E 27 2C 0D 27 6A 65 20  68 65 62 74 20 67 65 77  |.',.'je hebt gew|
00000A30: 6F 6E 6E 65 6E 20 21 27  29 0D 65 6C 73 65 20 62  |onnen !').else b|
00000A40: 65 67 69 6E 0D 64 69 73  70 6C 61 79 3B 0D 6D 79  |egin.display;.my|
00000A50: 6D 6F 76 65 3B 0D 66 6F  72 20 69 20 3A 3D 20 31  |move;.for i := 1|
00000A60: 20 74 6F 20 64 65 6C 61  79 20 64 6F 20 3B 0D 64  | to delay do ;.d|
00000A70: 69 73 70 6C 61 79 3B 0D  77 72 69 74 65 6C 6E 20  |isplay;.writeln |
00000A80: 28 27 4D 79 6E 20 7A 65  74 20 77 61 73 27 2C 20  |('Myn zet was', |
00000A90: 6D 6F 76 65 2E 6E 74 61  6B 65 6E 20 3A 20 33 2C  |move.ntaken : 3,|
00000AA0: 0D 27 20 66 72 6F 6D 20  70 69 6C 65 27 2C 20 6D  |.' from pile', m|
00000AB0: 6F 76 65 2E 70 69 6C 65  6E 6F 3A 32 29 3B 0D 69  |ove.pileno:2);.i|
00000AC0: 66 20 67 61 6D 65 6F 76  65 72 20 74 68 65 6E 20  |f gameover then |
00000AD0: 77 72 69 74 65 6C 6E 20  28 27 2A 2A 2A 20 49 6B  |writeln ('*** Ik|
00000AE0: 20 68 65 62 20 67 65 77  6F 6E 6E 65 6E 27 29 3B  | heb gewonnen');|
00000AF0: 0D 77 72 69 74 65 6C 6E  3B 0D 77 72 69 74 65 6C  |.writeln;.writel|
00000B00: 6E 3B 0D 65 6E 64 3B 0D  75 6E 74 69 6C 20 67 61  |n;.end;.until ga|
00000B10: 6D 65 6F 76 65 72 3B 0D  77 72 69 74 65 20 28 27  |meover;.write ('|
00000B20: 6E 6F 67 20 65 65 6E 20  73 70 65 6C 20 3F 20 27  |nog een spel ? '|
00000B30: 29 3B 0D 77 68 69 6C 65  20 69 6E 70 75 74 5E 20  |);.while input^ |
00000B40: 3D 20 27 20 27 20 64 6F  20 67 65 74 20 28 69 6E  |= ' ' do get (in|
00000B50: 70 75 74 29 3B 0D 72 65  61 64 20 28 6B 65 79 29  |put);.read (key)|
00000B60: 3B 0D 77 68 69 6C 65 20  6E 6F 74 20 65 6F 6C 6E  |;.while not eoln|
00000B70: 20 64 6F 20 67 65 74 20  28 69 6E 70 75 74 29 3B  | do get (input);|
00000B80: 0D 75 6E 74 69 6C 20 6B  65 79 20 3D 20 27 6E 27  |.until key = 'n'|
00000B90: 3B 0D 70 61 67 65 3B 0D  65 6E 64 2E 0D           |;.page;.end..   |
 PROGRAM NIM (INPUT, OUTPUT);.CONST   NR
OWS = 25;.DELAY = 1000;.COIN = 168;.VAR 
PILE : ARRAY [1..3] OF 0..NROWS;.MOVE  :
 RECORD.NTAKEN, PILENO : INTEGER;.END;.I
 : INTEGER;.KEY : CHAR;.FUNCTION GAMEOVE
R : BOOLEAN;.BEGIN GAMEOVER := (PILE [1]
 + PILE [2] + PILE [3] = 0) END;.FUNCTIO
N ASC (N : INTEGER) : CHAR;.BEGIN ASC :=
 CHR (N+ORD ('0')) END;.PROCEDURE DISPLA
Y;.VAR     P, ROW, COL, FIRSTCOL : INTEG
ER;.BEGIN.PAGE;.FOR P := 1 TO 3 DO.BEGIN
.FIRSTCOL := P*10;.FOR ROW := 0 TO NROWS
-1 DO.IF PILE [P] >= NROWS-ROW THEN.FOR 
COL := FIRSTCOL+3 TO FIRSTCOL+5 DO.VDU (
ROW, COL , CHR (COIN));.IF PILE [P] >= 1
0 THEN.                                V
DU (NROWS-1, FIRSTCOL, ASC (PILE[P] DIV 
10));.                                VD
U (NROWS-1, FIRSTCOL+1,ASC(PILE[P] MOD 1
0));.END;.END; (* DISPLAY *).PROCEDURE S
IGNON;.BEGIN.PAGE;.WRITELN ('           
***  NIM  ***');.WRITELN;.WRITELN;.WRITE
LN ('IK ZET DIE STAPELS MUNTEN OP.');.WR
ITELN ('ZETTEN:,NEEM EEN WILLEKEURIG AAN
TAL');.WRITELN ('VAN EEN STAPEL.  DE SPE
LER DIE DE LAATSTE');.WRITELN ('NEEMT, W
INT.');.WRITELN;.WRITE ('*TOETS* VOOR ST
ART :');.WHILE GETKEY = CHR (0) DO;.END;
.PROCEDURE HISMOVE; .VAR     OK : BOOLEA
N;.BEGIN.WRITELN ('VOER JE ZET IN :');.W
ITH MOVE DO REPEAT.WRITELN;.WRITE ('STAP
EL (1 - 3) ? ');.READ (PILENO);.OK := PI
LENO IN [1..3];.IF OK THEN. BEGIN.WRITE 
('HOEVEEL WEGNEMEN ? ');.READ (NTAKEN);.
OK := NTAKEN IN [1..PILE [PILENO]];.END;
.IF NOT OK THEN WRITELN ('WAT ??');.UNTI
L OK;.WITH MOVE DO PILE [PILENO] := PILE
 [PILENO]-NTAKEN;.END;.PROCEDURE MYMOVE;
.VAR     BIT : ARRAY [1..3, 1..4] OF BOO
LEAN;.PARITY : ARRAY [1..4] OF BOOLEAN;.
FIRSTBIT, X, I, J : INTEGER;.BEGIN.FOR I
 := 1 TO 3 DO.BEGIN.X := PILE [I];.FOR J
 := 4 DOWNTO 1 DO.BEGIN.BIT [I,J] := ODD
 (X);.X := X DIV 2;.END;.END;.FOR I := 1
 TO 4 DO PARITY [I] :=.BIT [1,I] <> (BIT
 [2,I] <> BIT [3,I]);.MOVE.PILENO := 1;.
MOVE.NTAKEN := 0;.WITH MOVE DO.IF NOT (P
ARITY [1] OR PARITY[2] OR PARITY [3] OR.
PARITY [4]) THEN.BEGIN.WHILE PILE [PILEN
O] = 0 DO PILENO :=.PILENO+1;.IF PILE [P
ILENO] = 1 THEN  NTAKEN :=1.ELSE NTAKEN 
:= RANDOM MOD (PILE.[PILENO]-1)+1;.END.E
LSE BEGIN.FIRSTBIT := 1;.WHILE NOT PARIT
Y [FIRSTBIT] DO.FIRSTBIT := FIRSTBIT + 1
;.WHILE NOT BIT [PILENO , FIRSTBIT] DO.P
ILENO := PILENO + 1;.FOR I := FIRSTBIT T
O 4 DO.BEGIN.X := 1;.FOR J := 3 DOWNTO I
 DO X := X*2;.IF PARITY [I] THEN.IF BIT 
[PILENO, I] THEN NTAKEN :=.NTAKEN + X.EL
SE NTAKEN := NTAKEN - X;.END;.END;.WITH 
MOVE DO PILE [PILENO] := PILE [PILENO] -
 NTAKEN;.END;.BEGIN.SIGNON;.REPEAT.FOR I
 := 1 TO 3 DO PILE [I] := RANDOM MOD 10 
+ 6;.DISPLAY;.REPEAT.HISMOVE;.IF GAMEOVE
R THEN WRITELN ('GEFELICITEERD...',.'JE 
HEBT GEWONNEN !').ELSE BEGIN.DISPLAY;.MY
MOVE;.FOR I := 1 TO DELAY DO ;.DISPLAY;.
WRITELN ('MYN ZET WAS', MOVE.NTAKEN : 3,
.' FROM PILE', MOVE.PILENO:2);.IF GAMEOV
ER THEN WRITELN ('*** IK HEB GEWONNEN');
.WRITELN;.WRITELN;.END;.UNTIL GAMEOVER;.
WRITE ('NOG EEN SPEL ? ');.WHILE INPUT^ 
= ' ' DO GET (INPUT);.READ (KEY);.WHILE 
NOT EOLN DO GET (INPUT);.UNTIL KEY = 'N'
;.PAGE;.END..
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL