10 ' Combat
20 ' by K.Freeman 30 ' 40 MODE 0 50 DEFINT a-z 60 SYMBOL AFTER 256:MEMORY &8FFF 70 SYMBOL AFTER 32 80 LOCATE 8,10:PRINT "COMBAT" 90 LOCATE 5,17:PRINT"please wait." 100 GOSUB 1330 110 DIM grid(20,12) 120 SOUND 4,2000,7,13:MODE 0 130 BORDER 0 140 RESTORE 840 150 'show screen 160 FOR y=1 TO 12 170 READ n$ 180 FOR x=1 TO 20 190 s=(ASC(MID$(n$,x,1)))-97 200 —SPRITE,(x-1)*2,(y-1)*2,s 210 grid(x,y)=s 220 NEXT x 230 NEXT y 240 'variables 250 x(1)=2:y(1)=11:r(1)=0 260 a(1)=2:b(1)=11:o(1)=3 270 x(2)=19:y(2)=2:r(2)=0 280 a(2)=19:b(2)=2:o(2)=7 290 fire(1)=1:fire(2)=1 300 —SPRITE,2,20,3:grid(2,11)=3 310 —SPRITE,36,2,7:grid(19,2)=7 320 'keypress 330 ON fire(1) GOTO 350,970 340 'tank 1 keyboard 350 IF INKEY(62)=0 AND x(1)<19 THEN dx=1:dy=0:s=1:GOSUB 640:GOTO 400 360 IF INKEY(63)=0 AND x(1)>1 THEN dx=-1:dy=0:s=2:GOSUB 640:GOTO 400 370 IF INKEY(69)=0 AND y(1)>1 THEN dx=0:dy=-1:s=3:GOSUB 640:GOTO 400 380 IF INKEY(71)=0 AND y(1)<11 THEN dx=0:dy=1:s=4:GOSUB 640:GOTO 400 390 IF INKEY(47)=0 AND fire(1)=1 THEN f=1:GOSUB 1230 400 ON fire(2) GOTO 420,980 410 'tank 2 joystick 420 IF INKEY(75)=0 AND x(2)<19 THEN dx=1:dy=0:s=5:GOSUB 640:GOTO 470 430 IF INKEY(74)=0 AND x(2)>1 THEN dx=-1:dy=0:s=6:GOSUB 640:GOTO 470 440 IF INKEY(72)=0 AND y(2)>1 THEN dx=0:dy=-1:s=8:GOSUB 640:GOTO 470 450 IF INKEY(73)=0 AND y(2)<11 THEN dx=0:dy=1:s=7:GOSUB 640:GOTO 470 460 IF INKEY(76)=0 AND fire(2)=1 THEN f=2:GOSUB 1230 470 IF r(1)<10 AND r(2)<10 THEN 330 480 LOCATE 3,25:PRINT "tank wins"; 490 IF r(1)=10 THEN f=1 ELSE f=2 500 LOCATE 9,25:PRINT f; 510 FOR t=1 TO 2000:NEXT 520 LOCATE 1,25:PRINT" p to play "; 530 WHILE INKEY(27)<>0:WEND 540 FOR f=1 TO 2 550 —SPRITE,(a(f)-1)*2,(b(f)-1)*2,o(f) 560 grid(x(f),y(f))=31 570 NEXT 580 FOR f=1 TO 2 590 IF fire(f)=2 THEN —SPRITE,(g(f)-1)*2,(h(f)-1)*2,9 600 NEXT 610 LOCATE 1,25:PRINTSTRING$(20,32); 620 GOTO 250 630 'move tanks 640 IF s>4 THEN f=2 ELSE f=1 650 IF fire(3-f)=1 THEN 680 660 ff=f:IF f=1 THEN f=2 ELSE f=1 670 GOSUB 1110:f=ff 680 IF grid(x(f)+dx,y(f)+dy)<10 THEN RETURN 690 SOUND f,1000,5,11,,,5*f 700 dx(f)=dx:dy(f)=dy 710 x(f)=x(f)+dx(f):y(f)=y(f)+dy(f) 720 IF fire(3-f)=1 THEN 750 730 ff=f:IF f=1 THEN f=2 ELSE f=1 740 GOSUB 1110:f=ff 750 IF a(f)=x(f) AND b(f)=y(f) AND o(f)=s THEN RETURN 760 SOUND n,1000,5,10,,,5*f 770 —SPRITE,(a(f)-1)*2,(b(f)-1)*2,o(f) 780 —SPRITE,(x(f)-1)*2,(y(f)-1)*2,s 790 grid(a(f),b(f))=31 800 grid(x(f),y(f))=s 810 a(f)=x(f):b(f)=y(f):o(f)=s 820 RETURN 830 'screen layout 840 DATA aaaaaaaaaaaaaaaaaaaa 850 DATA arrrrrrrrrrrrrrrrara 860 DATA arrrarrrraarrarrrrra 870 DATA araarrrrrarrrarrrrra 880 DATA arrrrrrarrrrrraarrra 890 DATA arrrrrrraarrrrrrrrra 900 DATA araarrrarrrrrrrrrrra 910 DATA arrrarrarraaarrarrra 920 DATA arrrrraarrarrrrrarra 930 DATA arrrrrrrrrarrrraarra 940 DATA ararrrrrrrrrrrrrrrra 950 DATA aaaaaaaaaaaaaaaaaaaa 960 ' fire/move shot 970 f=1:GOTO 990 980 f=2 990 p=grid(z(f)+dz(f),v(f)+dv(f)) 1000 IF p<10 AND w(f)=0 THEN fire(f)=1:GOTO 1090 1010 ' 1020 IF p<10 THEN fire(f)=1:GOTO 1060 1030 IF w(f)=0 THEN SOUND f,2000,21,9,,,10:w(f)=1:GOTO 1050 1040 z(f)=z(f)+dz(f):v(f)=v(f)+dv(f) 1050 —SPRITE,(g(f)-1)*2,(h(f)-1)*2,9 1060 —SPRITE,(z(f)-1)*2,(v(f)-1)*2,9 1070 g(f)=z(f):h(f)=v(f) 1080 IF fire(f)=2 THEN GOSUB 1110 1090 ON f GOTO 400,470 1100 'possible hit 1110 IF x(3-f)<>z(f)+dz(f) AND a(3-f)<>g(f)+dz(f) THEN RETURN 1120 IF y(3-f)<>v(f)+dv(f) AND b(3-f)<>h(f)+dv(f) THEN RETURN 1130 BORDER 13+f 1140 SOUND f,1000,10,15,,,20 1150 r(f)=r(f)+1 1160 fire(f)=1 1170 —SPRITE,(z(f)-1)*2,(v(f)-1)*2,9 1180 LOCATE 5,25:PRINT r(1); 1190 LOCATE 14,25:PRINT r(2); 1200 BORDER 0 1210 RETURN 1220 'shot direction 1230 w(f)=0 1240 z(f)=x(f) 1250 dz(f)=dx(f) 1260 v(f)=y(f) 1270 dv(f)=dy(f) 1280 fire(f)=2 1290 g(f)=99:h(f)=99 1300 RETURN 1310 'poke code into memory 1320 ' à &9000-&9324 1330 RESTORE 1490:mem=&9000 1340 BORDER 12,24 1350 FOR dl=1 TO 67:READ d$,ck:rs=0 1360 FOR by=1 TO 24 STEP 2 1370 a=VAL("&"+MID$(d$,by,2)) 1380 rs=rs+a 1390 POKE mem,a 1400 mem=mem+1 1410 NEXT by:IF rs<>ck THEN 1450 1420 NEXT dl:CALL &9000 1430 RESTORE 2170 1440 FOR t=0 TO 15:READ k:INK t,k:NEXT:RETURN 1450 SOUND 4,600,6,15:BORDER 6 1460 MODE 1:INK 0,1:INK 1,26 1470 PRINT"data error in line..";dl*10+1480 1480 END 1490 DATA 010E90210A90CDD1BCC90A90,1303 1500 DATA 0E901390C31A905350524954,1088 1510 DATA C500DD4602DD4E04DD7E00FE,1394 1520 DATA 10D0076F2600117090197E5F,899 1530 DATA 237EFEFFC85778FE19D0D504,1781 1540 DATA 11500021B0BF1910FDD179FE,1375 1550 DATA 28D007D55F160019D11A4713,935 1560 DATA 1A4F13C5E51AAE77231310F9,1188 1570 DATA E10100080930040150C009C1,770 1580 DATA 0D20E8C99090D29014915691,1516 1590 DATA 9891DA911C925E92A092E292,1752 1600 DATA FFFFFFFFFFFFFFFFFFFFFFFF,3060 1610 DATA 0410FCFC3C0C0CFCFC3C3C0C,1244 1620 DATA FCFCFC3C0CFCFCFC3C0C0CFC,1920 1630 DATA FC3C3C0CFCFCFC3C0CFCFCFC,1968 1640 DATA 3C0C0CFCFC3C3C0CFCFCFC3C,1536 1650 DATA 0CFCFCFC3C0C0CFCFC3C3C0C,1488 1660 DATA FCFCFC3C0CFC041000000000,1100 1670 DATA 0000000015458A0015458A00,456 1680 DATA 9FCF33339FCF3333DFBF6F00,1461 1690 DATA DFBF6F00DFBF6F00DFBF6F00,1575 1700 DATA 9FCF33339FCF333315458A00,1164 1710 DATA 15458A000000000000000000,228 1720 DATA 041000000000000000000045,89 1730 DATA 8A2A00458A2A3333CF6F3333,951 1740 DATA CF6F009F7FEF009F7FEF009F,1527 1750 DATA 7FEF009F7FEF3333CF6F3333,1413 1760 DATA CF6F00458A2A00458A2A0000,816 1770 DATA 000000000000041000221100,71 1780 DATA 002211000022110000221100,153 1790 DATA 00679B0000679B0045373B8A,837 1800 DATA 45373B8A459F6F8A459F6F8A,1275 1810 DATA 00DFEF0000DFEF00157FBF2A,1305 1820 DATA 157FBF2A00CFCF0000CFCF00,1209 1830 DATA 041000CFCF0000CFCF00157F,996 1840 DATA BF2A157FBF2A00DFEF0000DF,1299 1850 DATA EF00459F6F8A459F6F8A4537,1317 1860 DATA 3B8A45373B8A00679B000067,879 1870 DATA 9B0000221100002211000022,291 1880 DATA 110000221100041000000000,88 1890 DATA 000000004414280044142800,256 1900 DATA 443C0C0C443C0C0C7DEE9C00,823 1910 DATA 7DEE9C007DEE9C007DEE9C00,1557 1920 DATA 443C0C0C443C0C0C44142800,432 1930 DATA 441428000000000000000000,128 1940 DATA 041000000000000000000014,40 1950 DATA 2888001428880C0C3C9C0C0C,636 1960 DATA 3C9C006CDDBE006CDDBE006C,1362 1970 DATA DDBE006CDDBE0C0C3C9C0C0C,1194 1980 DATA 3C9C00142888001428880000,608 1990 DATA 0000000000000410003C3C00,140 2000 DATA 003C3C0044DDEE8844DDEE88,1446 2010 DATA 007DBE00007DBE00146C9C28,954 2020 DATA 146C9C28144C8C28144C8C28,876 2030 DATA 001C2C00001C2C0000080400,156 2040 DATA 000804000008040000080400,36 2050 DATA 041000080400000804000008,52 2060 DATA 040000080400001C2C00001C,116 2070 DATA 2C00144C8C28144C8C28146C,724 2080 DATA 9C28146C9C28007DBE00007D,960 2090 DATA BE0044DDEE8844DDEE88003C,1576 2100 DATA 3C00003C3C00041000000000,200 2110 DATA 000000000000000000000000,0 2120 DATA 000000000000000000040800,12 2130 DATA 000408000004080000040800,36 2140 DATA 000000000000000000000000,0 2150 DATA 000000000000000000000000,0 2160 DATA 000000000000000000000000,0 2170 DATA 12,24,19,21,7,3,6,15 2180 DATA 16,8,11,2,20,26,25,0 |