Skip to content

Instantly share code, notes, and snippets.

@scruss
Last active November 24, 2018 17:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scruss/138b1b895e10ac79a706bac1248fb079 to your computer and use it in GitHub Desktop.
Save scruss/138b1b895e10ac79a706bac1248fb079 to your computer and use it in GitHub Desktop.
Mornington Crescent - by Mike Cook, from The Micro User, April 1985
10MODE7
20PRINTTAB(10,7);
30PROC_LOGO
40PRINT"MORNINGTON CRESCENT"
50PRINT"By Mike Cook"
60INPUT"Enter your name: "A$
70FOR A%=1 TO ASC(LEFT$(A$,1))+LEN(A$)
80T%=RND(A%)
90NEXT
100PRINT"Well that's silly I won't bother"
110PROC_INT
120REPEAT
130I%=1
140Z%=4
150WHO%=0
160PRINT"Should I play by myself? ";
170A$=CHR$(GETAND&DF)
180PRINT
190IF A$="Y" THEN PRINT "Ok I will be YOU":Q%=2:WHO%=1:A$="N":GOTO 230 ELSE Q%=1
200PRINT"Do you want to start? (Y/N) ";
210A$=CHR$(GETAND&DF):PRINT
220IF A$="Y" AND RND(10)>5 THEN PRINT"TUFF I'm going first.":A$="N"
230IF A$="Y" THEN PROC_YFM ELSE PROC_FMOVE
240CDIR%=0
250CS%=MS%
260REPEAT
270IF CLINE%<>0 THEN PRINT"Travelling ";D$(CDIR%);" the ";L$(CLINE%);" line:"
280IF WHO% THEN PRINT"You move to "; ELSE PRINT"I move to ";
290PRINT S$(CS%)
300PRINT
310IF WHO% THEN PROC_CMOVE ELSE PROC_YMOVE
320WHO%=WHO% EOR Q%
330I%=I%+1
340UNTIL CS%=13
350PRINT"Mornington Crescent "
360IF WHO% THEN PRINT "YOU WIN!!!" ELSE PRINT "I WIN!"
370PRINT"Want another game? ";
380A$=CHR$(GETAND&DF)
390PROC_SPLIGE
400UNTIL A$="N"
410PRINT"I don't blame you I'm so much better."
420END
430DEF PROC_MOVE(FH%)
440LOCAL A%,T%,TLINE%,TDIR%
450S%=1
460PROC_WIND(FH%)
470A%=1
480READ T%
490IF (T% AND &8000)<>0 THEN 530
500TRAVD%(A%)=T%
510A%=A%+1
520GOTO 480
530IF A%=2 THEN PROC_REC(TRAVD%(1)):PROC_TRAVLE(TRAVD%(1) AND 511,Z%,(TRAVD%(1) DIV 512) AND 1,TRAVD%(1) DIV 1024):ENDPROC
540PRINT"Testing moves:"
550FOR T%=1 TO A%-1
560TDIR%=(TRAVD%(T%) DIV 512) AND 1
570TLINE%=TRAVD%(T%) DIV 1024
580IF TLINE%=CLINE% AND TDIR%<>CDIR% THEN 620
590PRINT CHR$(13);D$(TDIR%);" the ";L$(TLINE%);" Line";SPC(8);
600PROC_REC(TRAVD%(T%))
610PROC_TRAVLE((TRAVD%(T%) AND 511),Z%,TDIR%,TLINE%)
620NEXT
630PRINT CHR$(13);CHR$(11);SPC(38)
640PRINT SPC(38);CHR$(13);CHR$(11);
650ENDPROC
660DEF PROC_YMOVE
670TRY%=2
680INPUT"ENTER YOUR MOVE: "SM$
690PROC_SFIND(SM$)
700IF TRY%<1 THEN PRINT "YOU LOSE by failing to make a valid move.":CS%=13:WHO%=WHO% EOR 1:ENDPROC
710IF MS%=0 THEN PRINT"Concentrate":GOTO 680
720IF MS%=?(W%+LEN($W%)) AND ((I% DIV 2) AND 1) THEN PRINT"A brilliant use of ";$W%;" rule":CS%=?(W%+LEN($W%)):ENDPROC
730PROC_VALID(MS%)
740IF MS%=0 THEN TRY%=TRY%-1:PRINT"WE ARE NOT USING CRABBITS RULE":GOTO 680
750CS%=MS% AND 511
760CLINE%=MS% DIV 1024
770CDIR%=(MS% DIV 512) AND 1
780PRINT CHR$(11);SPC(38);CHR$(13);
790ENDPROC
800DEF PROC_VALID(TS%)
810PROC_MOVE(CS%)
820LOCAL A%
830MS%=0
840FOR A%=1 TO S%-1
850IF TS%=(S%(A%) AND 511) THEN MS%=S%(A%)
860NEXT
870IF (CS%=38 OR CS%=39 OR CS%=40) AND TS%=&D THEN MS%=0
880ENDPROC
890DEF PROC_CMOVE
900LOCAL T%
910PROC_MOVE(CS%)
920FOR A%=1 TO S%-1
930IF (S%(A%) AND 511)=13 THEN MS%=13
940NEXT
950IF MS%=13 AND CS%<(14+Z%) THEN CS%=13:ENDPROC
960IF S%>2 THEN T%=RND(S%-1) ELSE T%=1
970CS%=S%(T%) AND 511
980CDIR%=(S%(T%) DIV 512) AND 1
990CLINE%=S%(T%) DIV 1024
1000ENDPROC
1010DEF PROC_TRAVLE(TS%,DEPTH%,CDIR%,CLINE%)
1020LOCAL MARK%,TEMPS%,T%
1030TEMPS%=S%
1040MARK%=S%
1050DEPTH%=DEPTH%-1
1060IF DEPTH%=0 THEN ENDPROC
1070PROC_WIND(TS%)
1080READ T%
1090IF (T% AND &8000) <> 0 THEN 1120
1100IF (((T% DIV 512) AND 1)=CDIR%) AND ((T% DIV 1024)=CLINE%) THEN PROC_REC(T%):MARK%=MARK%+1
1110GOTO1080
1120IF MARK%=TEMPS% THEN ENDPROC
1130PROC_TRAVLE((S%(MARK%-1) AND 511),DEPTH%,CDIR%,CLINE%)
1140MARK%=MARK%-1
1150GOTO 1120
1160DEF PROC_YFM
1170REPEAT
1180INPUT"Ok where do you want to start? "SS$
1190PROC_SFIND(SS$)
1200UNTIL MS%<>0
1210WHO%=1
1220CLINE%=0
1230ENDPROC
1240DEF PROC_SFIND(SS$)
1250LOCAL A%
1260MS%=0
1270REPEAT
1280MS%=MS%+1
1290UNTIL MS%=N% OR S$(MS%)=SS$
1300IF MS%<>N% THEN ENDPROC
1310PRINT"Your station is not on my list."
1320PRINT"Is it one of the following?"
1330IF LEN(SS$)>4 THEN F%=4 ELSE F%=LEN(SS$)
1340REPEAT
1350P$=LEFT$(SS$,F%)
1360B%=1
1370FOR A%=1 TO N%
1380IF LEFT$(S$(A%),F%)<>P$ THEN 1420
1390PRINT STR$(B%);") ";S$(A%)
1400S%(B%)=A%
1410B%=B%+1
1420NEXT
1430F%=F%-1
1440UNTIL F%=0 OR B%<>1
1450PRINT STR$(B%);") ";"NONE OF THESE"
1460REPEAT
1470INPUT"WHICH NUMBER? "MS%
1480UNTIL MS%<=B%
1490IF MS%=B% THEN MS%=0 ELSE MS%=S%(MS%)
1500ENDPROC
1510DEF PROC_INT
1520RESTORE 1830
1530N%=277
1540DIM W% 32
1550DIM S$(N%),S%(60),L$(15),TRAVD%(10),D$(1)
1560A$="Hodgekiss'"
1570FOR A%=1 TO N%-1
1580READ S$(A%)
1590NEXT
1600RESTORE 2340
1610FOR A%=1 TO 15
1620READ L$(A%)
1630NEXT
1640$W%=A$
1650READ D$(0),D$(1)
1660ENDPROC
1670DEF PROC_WIND(SN%)
1680LOCAL T%
1690RESTORE 2080
1700SN%=SN% OR &8000
1710REPEAT
1720READ T%
1730UNTIL T%=SN%
1740ENDPROC
1750DEF PROC_REC(T%)
1760S%(S%)=T%
1770S%=S%+1
1780ENDPROC
1790DEF PROC_FMOVE
1800MS%=RND(N%-1)
1810CLINE%=0
1820ENDPROC
1830DATA HIGH BARNET,TOTTERIDGE,WOODSIDE PARK,WEST FINCHLEY,MILL HILL EAST,FINCHLY CENTRAL,EAST FINCHLEY
1840DATA HIGHGATE,ARCHWAY,TUFNELL PARK,KENTISH TOWN,CAMDEN TOWN,MORNINGTON CRESCENT,EUSTON,WARREN STREET,GOODGE STREET,TOTTENHAM COURT ROAD,LEICESTER SQUARE,CHARING CROSS,WATERLOO,KENNINGTON,OVAL,STOCKWELL,CLAPHAM NORTH,CLAPHAM COMMON
1850DATA CLAPHAM SOUTH,BALHAM,TOOTING BEC,TOOTING BROADWAY,COLLIERS WOOD,SOUTH WIMBLEDON,MORDEN,ELEPHANT & CASTLE,BOROUGH,LONDON BRIDGE,BANK,MOORGATE,OLD STREET,ANGEL,KING'S CROSS,CHALK FARM,BELSIZE PARK,HAMPSTEAD,GOLDERS GREEN,BRENT
1860DATA HENDON CENTRAL,COLINDALE,BURNT OAK,EDGWARE
1870DATA RICHMOND,KEW GARDENS,GUNNERSBURY,TURNHAM GREEN,STAMFORD BROOK,RAVENSCOURT PARK,HAMMERSMITH,BARONS COURT,WEST KENSINGTON,EARLS COURT,GLOUCESTER ROAD,SOUTH KENSINGTON,SLOANE SQUARE,VICTORIA,ST. JAMES'S PARK,WESTMINSTER
1880DATA TEMPLE,BLACKFRIARS,MANSION HOUSE,CANNON STREET,MONUMENT,TOWER HILL,ALDGATE EAST,WHITECHAPEL,STEPNEY GREEN,MILE END,BROW ROAD,BROMLEY-BY-BOW,WEST HAM,PLAISTOW,UPTON PARK,EAST HAM,BARKING,UPNEY,BECONTREE,DAGENHAM HEATHWAY
1890DATA DAGENHAM EAST
1900DATA ELM PARK,HORNCHURCH,UPMINSTER BRIDGE,UPMINSTER,EALING BROADWAY,EALING COMMON,ACTON TOWN,CHISWICK PARK,WIMBLDON,WIMBLEDON PARK,SOUTHFIELDS,EAST PUTNEY,PUTNEY BRIDGE,PARSONS GREEN,FULHAM BROADWAY,WEST BROMPTON,HIGH STREET KENSINGTON
1910DATA NOTTINGHILL GATE,BAYSWATER,PADDINGTON,EDGWARE ROAD
1920DATA HOUNSLOW WEST,HOUNSLOW CENTRAL,HOUNSLOW EAST,OSTERLEY,BOSTON MANOR,NORTHFIELDS,SOUTH EALING,KNIGHTSBRIDGE,HYDE PARK CORNER,GREEN PARK,PICCADILLY CIRCUS,COVENT GARDEN,ALDWYCH,HOLBORN,RUSSELL SQUARE,CALEDONIAN ROAD,HOLLOWAY ROAD
1930DATA ARSENAL,FINSBURY PARK,MANOR HOUSE,TURNPIKE LANE,WOOD GREEN,BOUNDS GREEN,ARNOS GROVE,SOUTHGATE,OAKWOOD,COCKFOSTERS,UXBRIDGE,HILLINGTON,ICKENHAM
1940DATA RUISLIP,RUISLIP MANOR,EASTCOTE,RAYNERS LANE,SOUTH HARROW,SUDBURY HILL,SUDBURY TOWN,ALPERTON,PARK ROYAL,NORTH EALING
1950DATA GOLDHAWK ROAD,SHEPHERDS BUSH,LATIMER ROAD,LADBROKE GROVE,WESTBOURNE PARK,ROYAL OAK,GREAT PORTLAND STREET,EUSTON SQUARE,FARRINGDON,BARBICAN,ALGATE
1960DATA WEST ACTON,NORTH ACTON,EAST ACTON,WHITE CITY,SHEPHERDS BUSH,HOLLAND PARK,QUEENSWAY,LANCASTER GATE,MARBLE ARCH,BOND STREET,CHANCERY LANE,ST. PAUL'S,BETHNAL GREEN,STRATFORD,LEYTON,LEYTONSTONE,SNARESBROOK,SOUTH WOODFORD,WOODFORD
1970DATA BUCKHURST HILL,LOUGHTON,DEBDEN,THEYDON BOIS,EPPING,NORTH WEALD,BLAKE HALL,ONGAR,RODING VALLY,CHIGWELL,GRANGE HILL,HAINAULT,FAIRLOP,BARKINGSIDE,NEWBURY PARK,GANTS HILL,WANSTEAD
1980DATA WATFORD JUNCTION,WATFORD HIGH STREET,BUSHEY & OXHEY,CARPENDERS PARK,HATCH END,HEADSTONE LANE,HARROW & WEALDSTONE,KENTON,SOUTH KENTON,NORTH WEMBLEY,WEMBLEY CENTRAL,STONEBRIDGE PARK,HARLESDEN,WILLESDEN JUNCTION,KENSAL GREEN
1990DATA QUEEN'S PARK,KILBURN PARK,MAIDA VALE,WARWICK AVENUE,EDGWARE ROAD,MARYLEBONE,REGENT'S PARK,TRAFALGAR SQUARE,LAMBETH NORTH
2000DATA STANMORE,CANONS PARK,QUEENSBURY,KINGSBURY,WEMBLEY PARK,NEASDON,DOLLIS HILL,WILLESDEN GREEN,KILBURN,WEST HAMSTEAD,FINCHLEY ROAD,SWISS COTTAGE,ST. JOHN'S WOOD
2010DATA AMERSHAM,CHALFONT & LATIMER,CHORLEYWOOD,RICKMANSWORTH,MOOR PARK,NORTH WOOD,NORTHWOOD HILLS,PINNER,NORTH HARROW,WATFORD,CROXLEY
2020DATA WEST HARROW,HARROW ON-THE-HILL,NORTHWICK PARK,PRESTON ROAD
2030DATA NEW CROSS GATE,NEW CROSS,SURREY DOCKS,ROTHERHITHE,WAPPING,SHADWELL,SHOREDITCH
2040DATA BRIXTON,VAUXHALL,PIMLICO,SEVEN SISTERS,TOTTENHAM HALE,BLACKHORSE ROAD,WALTHAMSTOW CENTRAL
2050DATA DRAYTON PARK,HIGHBURY & ISLINGTON,ESSEX ROAD
2060DATA WEST RUISLIP,RUISLIP GARDENS,SOUTH RUISLIP,NORTHOLT,GREENFORD,PERIVALE,HANGER LANE,LIVERPOOL STREET,BAKER STREET,CHESHAM,OXFORD CIRCUS
2070DATA REDBRIDGE,EMBANKMENT
2080DATA 32769,1538,32770,1025,1539,32771,1026,1540,32772,1027,1542,32773,1542,32774,1029,1543,1028,32775,1030,1544,32776,1031,1545,32777,1032,1546,32778,1033,1547,32779,1034,1548,32780,1035,1549,1065,32781,1036
2090DATA 1550,32782,1037,1551,1576,9231,9768,32783,1038,1552,9490,9742,32784,1039,1553,32785,1040,1554,5394,5753,32786,1041,1555,3190,3703,32787,1042,1812,2113,2626,8468,8822,10869,32788,1300,1557,8410,8980,11812
2100DATA 32789,1044,1558,1057,32790,1045,1559,32791,1046,1560,9470,9983,32792,1047,1561,32793,1048,1562,32794,1049,1563,32795,1050,1564,32796,1051,1565,32797,1052,1566,32798,1053,1567,32799,1054,1568,32800,1055
2110DATA 32801,1058,1557,8922,32802,1059,1569,32803,1060,1570,32804,1061,1571,5290,5903,11284,12358,32805,1062,1572,4253,4879,7439,7837,13862,32806,1063,1573,13349,14087,32807,1064,1574,32808,1038,1575,3194,3707,4251
2120DATA 4764,7324,7835,9230,9990,32809,1066,1548,32810,1067,1577,32811,1068,1578,32812,1069,1579,32813,1070,1580,32814,1071,1581,32815,1072,1582,32816,1073,1583,32817,1584,32818,2611,32819,2098,2612,32820,2099
2130DATA 2613,32821,2100,2614,2142,32822,2101,2615,32823,2102,2616,32824,2103,2617,3165,3641,4756,32825,2104,2618,3128,3643,32826,2105,2619,32827,2106,2620,2150,2663,3129,3644,32828,2107,2621,3131,3645,7741,7271
2140DATA 32829,2108,2622,3132,3699,7228,7742,32830,2109,2623,7229,7743,32831,2110,2624,7230,7744,9472,9845,32832,2111,2625,7231,7745,32833,2112,2579,7232,7956,32834,2067,2627,7444,7747,32835,2114,2628,7234,7748
2150DATA 32836,2115,2629,7235,7749,32837,2116,2630,7236,7750,32838,2117,2631,7237,7751,12836,32839,2118,2632,7238,7752,32840,2119,2633,4367,4681,7239,7951,32841,2120,2634,4168,4682,14588,15101,32842,2121,2635,4169
2160DATA 4683,32843,2122,2636,4170,4684,5291,5804,32844,2123,2637,4171,4685,32845,2124,2638,4172,4686,32846,2125,2639,4173,4687,32847,2126,2640,4174,4688,32848,2127,2641,4175,4689,32849,2128,2642,4176,4690,32850
2170DATA 2129,2643,4177,32851,2130,2644,32852,2131,2645,32853,2132,2646,32854,2133,2647,32855,2134,2648,32856,2135,2649,32857,2136,2650,32858,2137,32859,2652,5791,32860,2139,2653,3219,3677,32861,2140,2654,3186
2180DATA 3640,3164,32862,2141,2613,32863,2656,32864,2143,2657,32865,2144,2658,32866,2145,2659,32867,2146,2660,32868,2147,2661,32869,2148,2662,32870,2149,2619,32871,2107,2664,7272,7740,32872,2151,2665,5284,5797
2190DATA 7273,7783,32873,2152,2666,7274,7784,32874,2153,2667,4249,4715,7275,7785,8406,8917,32875,2154,4202,4880,7440,7786,32876,3693,32877,3180,3694,32878,3181,3695,32879,3182,3696,32880,3183,3697,32881,3184,3698
2200DATA 32882,3185,3677,32883,3133,3700,32884,3187,3701,32885,3188,3702,9279,10002,10259,10920,32886,3189,3602,8211,8978,32887,3090,3705,32888,15481,32889,15993,3706,5137,5801,3191,32890,3193,3624,32891,3112,3708
2210DATA 32892,3195,3709,32893,3196,3710,32894,3197,3711,9478,9985,32895,3198,3712,32896,3199,3713,32897,3200,3714,32898,3201,3715,32899,3202,3716,32900,3203,3717,32901,3204,3718,32902,3205,32903,3720,4744,32904
2220DATA 3207,3721,4231,4745,32905,3208,3722,4232,4746,32906,3209,3723,4233,4747,32907,3210,3724,4234,4748,32908,3211,3725,4235,4749,32909,3212,3726,4236,4851,32910,3213,3727,32911,3214,3728,32912,3215,3729,32913
2230DATA 3216,3730,32914,3217,3731,32915,3218,3676,32916,4152,4757,32917,4244,4758,32918,4245,4759,32919,4246,4760,32920,4247,4761,32921,4248,4714,32922,4368,4763,7323,7952,32923,4250,4648,7208,7834,32924,4136
2240DATA 4765,7325,7720,32925,4252,4645,7205,7836,32926,4367,32927,5211,5792,32928,5390,5793,5279,32929,5280,5794,32930,5281,5795,32931,5282,5796,32932,5283,5736,32933,5224,5798,32934,5285,5799,32935,5286,5800
2250DATA 32936,5287,5906,10357,11024,32937,5241,5802,32938,5289,5668,32939,5391,5707,32940,5195,5805,32941,5292,5806,32942,5293,5807,5826,32943,5294,5808,32944,5295,5809,32945,5296,5810,6330,32946,5297,5811,32947
2260DATA 5298,5812,32948,5299,5813,32949,5300,5814,32950,5301,6839,32951,6326,6840,32952,6327,6841,32953,6328,32954,6331,6833,32955,6332,6842,32956,6333,6843,32957,5310,6844,32958,5311,5821,32959,5312,5822,32960
2270DATA 5313,5823,32961,5395,5824,32962,5294,5907,32963,8388,32964,8389,8899,32965,8390,8900,32966,8391,8901,32967,8392,8902,32968,8393,8903,32969,8394,8904,32970,8395,8905,32971,8396,8906,32972,8397,8907,32973
2280DATA 8398,8908,32974,8399,8909,32975,8400,8910,32976,8401,8911,32977,8402,8912,32978,8403,8913,32979,8404,8914,32980,8405,8915,32981,8298,8916,32982,8407,8810,32983,8464,8918,32984,8466,8976,32985,32986,8225
2290DATA 8724,32987,10460,32988,10461,10971,32989,10462,10972,32990,10463,10973,32991,4342,4837,10464,10974,32992,10465,10975,32993,10466,10976,32994,10467,10977,32995,10469,10978,32996,32997,4319,4880,10470,10979,32998,10471,10981
2300DATA 32999,10512,10982,33000,4841,33001,4328,4842,4369,33002,4329,4843,33003,4330,4844,33004,4331,4845,4338,33005,4332,4846,33006,4333,4847,33007,4334,4848,33008,4335,4852,33009,4850,33010,4337,4844,33011,4237
2310DATA 4852,33012,4339,4853,4336,33013,4340,4854,33014,4341,4831,33015,15097,33016,15097,33017,14584,15098,14583,33018,14585,15099,33019,14586,15100,33020,14587,14921,33021,14409,33022,9751,33023,9239,9984,33024,9471,9791
2320DATA 33025,9342,9986,33026,9473,9987,33027,9474,9988,33028,9475,33029,13574,33030,9256,9854,13575,14085,33031,13350,14086,33032,5897,33033,5384,5898,33034,5385,5899,33035,5386,5900,33036,5387,5901,33037,5388,5902
2330DATA 33038,5389,5792,33039,4133,4766,4680,5156,5803,7240,7717,33040,4203,4762,4325,7322,7787,8408,8919,10408,10983,33041,4841,33042,5288,5649,8310,8920,9333,9743,33043,5314,5825,33044,7233,7746,8212,8723,1043,1556,32768
2340DATA Northern,District,Piccadilly,Metropolitan,Central,Central,Circle,Bakerloo,Victoria,Jubilee,Waterloo & City,Escalator Link,Highbury Branch,East London,Piccadilly
2350DATA UP,DOWN
2360DATA 145,160,160,160,224,252,255,255,255,255,253,244,176,160,160
2370DATA 145,160,160,232,255,191,163,160,160,162,171,255,253,160,160
2380DATA 145,160,160,255,181,160,160,160,160,160,160,235,255,180,160
2390DATA 145,255,255,255,255,255,255,255,255,255,255,255,255,255,255
2400DATA 145,160,160,239,245,160,160,160,160,160,160,250,255,165,160
2410DATA 145,160,160,170,255,253,176,160,160,224,248,255,183,160,160
2420DATA 145,160,160,160,162,171,239,255,255,191,175,161,160,160,160
2430DEF PROC_LOGO
2440RESTORE 2360
2450FOR A%=1 TO 7
2460FOR B%=1 TO 15
2470READ T%
2480PRINT CHR$(T%);
2490NEXT
2500PRINT STRING$(15,CHR$(8));CHR$(10);
2510NEXT
2520ENDPROC
2530DEF PROC_SPLIGE
2540CLS
2550FOR C%=1 TO 20
2560PRINT TAB(RND(25),RND(17));
2570PROC_LOGO
2580PRINT
2590NEXT
2600CLS
2610ENDPROC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment