10 REM BATTLESHIP 64 13 REM BY MIKE COOKE 16 REM COPYRIGHT 1987 19 REM PUBLISHED BY UPTIME 22 REM 26 CLR 28 PRINT"[147] " 31 PRINT" "TAB(7)" "TAB(31)" "TAB(38)" " 34 PRINT" "TAB(8)" [146][155] [\]]^_!#$% &'("; 37 PRINTTAB(30)" "TAB(38)" " 40 PRINT" "TAB(9)" "TAB(29)" "TAB(38)" " 43 PRINT" "TAB(10)" "TAB(38)" " 46 PRINT" "TAB(11)" [155][146] BATTLE SCREEN  "TAB(38)" " 49 PRINT" "TAB(12)" "TAB(38)" " 52 FORT=1TO11:PRINT" "TAB(19)" "TAB(38)" ":NEXTT 55 PRINT" " 57 PRINT" [151]PRESS[155] F8[151] TO RETURN TO UPTIME" 58 PRINT"[154]ALLIES"TAB(31)"ENEMIES" 61 PRINT"[152]ABCDEFGHIJKLMNO"TAB(23)"ABCDEFGHIJKLMNO" 64 PRINT"0[157]1[157]2[157]3[157]4[157]5[157]6[157]7[157]8[157]9" 67 PRINTTAB(22)"[145][145][145][145][145][145][145][145][145][145]0[157]1[157]2[157]3[157]4[157]5[157]6[157]7[157]8[157]9[154]" 70 Y=1346:FORT=0TO9:FORZ=0TO14:POKEY+(T*40)+Z,103:POKEY+(T*40)+Z+21,103 73 POKE55618+(T*40)+Z,14:POKE55618+(T*40)+Z+21,14:NEXTZ,T 76 FORT=1TO8:POKE1362+T*40,102:POKE1364+T*40,102:NEXTT:IFFLAG=1THENRETURN 79 V=53248:POKEV+16,1:POKEV,35:POKEV+1,75:POKEV+2,50:POKEV+3,75:POKEV+21,3 82 REM * VARIABLES * 85 CV$="[193][157][194][157][195][157][196][157][197]":CH$="[210][211][212][213][214]" 88 BV$="[198][157][199][157][200][157][201]":BH$="[215][216][217][218]" 91 DV$="[202][157][203][157][204]":DH$="[219][220][221]" 94 SV$="[205][157][206][157][207]":SH$="[255][223][161]" 97 PV$="[208][157][209]":PH$="[162][163]" 100 DIMSH$(9,3):DIMHI(9,3):DIMP1$(9,6):DIMP2$(9,6) 103 FORT=1TO8:FORY=1TO2:READSH$(T,Y):NEXTY,T 106 REM * SHIP DATA * 109 DATA CARRIER,5,BATTLESHIP,4,DESTROYER 1,3,DESTROYER 2,3,SUB 1,3,SUB 2,3 112 DATA PT BOAT 1,2,PT BOAT 2,2 115 GOSUB124 118 GOTO142 121 REM * SOME SUB ROUTINES * 124 REM ... CLEAR SPACE ... 127 FORT=1823TO2022:POKET,32:NEXTT 130 PRINT"":RETURN 133 REM ... PRESS KEY ... 134 POKE 198,0 136 PRINTTAB(14)"PRESS RETURN[152]"; 139 GETA$:IFA$="[140]"THEN1000 140 IFA$<>CHR$(13)THEN139 141 RETURN 142 REM BEGINNING INPUTS 145 PRINTTAB(11)"[152]HOW MANY PLAYERS?":PRINTTAB(16)"1 OR 2?" 146 GETNP$:IFNP$="[140]"THEN1000 147 NP=VAL(NP$):IFNP<1ORNP>2THEN 146 148 REM 151 REM PLAYER ONE INPUT 154 REM 210 GOSUB124:PRINT" PLAYER ONE INPUT":PN=0 212 IFNP=1THENPRINT" THE ENEMY PROMISES NOT TO LOOK":GOTO217 214 PRINT" PLAYER TWO PLEASE TURN AWAY" 217 GOSUB133:GOSUB124 218 FORS=1TO8 220 PRINTTAB(6)"[155]"SH$(S,1)":":PRINTTAB(8)"[152]START ON "; 230 GETL$:IFL$="[140]"THEN1000 231 IFL$<"A"ORL$>"O"THEN230 235 PRINT"";L$;:ST$=L$:L$="" 240 GETL$:IFL$="[140]"THEN1000 241 IFL$<"0"ORL$>"9"THEN240 245 PRINTL$:ST$=ST$+L$:L$="":PRINTTAB(8)"[152]POINT "; 255 GETL$:IFL$="[140]"THEN1000 256 IFL$<>"R"ANDL$<>"L"ANDL$<>"U"ANDL$<>"D"THEN255 260 IFL$="R"THENPRINT"RIGHT":GOTO280 265 IFL$="L"THENPRINT"LEFT":GOTO281 270 IFL$="U"THENPRINT"UP":GOTO291 275 IFL$="D"THENPRINT"DOWN":GOTO290 280 CS=55616:FORC=1TOVAL(SH$(S,2)):GOTO282 281 CS=55616:FORC=-(VAL(SH$(S,2)))+2TO1 282 VV=(CS+(ASC(ST$)-64)+(VAL(RIGHT$(ST$,1))*40)+PN*21+C) 283 VP=PEEK(VV):IFVP-(INT(VP/16)*16)<>14THEN315 284 NEXTC:GOTO320 290 CS=55577:FORC=1TOVAL(SH$(S,2)):GOTO292 291 CS=55577:FORC=-(VAL(SH$(S,2)))+2TO1 292 VV=(CS+(ASC(ST$)-64)+(VAL(RIGHT$(ST$,1))*40)+PN*21+C*40) 293 VP=PEEK(VV):IFVP-(INT(VP/16)*16)<>14THEN315 294 NEXTC:GOTO340 315 GOSUB124:PRINTTAB(9)"[155]ILLEGAL SECTOR, CAPT":PRINTTAB(11)"PLEASE TRY AGAIN" 316 GOSUB133:GOSUB124:GOTO220 320 IFL$="L"THENS$=CHR$(ASC(ST$)-VAL(SH$(S,2))+1)+RIGHT$(ST$,1):ST$=S$:L$="R" 322 PRINT"":FORD=1TO7+VAL(RIGHT$(ST$,1)):PRINT:NEXTD 324 PRINTTAB((ASC(ST$)-63)+PN*21);"[152]"; 325 ONSGOSUB326,327,328,328,329,329,330,330:GOTO370 326 PRINTCH$:RETURN 327 PRINTBH$:RETURN 328 PRINTDH$:RETURN 329 PRINTSH$:RETURN 330 PRINTPH$:RETURN 340 IFL$="U"THENS$=LEFT$(ST$,1)+STR$((VAL(RIGHT$(ST$,1)))-(VAL(SH$(S,2))-1)) 341 IFL$="U"THENST$=S$ 342 PRINT"":FORD=1TO7+VAL(RIGHT$(ST$,1)):PRINT:NEXTD 344 PRINTTAB((ASC(ST$)-63)+PN*21);"[152]"; 345 ONSGOSUB346,347,348,348,349,349,350,350:GOTO400 346 PRINTCV$:RETURN 347 PRINTBV$:RETURN 348 PRINTDV$:RETURN 349 PRINTSV$:RETURN 350 PRINTPV$:RETURN 370 REM PUT SHIP IN ARRAY 375 REM RIGHT 380 FORD=1TOVAL(SH$(S,2)) 385 IFPN=0THENP1$(S,D)=CHR$(ASC(ST$)+D-1)+RIGHT$(ST$,1) 386 IFPN=1THENP2$(S,D)=CHR$(ASC(ST$)+D-1)+RIGHT$(ST$,1) 390 NEXTD:GOSUB124:NEXTS:GOTO450 400 REM DOWN 405 FORD=1TOVAL(SH$(S,2)) 410 IFPN=0THENP1$(S,D)=LEFT$(ST$,1)+CHR$(ASC(RIGHT$(ST$,1))+D-1) 411 IFPN=1THENP2$(S,D)=LEFT$(ST$,1)+CHR$(ASC(RIGHT$(ST$,1))+D-1) 420 NEXTD:GOSUB124:NEXTS 450 REM PLAYER TWO 451 IFNP=1THEN500 452 IFPN=1THEN600 455 PRINT"[152] READY TO CLEAR THE GRID FOR PLAYER TWO":GOSUB133:FLAG=1:GOSUB70 460 GOSUB124:PRINT" PLAYER TWO INPUT" 465 PRINT"[145] PLAYER ONE PLEASE TURN AWAY":PN=1 470 GOTO217 500 REM COMPUTER PLAYER SETUP 505 PRINT" [152]THE ENEMIES ARE PLACING THEIR SHIPS..." 510 OPEN15,8,15,"I0":OPEN1,8,2,"BATTLEDATA2,L,"+CHR$(100) 515 INPUT#15,A,B$:IFA<20ORA=50THEN520 516 PRINT"DISK ERROR...PLEASE CORRECT.":GOSUB133:GOSUB124:CLOSE1:CLOSE15:GOTO500 520 R=INT(RND(1)*20)+1 525 PRINT#15,"P"+CHR$(98)+CHR$(R)+CHR$(0) 530 INPUT#1,A$ 535 PRINT#15,"P"+CHR$(98)+CHR$(R)+CHR$(0) 540 CLOSE1:CLOSE15 545 T=1:FORS=1TO8:FORC=1TOVAL(SH$(S,2)) 550 P2$(S,C)=MID$(A$,T,2):T=T+2 555 NEXTC:NEXTS 600 REM BATTLE 602 IFNP=2THEN605 603 GOSUB124:PRINT"[152] PREPARE FOR THE BATTLE":GOSUB133:GOTO620 605 PRINT"[152] PREPARE TO CLEAR THE GRID FOR BATTLE":GOSUB133:FLAG=1:GOSUB70 620 PN=0 622 GOSUB124 623 IFNP=1ANDPN=1THEN950 625 IFPN=0THENPRINT"[155] ALLIES ATTACK([152]" 630 IFPN=1THENPRINT"[155] ENEMIES ATTACK([152]" 635 PRINTTAB(10)"SECTOR TO ATTACK: "; 640 GETL$:IFL$="[140]"THEN1000 645 IFL$<"A"ORL$>"O"THEN640 650 PRINT""L$;:AT$=L$:L$="" 655 GETL$:IFL$="[140]"THEN1000 660 IFL$<"0"ORL$>"9"THEN655 665 AT$=AT$+L$:PRINTL$ 667 CS=55617 670 IFPN=0THENSE=(CS+(ASC(AT$)-64)+(VAL(RIGHT$(AT$,1))*40)+21):VP=PEEK(SE) 671 IFPN=1THENSE=(CS+(ASC(AT$)-64)+(VAL(RIGHT$(AT$,1))*40)):VP=PEEK(SE) 675 IFVP-INT(VP/16)*16=14THEN680 676 GOSUB124:PRINT"[152] WE HAVE ATTACKED THERE, CAPT":GOSUB133:GOTO622 680 PRINTTAB(12)"FIREING...";:GOSUB2000 685 FORS=1TO8:FORC=1TO5 690 ONPN+1GOTO700,710 700 IFP2$(S,C)=AT$THEN720 701 GOTO715 710 IFP1$(S,C)=AT$THEN720 715 NEXTC,S:GOTO900 720 REM HIT 721 POKESE,2:POKESE-54272,100 722 PRINTTAB(17)"HIT(([152]" 725 GOSUB2500:GOSUB124 726 IFPN=0THENPRINT"[155] ALLIES ATTACK([152]" 727 IFPN=1THENPRINT"[155] ENEMIES ATTACK([152]" 729 PRINTTAB(20-(LEN(SH$(S,1))+14)/2)"SHIP DAMAGED: ";SH$(S,1)"[152]" 730 IFPN=0THENHI(S,2)=HI(S,2)+1:IFHI(S,2)=VAL(SH$(S,2))THEN740 731 IFPN=1THENHI(S,1)=HI(S,1)+1:IFHI(S,1)=VAL(SH$(S,2))THEN740 735 GOSUB133:IFPN=0THENPN=1:GOTO737 736 PN=0 737 GOTO622 740 PRINTTAB(9)"SHE IS SUNK, CAPTIAN(" 741 IFPN=0THENS2=S2+1:POKE1364+S2*40,24:POKE1364+S2*40+54272,2 742 IFPN=1THENS1=S1+1:POKE1362+S1*40,24:POKE1362+S1*40+54272,2 745 IFS1<8ANDS2<8THEN735 750 REM FINISHED 751 FORT=1TO1000:NEXTT 755 PRINT"[147][152]":IFPN=0THENW$="ALLIES":L$="ENEMIES" 757 IFPN=1THENW$="ENEMIES":L$="ALLIES" 759 PRINT:PRINT:PRINT" THE ";W$;"[152] ARE THE VICTORS(" 761 PRINT:PRINT" SORRY ";L$;"[152](((" 762 PRINT 763 FORT=1TO4 764 PRINT"  [152]":NEXTT 765 V=53248:FORT=75TO115:FORY=1TO50:NEXTY 766 IFPN=0THENPOKEV+1,T 767 IFPN=1THENPOKEV+3,T 768 NEXTT 769 PRINT:PRINT" WOULD YOU LIKE TO PLAY AGAIN OR" 770 PRINTTAB(11)"RETURN TO UPTIME?":PRINTTAB(15)"P OR R? 771 [161]A$ 772 [139]A$[178]"R"[167]1000 773 [139]A$[178]"P"[167][138] 774 [137]771 899 [128] 900 [143] MISS 901 [151]SE,6:[151]SE[171]54272,100 902 [153][163]16)"MISS(" 905 [141]3000:[139]PN[178]0[167]PN[178]1:[137]622 906 PN[178]0:[137]622 950 [143] COMPUTER PLAYER 955 [153]"PRINT# THE ENEMIES FIRE..."; 957 [139]M[178]3[167]990 959 AT$[178][199]([181]([187](0)[172]15)[170]65) 961 AT$[178]AT$[170][199]([181]([187](0)[172]10)[170]48) 963 CS[178]55617:SE[178](CS[170]([198](AT$)[171]64)[170]([197]([201](AT$,1))[172]40)) 964 VP[178][194](SE):[139]VP[171]([181](VP[173]16)[172]16)[178]6[167]959 965 [139]VP[171]([181](VP[173]16)[172]16)[178]2[167]959 966 [141]2000 967 [129]S[178]1[164]8:[129]C[178]1[164][197](SH$(S,2)) 969 [139]P1$(S,C)[178]AT$[167]975 971 [130]C:[130]S:[153]"AND MISS(":[141]3000:M[178]M[170]1 973 [151]SE,6:[151]SE[171]54272,100:[141]133:PN[178]0:[137]622 975 [153]"AND HIT(PRINT#":[141]2500:[151]SE,2:[151]SE[171]54272,100 977 HI(S,1)[178]HI(S,1)[170]1:[153]" SHIP DAMAGED: ";SH$(S,1);"PRINT#":M[178]0 979 [139]HI(S,1)[178][197](SH$(S,2))[167][153][163]15)"ITS SUNK(":S1[178]S1[170]1 980 [139]HI(S,1)[178][197](SH$(S,2))[167][151]1362[170]S1[172]40,24:[151]1362[170]S1[172]40[170]54272,2 981 [139]S1[178]8[167][141]133:[137]750 983 [141]133:PN[178]0:[137]622 990 R1[178][181]([187](0)[172]8)[170]1:R2[178][181]([187](0)[172][197](SH$(R1,2)))[170]1 992 AT$[178]P1$(R1,R2) 994 CS[178]55617:SE[178](CS[170]([198](AT$)[171]64)[170]([197]([201](AT$,1))[172]40)):VP[178][194](SE) 996 [139]VP[171]([181](VP[173]16)[172]16)[178]2[167]990 997 [137]966 999 [128] 1000 [143] RETURN TO UPTIME SUBRO 1001 [158]8[172]4096[170]4 2000 [143] SOUND1 2005 [151]54296,15 2007 [151]54277,129:[151]54278,170 2009 [151]54273,15:[151]54272,50 2011 [151]54276,129:[129]T[178]1[164]150:[130]T 2013 [151]54276,130 2014 [142] 2500 [143] SOUND2 2505 [151]54296,15 2507 [151]54277,129:[151]54278,170 2509 [151]54273,1:[151]54272,50 2511 [151]54276,129:[129]T[178]1[164]200:[130]T 2513 [151]54276,130 2514 [142] 3000 [143] SOUND3 3005 [151]54296,15 3007 [151]54277,129:[151]54278,170 3009 [151]54273,30:[151]54272,50 3011 [151]54276,129:[129]T[178]1[164]200:[130]T 3013 [151]54276,130 3014 [142]