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 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL