1000 '+--------------------+ 1010 '+ + 1020 '+ GOLF GAME + 1030 '+ + 1040 '+--------------------+ 1050 SCREEN0,0:PRINTCHR$(12); 1060 CLEAR2000,-3457 1070 DEFINTA-C,E-U 1080 DIMST(17),DR(17),C(24) 1090 DIMY(9),P(9),B(7,9),SC(9) 1100 '----- disp opening ----- 1110 PRINT" >> GOLF GAME <<" 1120 PRINT" You have following clubs.." 1130 PRINT" Woods :1w 2w .. 5w"; 1140 PRINT" Irons:1i 2i .. 9i" 1150 PRINT" Others:pw sw pt" 1160 PRINT" Direction number is"; 1170 PRINT" as follows: 1" 1180 PRINTTAB(33);"4 + 2" 1190 PRINTTAB(35);"3" 1210 LOCATE1,5:PRINT"Input 1-100 for POWER "; 1220 '----- read circle data ----- 1230 FORI=0TO24 1240 READC(I) 1250 NEXTI 1260 DATA3,6,7,8,9,10,11,10,11 1270 DATA12,11,12,11,12,11,12,11 1280 DATA10,11,10,9,8,7,6,3 1290 '----- club information ----- 1300 FORI=1TO17 1310 READST(I) 1320 NEXTI 1330 FORI=1TO17 1340 READDR(I) 1350 NEXTI 1360 DATA26,25,23,22,20,19,18,16 1370 DATA15,14,13,12,10,9,7,6,4 1380 DATA22,22,21,20,18,12,11,10 1390 DATA9,9,8,7,6,5,4,3,3 1400 CL$=",1w,2w,3w,4w,5w,1i,2i,3i,4i" 1410 CL$=CL$+",5i,6i,7i,8i,9i" 1420 CL$=CL$+",pw,sw,pt," 1430 '-----hole information ----- 1440 FORI=1TO9 1450 READY(I) 1460 FORJ=0TO7 1470 READB(J,I) 1480 NEXTJ,I 1490 DATA390,85,-18,99,-8,53,15,69,16 1500 DATA185,107,-17,92,0,69,16,58,-17 1510 DATA480,50,7,69,-4,95,-15,100,16 1520 DATA265,92,0,95,-15,53,15,68,24 1530 DATA300,83,-6,99,-16,58,-17,104,17 1540 DATA505,50,7,58,-17,68,24,88,18 1550 DATA405,69,4,136,-17,100,16,88,18 1560 DATA215,92,0,103,17,53,15,58,-17 1570 DATA290,68,-4,83,-7,68,24,88,19 1580 '----- par value ----- 1590 FORI=1TO9 1600 READP(I) 1610 NEXTI 1620 DATA4,3,5,3,4,5,4,3,4 1630 '----- green picture ----- 1640 FORI=3TO11 1650 P$(I\3)=P$(I\3)+CHR$(140+I) 1660 NEXT 1670 '----- flag string ----- 1680 FL$=CHR$(131)+CHR$(31) 1690 FL$=FL$+CHR$(29)+CHR$(132) 1700 '----- man string set ----- 1710 RESTORE1760 1720 FORI=1TO3:M$(I)="" 1730 FORJ=0TO15 1740 READA:M$(I)=M$(I)+CHR$(A) 1750 NEXTJ,I:M$(0)=M$(2) 1760 DATA138,134,32,31,29,29,29,32,139 1770 DATA32,31,29,29,29,32,137 1780 DATA133,134,32,31,29,29,29,135,136 1790 DATA32,31,29,29,29,32,137 1800 DATA32,140,141,31,29,29,29,32,139 1810 DATA142,31,29,29,29,32,32 1820 '----- character set ----- 1830 POKE-321,128:POKE-320,242 1840 RESTORE1900 1850 FORI=0TO25 1860 FORJ=0TO5 1870 READA:POKEI*6+J-3456,A 1880 NEXTJ,I 1890 '-- Flag character pattern -- 1900 DATA255,62,62,28,28,8 1910 DATA255,0,0,0,0,0 1920 '-- man character pattern -- 1930 DATA0,0,0,0,0,128 1940 DATA224,224,238,254,238,224 1950 DATA16,16,8,4,3,3 1960 DATA1,127,127,3,127,127 1970 DATA0,6,6,0,0,0 1980 DATA3,4,8,16,48,112 1990 DATA0,127,127,3,127,127 2000 DATA0,224,238,254,238,224 2010 DATA224,128,0,0,0,0 2020 DATA3,7,14,16,32,192 2030 '--green character pattern -- 2040 DATA224,240,248,252,254,254 2050 DATA255,255,0,241,241,251 2060 DATA254,254,252,248,240,224 2070 DATA31,63,127,255,255,255 2080 DATA255,255,254,255,255,255 2090 DATA255,255,255,127,63,31 2100 DATA0,0,0,0,1,1 2110 DATA3,3,3,3,3,3 2120 DATA1,1,0,0,0,0 2130 '-- Green bias -- 2140 DATA0,255,0,0,255,0 2150 DATA146,73,36,146,73,36 2160 DATA68,68,68,68,68,68 2170 DATA36,73,146,36,73,146 2180 DATA255,0,0,0,0,0 2190 PRINT 2200 LOCATE0,7:LINE INPUT" Hit return to start";I$ 2210 '}------ GAME START ------{ 2220 '----- today's condition ----- 2230 TC=RND(8)*25+5:TL=0 2240 ' ----- hole start ----- 2250 FORU=1TO9 2260 X=0:Y=0 2270 SH=1:LB=0 2280 ' ---- disp hole ---- 2290 WI=TC*(RND(8)-.5):WI$=" follow" 2300 IFWI<0THENWI$="against" 2310 PRINTCHR$(12) 2320 GOSUB4120 2330 FORI=1TO3 2340 LOCATE34,I+2 2350 PRINTP$(I); 2360 NEXT 2370 FORI=0TO7 2380 LOCATE14,I:PRINTCHR$(156); 2390 NEXT 2400 ' --- disp bunkers --- 2410 FORK=0TO3STEP2 2420 FORJ=0TO24 2430 M=J+19+B(K+1,U):I=B(K,U)-C(J)+90 2440 FORI=ITOC(J)+I+C(J)STEP2 2450 PSET(I,M) 2460 NEXTI,J,K 2470 '--- disp ponds --- 2480 FORK=4TO7STEP2 2490 FORJ=0TO24 2500 M=J+19+B(K+1,U):I=B(K,U)-C(J)+90 2510 FORI=ITOC(J)+I+C(J) 2520 PSET(I,M) 2530 NEXTI,J,K 2540 '--- put ball --- 2550 GOSUB4520 2560 LX=90:GOSUB4560 2570 '--- check bunker --- 2580 IFLB=0THEN2620 2590 LOCATE0,7:PRINT" BUNKER SHOT"; 2600 LOCATE0,4:PRINT" CLUB:sw"; 2610 I$="sw":GOTO2640 2620 '--- input club --- 2630 L=4:I$=" CLUB:":GOSUB3960 2640 CL=INSTR(CL$,","+I$+",") 2650 IFCL=0THEN2630 2660 CL=(CL+2)/3:C$=I$ 2670 '--- input direction & power --- 2680 GOSUB3880 2690 LOCATE1,4:PRINTC$; 2700 PRINTUSING" #.# ###%";DI,PW 2710 GOSUB4220 2720 '--- disp a shooting man ---- 2730 GOSUB4080 2740 LOCATE5,5:PRINTM$(0); 2750 FORI=0TO100:NEXT 2760 FORI=1TO3 2770 GOSUB4660 2780 NEXT:SH=SH+1 2790 '--- fly --- 2800 RL=-1:GOSUB4290:LB=0:LP=0:MF=0 2810 '--- check bunker or pond --- 2820 GOSUB4520 2830 FORI=0TO7STEP2 2840 L=((PX-B(I,U))^2+(PY-B(I+1,U))^2) 2850 IFI<4THENLB=LBOR(L<144) 2860 IFI>3THENLP=LPOR(L<144) 2870 NEXT 2880 LOCATE1,4 2890 IFOBTHENPRINT" OB "; 2900 IFLPTHENPRINT" POND "; 2910 IFLBTHENPRINT" BUNKER "; 2920 IFNOT(OBORLPORLB)THEN2980 2930 '--- penalty sound --- 2940 FORI=10TO33:SOUNDI*100,4:NEXT 2950 IFLPTHENY=0:PY=0:B=0:SH=SH+1 2960 IFOBTHENSH=SH+1 2970 GOTO2280 2980 '--- check green on --- 2990 L=123*SQR((X-Y(U))^2+Y*Y)/Y(U) 3000 IFL>9THEN2280 3010 ' ---- set green pattern --- 3020 PT=RND(8)*4 3030 '---putting --- 3040 L=SQR((X-Y(U))^2+Y*Y) 3050 IFL<2.1THEN3420 3060 PRINTCHR$(12):GOSUB4150 3070 LOCATE4,2:PRINT"On Green" 3080 '--- disp green --- 3090 FORI=0TO7 3100 LOCATE16,I 3110 PRINTSTRING$(21,152+PT); 3120 NEXTI 3130 '--- music of green on --- 3140 LOCATE26,2:PRINTFL$ 3150 '--- put a big flag --- 3160 PX=X-Y(U):PY=Y:A=PX:B=PY 3170 LX=156:GOSUB4560 3180 ' --- music of green on --- 3190 RESTORE3230:IFMFTHEN3280 3200 FORI=0TO8 3210 READK,J:SOUNDK,J 3220 NEXT 3230 DATA2348,20,2793,10,3516,20 3240 DATA2793,10,2348,10,2348,20 3250 DATA2092,10,2348,10 3260 MF=-1 3270 '--- input condition --- 3280 GOSUB3880 3290 '--- get flying vector --- 3300 WI=0:CL=17:GOSUB4220 3310 '--- disp man --- 3320 GOSUB4080 3330 FORI=2TO3 3340 GOSUB4660 3350 NEXTI:SH=SH+1 3360 '--- disp a rolling ball --- 3370 RL=0:GOSUB4290:LB=0:LP=0 3380 '--- check green on --- 3390 L=123*SQR((X-Y(U))^2+Y*Y)/Y(U) 3400 IFL>9THEN2810 3410 GOTO3030:'-- putting -- 3420 '---- cup in ---- 3430 SC(U)=SH-1-P(U):TL=TL+SC(U) 3440 LOCATE0,3:PRINT" IN THE CUP " 3450 IFSH=2THENPRINT" HOLE IN ONE!!" 3460 IFSC(U)=-3THENPRINT" ALBATROSS!!!" 3470 IFSC(U)=-2THENPRINT" NICE EAGLE!!" 3480 IFSC(U)=-1THENPRINT" NICE BIRDIE!" 3490 IFSC(U)=0THENPRINT" NICE PAR " 3500 IFSC(U)<=0THEN3540 3510 '---bogey --- 3520 PRINTUSING" ## BOGEY";SC(U) 3530 GOTO3600 3540 '--- fanfare --- 3550 RESTORE3590 3560 FORI=0TO2 3570 READK,J:SOUNDK,J 3580 NEXT 3590 DATA3134,30,2484,10,2092,40 3600 '--- disp score --- 3610 LOCATE0,5 3620 PRINTUSING" SCORE## ";SC(U) 3630 PRINTUSING" TOTAL## ";TL 3640 '--- hole end music --- 3650 RESTORE3690 3660 FORI=0TO5 3670 READK,J:SOUNDK,J 3680 NEXT 3690 DATA2348,10,2793,20,2348,10 3700 DATA1396,20,1576,20,1758,20 3710 '--- next hole --- 3720 FORI=0TO2000:NEXT 3730 NEXTU:REM next hole 3740 '----- disp total score ----- 3750 PRINTCHR$(12);" SCORE" 3760 FORU=0TO8 3770 LOCATE(U\3)*13,(UMOD3)+1 3780 PRINTUSING"No# PAR#";U+1,P(U+1); 3790 PRINTUSING"*## ";SC(U+1); 3800 NEXT 3810 LOCATE12,4:PRINTUSING"Total over/under par###";TL 3820 '----- game over ? ----- 3830 LOCATE2,5 3840 INPUT" CONTINUE (y/n)";I$ 3850 IFI$="y"ORI$="Y"THEN2210 3860 CLEAR256,62336!:END:' of main 3880 '---- input direction and power ---- 3890 L=5:I$=" DIREC:":GOSUB3960 3900 DI=VAL(I$) 3910 IFDI<1ORDI>=5THEN3890 3920 L=6:I$=" POWER:":GOSUB3960 3930 PW=VAL(I$) 3940 IFPW<1ORPW>100THEN3920 3950 RETURN 3960 '---- input ---- 3970 LOCATE0,L:PRINTSPACE$(14); 3980 LOCATE0,L:PRINTI$; 3990 I$="" 4000 FORJ=1TO4 4010 IN$=INPUT$(1) 4020 IFIN$=CHR$(13)THENRETURN 4030 IFIN$<=" "THEN4070 4040 PRINTIN$;:I$=I$+IN$ 4050 NEXTJ 4060 '-- abnormal return -- 4070 I$="":RETURN 4080 '---- erase man ---- 4090 FORI=5TO7 4100 LOCATE0,I:PRINTSPACE$(14); 4110 NEXTI:RETURN 4120 '---- display condition ---- 4130 LOCATE4,2 4140 PRINTUSINGWI$+"## ";ABS(WI) 4150 LOCATE0,0 4160 PRINTUSING" No ## ###YARD";U,Y(U) 4170 PRINTUSING" PAR# SHOT ##";P(U),SH 4180 LOCATE0,3 4190 L=SQR((Y(U)-X)^2+Y*Y) 4200 PRINTUSING"Yds To Go:###";L 4210 RETURN 4220 '---- get flying vector ---- 4230 V=(ST(CL)*PW*(RND(8)+3))/35 4240 V=V+V*WI/100 4250 DI=DI+(RND(8)-.5)*DR(CL)/50 4260 DX=SIN((DI-1)*1.5708)*V 4270 DY=-COS((DI-1)*1.5708)*V 4280 RETURN 4290 '---- fly ---- 4300 TX=X:TY=Y 4310 FORK=1TO30 4320 Y=Y+DY/30:PY=Y 4330 X=X+DX/30:PX=X-Y(U) 4340 IFNOTRLTHEN4360 4350 PX=X/Y(U)*123:PY=Y/Y(U)*123 4360 '-- check OB -- 4370 IFX<0ORX/Y(U)*123>148THEN4500 4380 IFABS(Y/Y(U)*123)>30THEN4500 4390 IFNOTRLANDABS(Y)>30THEN4490 4400 PRESET(A+LX,B+31) 4410 PRESET(A+LX+1,B+31) 4420 PRESET(A+LX,B+32) 4430 PRESET(A+LX+1,B+32) 4440 PSET(PX+LX,PY+31) 4450 PSET(PX+LX+1,PY+31) 4460 PSET(PX+LX,PY+32) 4470 PSET(PX+LX+1,PY+32) 4480 A=PX:B=PY 4490 NEXTK:OB=0:RETURN 4500 ' --- OB --- 4510 X=TX:Y=TY:OB=-1 4520 '---- convert cordinates ---- 4530 PX=X/Y(U)*123:PY=Y/Y(U)*123 4540 A=PX:B=PY 4550 RETURN 4560 '---- disp ball ---- 4570 FORI=0TO3 4580 FORJ=-1TO2 4590 PRESET(PX+LX+J,PY+I+30) 4600 NEXTJ,I 4610 PSET(PX+LX,PY+31) 4620 PSET(PX+LX+1,PY+31) 4630 PSET(PX+LX,PY+32) 4640 PSET(PX+LX+1,PY+32) 4650 RETURN 4660 '---- disp man and sound ---- 4670 LOCATE5,5:PRINTM$(I); 4680 FORJ=30-I*5TO30-I*10+1STEP-1 4690 SOUNDJ*80,1 4700 NEXT:RETURN 4701 END