====== TRAFALGAR ====== {{:otros:Trafalgar_p1.jpg?690|}} ===== Info ===== ^ Author | Ralph Wilgalis | ^ Compatibility | Amstrad PCW 8256 / 8512 / 9512 | ^ Year | 1992 | ^ Gender | Table | ^ Controls | Keyboard | ^ Language | German | ^ Status | [[preserved|Preserved]] | ===== Screenshots ===== {{:otros:Trafalgar_screenshot01.png?220}} {{:otros:Trafalgar_screenshot02.png?220}} {{:otros:Trafalgar_screenshot03.png?220}} {{:otros:Trafalgar_screenshot04.png?220}} ===== Description ===== Trafalgar is a deluxe version of the popular game "Battleship". This somewhat more modern game than what we are used to seeing in a PCW, takes much more care of the graphics and sound. Our mission is to sink the enemy fleet but based on the famous naval battle of Trafalgar. ===== Listing ===== * **__List - TRAF.BAS__** 10 OPTION RUN:OPTION BASE 1:DEFINT a-z:ON ERROR GOTO 5190 20 DIM name$(5),boota(5),bootb(5),schiff(15),lage(15),a(15),b(15),s(5),sp(5),sh$(5) 30 st(1)=72:st(2)=58:st(3)=46:st(4)=26:st(5)=7:sp(1)=10:sp(2)=12:sp(3)=10:joyce=0:sie=0 40 sp(4)=18:sp(5)=17:sh$(1)=" U-Boote":sh$(2)=" Zerst|rer":sh$(3)=" Kreuzer" 50 sh$(4)=" Schlachtschiffe":sh$(5)=" Flugzeugtr{ger":name$(1)="U-BOOTE " 60 name$(2)="ZERST\RER":name$(3)="KREUZER ":name$(4)="SCHLACHTSCHIFFE" 70 name$(5)="FLUGZEUGTR[GER" 80 FOR n=184 TO 199:co$=co$+CHR$(n):NEXT n 90 GOSUB 4170:GOSUB 4070:GOSUB 5110 100 OUT 248,8 110 PRINT cls$ 120 FOR s=7 TO 49 STEP 42 130 PRINT FNc$(7,s)+CHR$(255)+STRING$(32,254)+CHR$(253) 140 FOR z=8 TO 22:PRINT FNc$(z,s)+CHR$(249)+FNc$(z,s+33)+CHR$(248):NEXT z 150 PRINT FNc$(23,s)+CHR$(252)+STRING$(32,251)+CHR$(250) 160 NEXT s 170 PRINT FNc$(1,36)+CHR$(224)+CHR$(222)+CHR$(220)+CHR$(218)+CHR$(216)+CHR$(214)+CHR$(220)+CHR$(204)+CHR$(216)+CHR$(214)+CHR$(220)+CHR$(203)+CHR$(201)+CHR$(218)+CHR$(216)+CHR$(214)+CHR$(220)+CHR$(218)+CHR$(205) 180 PRINT FNc$(2,36)+CHR$(223)+CHR$(221)+CHR$(219)+CHR$(217)+CHR$(215)+CHR$(213)+CHR$(202)+CHR$(211)+CHR$(215)+CHR$(213)+CHR$(210)+CHR$(209)+CHR$(207)+CHR$(206)+CHR$(215)+CHR$(213)+CHR$(219)+CHR$(217):PRINT FNc$(4,37)+co$ 190 PRINT FNc$(6,20)+"JOYCE 0"+FNc$(6,63)+"SIE 0" 200 DIM ba(15,16),bb(15,16),atreffer(51),btreffer(51),tz(35),ts(35),tb(35) 210 zug=0:cz=8:cs=50:gesamtanzahl=0:lage$="waagerecht":exlage$="senkrecht ":ort=0:ssieg=0 220 jsieg=0:kd=0:cza=8:csa=8:trefferanzahl=0:treffer=0:richtung$="":menge=5:anfang=0 230 FOR n=1 TO 5:boota(n)=menge:bootb(n)=menge:menge=menge-1:NEXT n 240 PRINT FNc$(15,15)+"Anzahl:"+FNc$(17,15)+"L{nge :"+FNc$(19,15)+"Lage : waagerecht" 250 OUT 248,7 260 FOR schiff=5 TO 1 STEP -1 270 PRINT FNc$(11,15)+name$(schiff)+FNc$(17,22);schiff 280 gesamtanzahl=gesamtanzahl+1 290 FOR anzahl=gesamtanzahl TO 1 STEP -1 300 PRINT FNc$(15,22);anzahl 310 GOTO 370 320 NEXT anzahl 330 NEXT schiff 340 PRINT FNc$(11,15)+SPACE$(18) 350 FOR z=15 TO 19 STEP 2:PRINT FNc$(z,15)+SPACE$(18):NEXT z 360 GOTO 970 370 PRINT FNc$(26,13)+" W{hle mit den CURSORTASTEN die Position des Schiffes und mit " 380 PRINT FNc$(28,13)+SPACE$(11)+"FORM seine Lage. Setze das Schiff mit Ð+Ô."+SPACE$(11) 390 PRINT FNc$(cz,cs)+curan$; 400 WHILE -1 410 zufall!=zufall!+1:excz=cz:excs=cs:ein$=INKEY$ 420 IF ein$=CHR$(3) THEN ort=1:GOTO 3900 430 IF ein$=CHR$(31) THEN cz=cz-1:IF cz<8 THEN cz=cz+1 440 IF ein$=CHR$(30) THEN cz=cz+1:IF cz>22 THEN cz=cz-1 450 IF ein$=CHR$(1) THEN cs=cs-2:IF cs<50 THEN cs=cs+2 460 IF ein$=CHR$(6) THEN cs=cs+2:IF cs>80 THEN cs=cs-2 470 IF ein$=CHR$(18) THEN SWAP lage$,exlage$:PRINT curaus$+FNc$(19,23)+lage$+FNc$(cz,cs)+curan$; 480 IF ein$=CHR$(22) THEN 630 490 IF cz<>excz OR cs<>excs THEN PRINT FNc$(cz,cs); 500 WEND 510 PRINT curaus$; 520 PRINT FNc$(26,13)+" L|sche das Schiff mit Ð-Ô oder best{tige mit ENTER. " 530 PRINT FNc$(28,13)+SPACE$(64) 540 PRINT FNc$(cz,cs)+curan$; 550 WHILE -1:ein$=INKEY$ 560 IF ein$=CHR$(3) THEN ort=2:GOTO 3900 570 IF ein$=CHR$(28) THEN GOSUB 840:GOTO 370 580 IF ein$=CHR$(13) THEN 600 590 WEND 600 IF lage$="senkrecht " THEN 620 610 FOR n=0 TO schiff-1:bb(a,b+n)=schiff+(anzahl*10):NEXT n:PRINT curaus$:GOTO 320 620 FOR n=0 TO schiff-1:bb(a+n,b)=schiff+(anzahl*10):NEXT n:PRINT curaus$:GOTO 320 630 a=cz-7:b=cs/2-24 640 IF schiff=1 AND bb(a,b)=0 THEN PRINT FNs1$(cz,cs);:GOTO 510 650 IF lage$="senkrecht " THEN 750 660 IF b>15 THEN 370 670 IF schiff=2 AND bb(a,b)=0 AND bb(a,b+1)=0 THEN PRINT FNs2w$(cz,cs);:GOTO 510 680 IF b>14 THEN 370 690 IF schiff=3 AND bb(a,b)=0 AND bb(a,b+1)=0 AND bb(a,b+2)=0 THEN PRINT FNs3w$(cz,cs);:GOTO 510 700 IF b>13 THEN 370 710 IF schiff=4 AND bb(a,b)=0 AND bb(a,b+1)=0 AND bb(a,b+2)=0 AND bb(a,b+3)=0 THEN PRINT FNs4w$(cz,cs);:GOTO 510 720 IF b>12 THEN 370 730 IF schiff=5 AND bb(a,b)=0 AND bb(a,b+1)=0 AND bb(a,b+2)=0 AND bb(a,b+3)=0 AND bb(a,b+4)=0 THEN PRINT FNs5w$(cz,cs);:GOTO 510 740 GOTO 370 750 IF a>14 THEN 370 760 IF schiff=2 AND bb(a,b)=0 AND bb(a+1,b)=0 THEN PRINT FNs2s$(cz,cs);:GOTO 510 770 IF a>13 THEN 370 780 IF schiff=3 AND bb(a,b)=0 AND bb(a+1,b)=0 AND bb(a+2,b)=0 THEN PRINT FNs3s$(cz,cs);:GOTO 510 790 IF a>12 THEN 370 800 IF schiff=4 AND bb(a,b)=0 AND bb(a+1,b)=0 AND bb(a+2,b)=0 AND bb(a+3,b)=0 THEN PRINT FNs4s$(cz,cs);:GOTO 510 810 IF a>11 THEN 370 820 IF schiff=5 AND bb(a,b)=0 AND bb(a+1,b)=0 AND bb(a+2,b)=0 AND bb(a+3,b)=0 AND bb(a+4,b)=0 THEN PRINT FNs5s$(cz,cs);:GOTO 510 830 GOTO 370 840 a=cz-7:b=cs/2-24 850 IF schiff=1 THEN PRINT " "; 860 IF lage$="senkrecht " THEN 920 870 IF schiff=2 THEN PRINT " "; 880 IF schiff=3 THEN PRINT " "; 890 IF schiff=4 THEN PRINT " "; 900 IF schiff=5 THEN PRINT " "; 910 RETURN 920 IF schiff=2 THEN PRINT " "+FNc$(cz+1,cs)+" "; 930 IF schiff=3 THEN PRINT " "+FNc$(cz+1,cs)+" "+FNc$(cz+2,cs)+" "; 940 IF schiff=4 THEN PRINT " "+FNc$(cz+1,cs)+" "+FNc$(cz+2,cs)+" "+FNc$(cz+3,cs)+" "; 950 IF schiff=5 THEN PRINT " "+FNc$(cz+1,cs)+" "+FNc$(cz+2,cs)+" "+FNc$(cz+3,cs)+" "+FNc$(cz+4,cs)+" "; 960 RETURN 970 RANDOMIZE zufall! 980 gesamtanzahl=0:schiffanzahl=0 990 PRINT FNc$(26,13)+SPACE$(17)+"JOYCE setzt nun seine Schiffe."+SPACE$(17) 1000 FOR schiff=5 TO 1 STEP -1 1010 gesamtanzahl=gesamtanzahl+1 1020 FOR anzahl=gesamtanzahl TO 1 STEP -1 1030 schiffanzahl=schiffanzahl+1:GOSUB 1070 1040 NEXT anzahl,schiff 1050 PRINT FNc$(26,13)+SPACE$(25)+"F E R T I G !"+SPACE$(25) 1060 FOR n=1 TO 2000:NEXT n:GOTO 1350 1070 a=FNr(1,15):b=FNr(1,16):lage=FNr(1,2) 1080 IF schiff=1 AND ba(a,b)=0 THEN 1280 1090 IF lage=2 THEN 1190 1100 IF b>15 THEN 1070 1110 IF schiff=2 AND ba(a,b)=0 AND ba(a,b+1)=0 THEN 1280 1120 IF b>14 THEN 1070 1130 IF schiff=3 AND ba(a,b)=0 AND ba(a,b+1)=0 AND ba(a,b+2)=0 THEN 1280 1140 IF b>13 THEN 1070 1150 IF schiff=4 AND ba(a,b)=0 AND ba(a,b+1)=0 AND ba(a,b+2)=0 AND ba(a,b+3)=0 THEN 1280 1160 IF b>12 THEN 1070 1170 IF schiff=5 AND ba(a,b)=0 AND ba(a,b+1)=0 AND ba(a,b+2)=0 AND ba(a,b+3)=0 AND ba(a,b+4)=0 THEN 1280 1180 GOTO 1070 1190 IF a>14 THEN 1070 1200 IF schiff=2 AND ba(a,b)=0 AND ba(a+1,b)=0 THEN 1280 1210 IF a>13 THEN 1070 1220 IF schiff=3 AND ba(a,b)=0 AND ba(a+1,b)=0 AND ba(a+2,b)=0 THEN 1280 1230 IF a>12 THEN 1070 1240 IF schiff=4 AND ba(a,b)=0 AND ba(a+1,b)=0 AND ba(a+2,b)=0 AND ba(a+3,b)=0 THEN 1280 1250 IF a>11 THEN 1070 1260 IF schiff=5 AND ba(a,b)=0 AND ba(a+1,b)=0 AND ba(a+2,b)=0 AND ba(a+3,b)=0 AND ba(a+4,b)=0 THEN 1280 1270 GOTO 1070 1280 IF lage=2 THEN 1320 1290 FOR n=0 TO schiff-1:ba(a,b+n)=schiff+(anzahl*10):NEXT n 1300 schiff(schiffanzahl)=schiff+(anzahl*10):lage(schiffanzahl)=1 1310 a(schiffanzahl)=a:b(schiffanzahl)=b:RETURN 1320 FOR n=0 TO schiff-1:ba(a+n,b)=schiff+(anzahl*10):NEXT n 1330 schiff(schiffanzahl)=schiff+(anzahl*10):lage(schiffanzahl)=2 1340 a(schiffanzahl)=a:b(schiffanzahl)=b:RETURN 1350 ON FNr(1,2) GOTO 1360,1700 1360 PRINT FNc$(26,13)+SPACE$(19)+"S I E B E G I N N E N !"+SPACE$(19) 1370 FOR n=1 TO 2000:NEXT n 1380 PRINT FNc$(29,8)+"1 Flugzeugtr{ger 2 Schlachtschiffe 3 Kreuzer 4 Zerst|rer 5 U-Boote";:anfang=0 1390 PRINT FNc$(26,13)+" W{hle mit den CURSORTASTEN das Ziel - SPACE ist Feuer. " 1400 PRINT FNc$(cza,csa)+curan$; 1410 WHILE INKEY$<>"":WEND:WHILE -1 1420 excza=cza:excsa=csa:ein$=INKEY$ 1430 IF ein$=CHR$(3) THEN cz=cza:cs=csa:ort=3:GOTO 3900 1440 IF ein$=CHR$(31) THEN cza=cza-1:IF cza<8 THEN cza=cza+1 1450 IF ein$=CHR$(30) THEN cza=cza+1:IF cza>22 THEN cza=cza-1 1460 IF ein$=CHR$(1) THEN csa=csa-2:IF csa<8 THEN csa=csa+2 1470 IF ein$=CHR$(6) THEN csa=csa+2:IF csa>38 THEN csa=csa-2 1480 IF ein$=CHR$(32) THEN PRINT curaus$:GOSUB 3860:FOR n=1 TO 1500:NEXT n:GOTO 1510 1490 IF cza<>excza OR csa<>excsa THEN PRINT FNc$(cza,csa); 1500 WEND 1510 aa=cza-7:ba=csa/2-3 1520 IF ba(aa,ba)<>0 THEN 1550 1530 GOSUB 2000 1540 z=cza:s=csa:GOSUB 2360:PRINT FNc$(cza,csa)+STRING$(2,235):GOTO 1720 1550 IF ba(aa,ba)>0 THEN 1580 1560 GOSUB 2000 1570 z=cza:s=csa:GOSUB 2360:PRINT FNc$(cza,csa)+CHR$(237)+CHR$(236):GOTO 1720 1580 anzahl=0 1590 FOR n=5 TO 1 STEP -1 1600 anzahl=anzahl+10 1610 FOR nn=anzahl TO 10 STEP -10 1620 IF NOT ba(aa,ba)=n+nn THEN 1690 1630 atreffer(n+nn)=atreffer(n+nn)+1:ba(aa,ba)=-1 1640 IF NOT atreffer(n+nn)=n THEN 1670 1650 PRINT FNc$(26,13)+SPACE$(23)+"V E R S E N K T !"+SPACE$(23) 1660 GOSUB 3880:z=cza:s=csa:boot=n+nn:GOSUB 2320:GOSUB 2440:IF ssieg=1 THEN 2500 ELSE 1390 1670 PRINT FNc$(26,13)+SPACE$(24)+"T R E F F E R !"+SPACE$(24) 1680 GOSUB 3880:z=cza:s=csa:GOSUB 2320:GOTO 1390 1690 NEXT nn,n 1700 PRINT FNc$(26,13)+SPACE$(18)+"J O Y C E B E G I N N T !"+SPACE$(18) 1710 FOR n=1 TO 2000:NEXT n:anfang=1 1720 PRINT FNc$(26,13)+SPACE$(24)+"JOYCE ist am Zug."+SPACE$(23) 1730 FOR n=1 TO 1500:NEXT n 1740 GOSUB 3860:FOR n=1 TO 1500:NEXT n 1750 IF trefferanzahl>0 THEN GOSUB 3530:GOTO 1790 1760 IF kd=1 THEN GOSUB 2220:GOTO 1790 1770 IF zug<29 THEN GOSUB 1960:GOTO 1790 ELSE ab=FNr(1,15):bb=FNr(1,16) 1780 IF bb(ab,bb)=-1 THEN 1770 ELSE GOSUB 2760:IF weiter=0 THEN 1770 1790 czb=ab+7:csb=(bb+24)*2 1800 IF bb(ab,bb)>0 THEN 1840 1810 IF kd=0 THEN GOSUB 2120 1820 bb(ab,bb)=-1:z=czb:s=csb:GOSUB 2360 1830 IF anfang=1 THEN 1380 ELSE 1390 1840 anzahl=0 1850 FOR n=5 TO 1 STEP -1 1860 anzahl=anzahl+10 1870 FOR nn=anzahl TO 10 STEP -10 1880 IF NOT bb(ab,bb)=n+nn THEN 1950 1890 btreffer(n+nn)=btreffer(n+nn)+1:bb(ab,bb)=-1 1900 IF NOT btreffer(n+nn)=n THEN 1930 1910 GOSUB 3880:versenkt=1:z=czb:s=csb:boot=n+nn 1920 GOSUB 2320:GOSUB 3000:IF jsieg=1 THEN 3100 ELSE kd=0:GOTO 1740 1930 GOSUB 3880:versenkt=0:z=czb:s=csb:boot=n+nn 1940 GOSUB 2320:GOSUB 3000:GOTO 1740 1950 NEXT nn,n 1960 ab=2+(FNr(0,4)*3):bb=1+(FNr(0,5)*3):IF bb(ab,bb)=-1 THEN 1960 1970 zug=0:FOR n=2 TO 14 STEP 3:FOR nn=1 TO 16 STEP 3 1980 IF bb(n,nn)=-1 THEN zug=zug+1 1990 NEXT nn,n:RETURN 2000 IF ba(aa-1,ba)>0 THEN 2100 2010 IF ba(aa-1,ba+1)>0 THEN 2100 2020 IF ba(aa,ba+1)>0 THEN 2100 2030 IF ba(aa+1,ba+1)>0 THEN 2100 2040 IF ba(aa+1,ba)>0 THEN 2100 2050 IF ba(aa+1,ba-1)>0 THEN 2100 2060 IF ba(aa,ba-1)>0 THEN 2100 2070 IF ba(aa-1,ba-1)>0 THEN 2100 2080 PRINT FNc$(26,13)+SPACE$(24)+"D A N E B E N !"+SPACE$(24) 2090 RETURN 2100 PRINT FNc$(26,13)+SPACE$(17)+"F A S T G E T R O F F E N !"+SPACE$(17) 2110 RETURN 2120 IF bb(ab-1,bb)>0 THEN 2210 2130 IF bb(ab-1,bb+1)>0 THEN 2210 2140 IF bb(ab,bb+1)>0 THEN 2210 2150 IF bb(ab+1,bb+1)>0 THEN 2210 2160 IF bb(ab+1,bb)>0 THEN 2210 2170 IF bb(ab+1,bb-1)>0 THEN 2210 2180 IF bb(ab,bb-1)>0 THEN 2210 2190 IF bb(ab-1,bb-1)>0 THEN 2210 2200 RETURN 2210 kd=1:ka=ab:kb=bb:RETURN 2220 ON FNr(1,3) GOTO 2230,2240,2250 2230 IF ka=1 THEN 2220 ELSE ab=ka-1:GOTO 2260 2240 ab=ka:GOTO 2260 2250 IF ka=15 THEN 2220 ELSE ab=ka+1:GOTO 2260 2260 ON FNr(1,3) GOTO 2270,2280,2290 2270 IF kb=1 THEN 2260 ELSE bb=kb-1:GOTO 2300 2280 bb=kb:GOTO 2300 2290 IF kb=16 THEN 2260 ELSE bb=kb+1:GOTO 2300 2300 IF bb(ab,bb)=-1 THEN 2220 2310 RETURN 2320 FOR n=1 TO 10 2330 PRINT FNc$(z,s)+invan$+CHR$(237)+CHR$(236)+invaus$:FOR nn=1 TO 100:NEXT nn 2340 PRINT FNc$(z,s)+CHR$(237)+CHR$(236):FOR nn=1 TO 100:NEXT nn,n 2350 RETURN 2360 tempo=250 2370 FOR n=1 TO 3 2380 PRINT FNc$(z,s)+CHR$(234)+CHR$(233):FOR nn=1 TO tempo:NEXT nn 2390 PRINT FNc$(z,s)+CHR$(232)+CHR$(231):FOR nn=1 TO tempo:NEXT nn 2400 PRINT FNc$(z,s)+CHR$(230)+CHR$(229):FOR nn=1 TO tempo:NEXT nn 2410 PRINT FNc$(z,s)+CHR$(226)+CHR$(225):FOR nn=1 TO tempo:NEXT nn,n 2420 PRINT FNc$(z,s)+" " 2430 RETURN 2440 boot$=STR$(boot):boot$=RIGHT$(boot$,1):boot=VAL(boot$) 2450 FOR n=1 TO 6 2460 PRINT FNc$(29,st(boot))+SPACE$(sp(boot));:FOR nn=1 TO 250:NEXT nn 2470 PRINT FNc$(29,st(boot))+STR$(boota(boot))+sh$(boot);:FOR nn=1 TO 250:NEXT nn,n 2480 boota(boot)=boota(boot)-1:PRINT FNc$(29,st(boot))+STR$(boota(boot)); 2490 IF boota(5)=0 AND boota(4)=0 AND boota(3)=0 AND boota(2)=0 AND boota(1)=0 THEN ssieg=1:RETURN ELSE RETURN 2500 tempo=100:sie=sie+1 2510 IF sie<10 THEN PRINT FNc$(6,67)+STR$(sie) ELSE PRINT FNc$(6,66)+STR$(sie) 2520 WHILE INKEY$<>"":WEND:WHILE -1 2530 PRINT FNc$(27,13)+CHR$(147)+STRING$(62,154)+CHR$(153) 2540 PRINT FNc$(26,13)+CHR$(149)+" * * * * * * * * * * B R A V O !!! * * * * * * * * * * "+CHR$(149) 2550 PRINT FNc$(25,13)+CHR$(150)+STRING$(62,154)+CHR$(156) 2560 FOR n=1 TO tempo:ein$=INKEY$:IF ein$<>"" THEN 2740 2570 NEXT n 2580 PRINT FNc$(25,13)+SPACE$(64) 2590 PRINT FNc$(27,13)+SPACE$(64) 2600 PRINT FNc$(26,13)+STRING$(64,154) 2610 FOR n=1 TO tempo:ein$=INKEY$:IF ein$<>"" THEN 2740 2620 NEXT n 2630 PRINT FNc$(27,13)+CHR$(147)+STRING$(62,154)+CHR$(153) 2640 PRINT FNc$(26,13)+CHR$(149)+" * * * S I E H A B E N G E W O N N E N !!! * * * "+CHR$(149) 2650 PRINT FNc$(25,13)+CHR$(150)+STRING$(62,154)+CHR$(156) 2660 FOR n=1 TO tempo:ein$=INKEY$:IF ein$<>"" THEN 2740 2670 NEXT n 2680 PRINT FNc$(25,13)+SPACE$(64) 2690 PRINT FNc$(27,13)+SPACE$(64) 2700 PRINT FNc$(26,13)+STRING$(64,154) 2710 FOR n=1 TO tempo:ein$=INKEY$:IF ein$<>"" THEN 2740 2720 NEXT n 2730 WEND 2740 FOR n=1 TO 3:PRINT FNc$(24+n,13)+SPACE$(64):NEXT n 2750 GOTO 3390 2760 FOR n=5 TO 1 STEP -1:IF bootb(n)>0 THEN 2780 2770 NEXT n 2780 ON n GOTO 2990,2790,2840,2890,2940 2790 IF bb(ab-1,bb)>-1 THEN 2990 2800 IF bb(ab+1,bb)>-1 THEN 2990 2810 IF bb(ab,bb-1)>-1 THEN 2990 2820 IF bb(ab,bb+1)>-1 THEN 2990 2830 weiter=0:RETURN 2840 IF bb(ab-1,bb)>-1 AND bb(ab-2,bb)>-1 THEN 2990 2850 IF bb(ab+1,bb)>-1 AND bb(ab+2,bb)>-1 THEN 2990 2860 IF bb(ab,bb-1)>-1 AND bb(ab,bb-2)>-1 THEN 2990 2870 IF bb(ab,bb+1)>-1 AND bb(ab,bb+2)>-1 THEN 2990 2880 weiter=0:RETURN 2890 IF bb(ab-1,bb)>-1 AND bb(ab-2,bb)>-1 AND bb(ab-3,bb)>-1 THEN 2990 2900 IF bb(ab+1,bb)>-1 AND bb(ab+2,bb)>-1 AND bb(ab+3,bb)>-1 THEN 2990 2910 IF bb(ab,bb-1)>-1 AND bb(ab,bb-2)>-1 AND bb(ab,bb-3)>-1 THEN 2990 2920 IF bb(ab,bb+1)>-1 AND bb(ab,bb+2)>-1 AND bb(ab,bb+3)>-1 THEN 2990 2930 weiter=0:RETURN 2940 IF bb(ab-1,bb)>-1 AND bb(ab-2,bb)>-1 AND bb(ab-3,bb)>-1 AND bb(ab-4,bb)>-1 THEN 2990 2950 IF bb(ab+1,bb)>-1 AND bb(ab+2,bb)>-1 AND bb(ab+3,bb)>-1 AND bb(ab+4,bb)>-1 THEN 2990 2960 IF bb(ab,bb-1)>-1 AND bb(ab,bb-2)>-1 AND bb(ab,bb-3)>-1 AND bb(ab,bb-4)>-1 THEN 2990 2970 IF bb(ab,bb+1)>-1 AND bb(ab,bb+2)>-1 AND bb(ab,bb+3)>-1 AND bb(ab,bb+4)>-1 THEN 2990 2980 weiter=0:RETURN 2990 weiter=1:RETURN 3000 trefferanzahl=trefferanzahl+1:treffer=treffer+1:lage$=richtung$ 3010 tz(treffer)=ab:ts(treffer)=bb:tb(treffer)=boot 3020 IF versenkt=0 THEN RETURN 3030 FOR n=1 TO 35 3040 IF tb(n)=boot THEN tz(n)=0:ts(n)=0 3050 NEXT n 3060 boot$=STR$(boot):boot$=RIGHT$(boot$,1):boot=VAL(boot$) 3070 bootb(boot)=bootb(boot)-1:trefferanzahl=trefferanzahl-boot 3080 IF trefferanzahl=0 THEN richtung$="" 3090 IF bootb(5)=0 AND bootb(4)=0 AND bootb(3)=0 AND bootb(2)=0 AND bootb(1)=0 THEN jsieg=1:RETURN ELSE RETURN 3100 tempo1=270:tempo2=10:joyce=joyce+1 3110 IF joyce<10 THEN PRINT FNc$(6,26)+STR$(joyce) ELSE PRINT FNc$(6,25)+STR$(joyce) 3120 WHILE INKEY$<>"":WEND:WHILE -1 3130 PRINT FNc$(26,13)+SPACE$(64) 3140 FOR nn=1 TO tempo1:ein$=INKEY$:IF ein$<>"" THEN 3380 3150 NEXT nn 3160 PRINT FNc$(26,13)+SPACE$(13)+"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"+SPACE$(13) 3170 FOR nn=1 TO tempo2:ein$=INKEY$:IF ein$<>"" THEN 3380 3180 NEXT nn 3190 PRINT FNc$(26,13)+SPACE$(13)+"S I E H A B E N V E R L O R E N !"+SPACE$(13) 3200 FOR nn=1 TO tempo1:ein$=INKEY$:IF ein$<>"" THEN 3380 3210 NEXT nn 3220 PRINT FNc$(26,13)+SPACE$(13)+"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"+SPACE$(13) 3230 FOR nn=1 TO tempo2:ein$=INKEY$:IF ein$<>"" THEN 3380 3240 NEXT nn 3250 PRINT FNc$(26,13)+SPACE$(64) 3260 FOR nn=1 TO tempo1:ein$=INKEY$:IF ein$<>"" THEN 3380 3270 NEXT nn 3280 PRINT FNc$(26,13)+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ " 3290 FOR nn=1 TO tempo2:ein$=INKEY$:IF ein$<>"" THEN 3380 3300 NEXT nn 3310 PRINT FNc$(26,13)+" M E H R G L ] C K B E I M N [ C H S T E N M A L ! " 3320 FOR nn=1 TO tempo1:ein$=INKEY$:IF ein$<>"" THEN 3380 3330 NEXT nn 3340 PRINT FNc$(26,13)+" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ " 3350 FOR nn=1 TO tempo2:ein$=INKEY$:IF ein$<>"" THEN 3380 3360 NEXT nn 3370 WEND 3380 PRINT FNc$(26,13)+SPACE$(64) 3390 FOR n=8 TO 22:PRINT FNc$(n,50)+SPACE$(32):NEXT n 3400 FOR n=1 TO 15:a(n)=a(n)+7:b(n)=(b(n)+24)*2:NEXT n 3410 IF lage(1)=1 THEN PRINT FNs5w$(a(1),b(1)) ELSE PRINT FNs5s$(a(1),b(1)) 3420 FOR n=2 TO 3 3430 IF lage(n)=1 THEN PRINT FNs4w$(a(n),b(n)) ELSE PRINT FNs4s$(a(n),b(n)) 3440 NEXT n 3450 FOR n=4 TO 6 3460 IF lage(n)=1 THEN PRINT FNs3w$(a(n),b(n)) ELSE PRINT FNs3s$(a(n),b(n)) 3470 NEXT n 3480 FOR n=7 TO 10 3490 IF lage(n)=1 THEN PRINT FNs2w$(a(n),b(n)) ELSE PRINT FNs2s$(a(n),b(n)) 3500 NEXT n 3510 FOR n=11 TO 15:PRINT FNs1$(a(n),b(n)):NEXT n 3520 GOTO 4020 3530 IF lage$="s" THEN 3720 3540 IF lage$="w" THEN 3790 3550 FOR n=1 TO 35 3560 IF tz(n)>0 AND ts(n)>0 THEN ab=tz(n):bb=ts(n) ELSE 3610 3570 IF bb(ab-1,bb)>-1 THEN 3620 3580 IF bb(ab+1,bb)>-1 THEN 3620 3590 IF bb(ab,bb-1)>-1 THEN 3620 3600 IF bb(ab,bb+1)>-1 THEN 3620 3610 NEXT n 3620 ON FNr(1,4) GOTO 3630,3640,3650,3660 3630 IF bb(ab-1,bb)>-1 THEN 3680 3640 IF bb(ab+1,bb)>-1 THEN 3690 3650 IF bb(ab,bb-1)>-1 THEN 3700 3660 IF bb(ab,bb+1)>-1 THEN 3710 3670 GOTO 3620 3680 ab=ab-1:richtung$="s":RETURN 3690 ab=ab+1:richtung$="s":RETURN 3700 bb=bb-1:richtung$="w":RETURN 3710 bb=bb+1:richtung$="w":RETURN 3720 FOR n=1 TO 35 3730 IF tz(n)>0 AND ts(n)>0 THEN ab=tz(n):bb=ts(n) ELSE 3760 3740 IF bb(ab-1,bb)>-1 THEN 3770 3750 IF bb(ab+1,bb)>-1 THEN 3780 3760 NEXT n:GOTO 3790 3770 ab=ab-1:richtung$="s":RETURN 3780 ab=ab+1:richtung$="s":RETURN 3790 FOR n=1 TO 35 3800 IF tz(n)>0 AND ts(n)>0 THEN ab=tz(n):bb=ts(n) ELSE 3830 3810 IF bb(ab,bb-1)>-1 THEN 3840 3820 IF bb(ab,bb+1)>-1 THEN 3850 3830 NEXT n:GOTO 3720 3840 bb=bb-1:richtung$="w":RETURN 3850 bb=bb+1:richtung$="w":RETURN 3860 IF sound=0 THEN RETURN 3870 FOR n=1 TO 10:OUT 248,11:OUT 248,12:NEXT n:RETURN 3880 IF sound=0 THEN RETURN 3890 PRINT beep$:RETURN 3900 PRINT curaus$ 3910 PRINT FNc$(26,13)+"A -> Spiel beenden B -> Weiterspielen C -> Neues Spiel" 3920 PRINT FNc$(28,13)+SPACE$(64) 3930 WHILE INKEY$<>"":WEND:WHILE -1:ein$=INKEY$ 3940 IF LOWER$(ein$)="a" THEN PRINT cls$+curan$+szan$+home$:END 3950 IF LOWER$(ein$)="b" THEN 3980 3960 IF LOWER$(ein$)="c" THEN 3990 3970 WEND 3980 ON ort GOTO 370,510,1390 3990 FOR n=8 TO 22:PRINT FNc$(n,8)+SPACE$(32)+FNc$(n,50)+SPACE$(32):NEXT n 4000 FOR n=26 TO 29:PRINT FNc$(n,8)+SPACE$(74);:NEXT n 4010 ERASE ba,bb,atreffer,btreffer,tz,ts,tb:GOTO 200 4020 PRINT FNc$(26,13)+" A -> Spiel beenden B -> Neues Spiel " 4030 WHILE INKEY$<>"":WEND:WHILE -1:ein$=INKEY$ 4040 IF LOWER$(ein$)="a" THEN PRINT cls$:RUN "M" 4050 IF LOWER$(ein$)="b" THEN 3990 4060 WEND 4070 DEF FNs1$(z,s)=FNc$(z,s)+CHR$(247)+CHR$(246) 4080 DEF FNs2w$(z,s)=FNc$(z,s)+CHR$(247)+STRING$(2,244)+CHR$(246) 4090 DEF FNs3w$(z,s)=FNc$(z,s)+CHR$(247)+STRING$(4,244)+CHR$(246) 4100 DEF FNs4w$(z,s)=FNc$(z,s)+CHR$(247)+STRING$(6,244)+CHR$(246) 4110 DEF FNs5w$(z,s)=FNc$(z,s)+CHR$(247)+STRING$(8,244)+CHR$(246) 4120 DEF FNs2s$(z,s)=FNc$(z,s)+CHR$(243)+CHR$(242)+FNc$(z+1,s)+CHR$(239)+CHR$(238) 4130 DEF FNs3s$(z,s)=FNc$(z,s)+CHR$(243)+CHR$(242)+FNc$(z+1,s)+CHR$(241)+CHR$(240)+FNc$(z+2,s)+CHR$(239)+CHR$(238) 4140 DEF FNs4s$(z,s)=FNc$(z,s)+CHR$(243)+CHR$(242)+FNc$(z+1,s)+CHR$(241)+CHR$(240)+FNc$(z+2,s)+CHR$(241)+CHR$(240)+FNc$(z+3,s)+CHR$(239)+CHR$(238) 4150 DEF FNs5s$(z,s)=FNc$(z,s)+CHR$(243)+CHR$(242)+FNc$(z+1,s)+CHR$(241)+CHR$(240)+FNc$(z+2,s)+CHR$(241)+CHR$(240)+FNc$(z+3,s)+CHR$(241)+CHR$(240)+FNc$(z+4,s)+CHR$(239)+CHR$(238) 4160 RETURN 4170 esc$=CHR$(27) 4180 cls$=esc$+"E" 4190 invan$=esc$+"p" 4200 invaus$=esc$+"q" 4210 szan$=esc$+"1" 4220 szaus$=esc$+"0" 4230 home$=esc$+"H" 4240 curan$=esc$+"e" 4250 curaus$=esc$+"f" 4260 scran$=esc$+"c"+CHR$(0)+esc$+"b"+CHR$(63) 4270 scraus$=esc$+"c"+CHR$(63)+esc$+"b"+CHR$(0) 4280 beep$=scran$+CHR$(7)+scraus$ 4290 DEF FNc$(z,s)=esc$+"Y"+CHR$(32+z)+CHR$(32+s) 4300 DEF FNr(n1,n2)=INT(RND*(n2-n1+1))+n1 4310 MEMORY &HF4FF:code=&HF500:tabb=&HF515 4320 FOR n=0 TO 20:READ a$:a$="&H"+a$:a=VAL(a$):POKE code+n,a:NEXT n 4330 DATA 01,09,F5,CD,5A,FC,E9 4340 DATA 00,C9,21,15,F5,01,08 4350 DATA 00,11,00,00,ED,B0,C9 4360 READ zeichen 4370 IF zeichen<0 OR zeichen>255 THEN RETURN 4380 FOR n=0 TO 7:READ a$:a$="&H"+a$:a=VAL(a$):POKE tabb+n,a:NEXT n 4390 char!=zeichen*8+&HB800+2^16:high=INT(char!/256):low=char!-high*256 4400 POKE &HF510,low:POKE &HF511,high:CALL code 4410 GOTO 4360 4420 DATA 184,0A,20,8A,88,8A,20,0A,00 4430 DATA 185,80,20,88,08,88,20,80,00 4440 DATA 186,00,09,29,09,08,09,00,00 4450 DATA 187,00,52,12,52,10,52,00,00 4460 DATA 188,00,A5,20,A5,24,A5,00,00 4470 DATA 189,00,41,41,41,01,41,00,00 4480 DATA 190,00,52,12,52,22,12,00,00 4490 DATA 191,00,A4,24,A4,24,25,00,00 4500 DATA 192,00,0A,08,0A,08,48,00,00 4510 DATA 193,00,82,02,02,02,02,00,00 4520 DATA 194,00,24,24,24,A4,24,00,00 4530 DATA 195,00,81,81,81,81,A9,00,00 4540 DATA 196,00,52,02,52,12,52,00,00 4550 DATA 197,00,A4,24,A4,24,25,00,00 4560 DATA 198,00,09,09,09,08,49,00,00 4570 DATA 199,00,50,00,50,10,50,00,00 4580 DATA 203,FF,FF,FF,FF,AA,00,00,80 4590 DATA 204,FF,FF,FF,FF,AA,00,00,FE 4600 DATA 205,FE,FD,FA,F4,A8,00,00,00 4610 DATA 206,FA,BD,95,7C,3D,FD,FA,54 4620 DATA 207,0F,1E,1E,3D,3D,1F,0F,05 4630 DATA 201,FF,FF,FF,FF,AA,00,00,03 4640 DATA 209,A0,40,40,80,80,FE,FD,55 4650 DATA 210,07,0F,0F,1E,1E,3F,3F,15 4660 DATA 211,FD,55,F0,E8,A8,00,00,00 4670 DATA 202,07,0F,0F,1F,1E,3D,3D,15 4680 DATA 213,FD,FD,BD,3D,FD,FD,BD,15 4690 DATA 214,FF,FF,FF,FF,AA,00,00,FC 4700 DATA 215,01,03,07,0F,1F,3F,7A,2A 4710 DATA 216,FF,FF,FF,FF,AA,00,00,00 4720 DATA 217,FD,BD,FA,F4,E8,F4,7A,2A 4730 DATA 218,FF,FF,FF,FF,AA,00,00,F8 4740 DATA 219,0F,1E,1F,3F,3D,7A,7A,2A 4750 DATA 220,FF,FF,FF,FF,AA,00,00,07 4760 DATA 221,FA,F4,F4,E8,E8,D0,D0,50 4770 DATA 222,FF,FF,FF,FF,FE,FD,FD,FA 4780 DATA 223,07,0F,0F,1F,1F,3F,3F,15 4790 DATA 224,1F,3F,7F,FF,55,03,03,07 4800 DATA 225,40,00,04,00,02,00,08,40 4810 DATA 226,04,00,40,00,80,00,20,04 4820 DATA 227,40,00,04,80,82,00,08,40 4830 DATA 228,04,00,40,02,82,00,20,04 4840 DATA 229,00,40,10,08,08,10,40,00 4850 DATA 230,00,05,10,20,20,10,05,00 4860 DATA 231,00,00,80,20,20,80,00,00 4870 DATA 232,00,00,02,08,08,02,00,00 4880 DATA 233,00,00,00,80,80,00,00,00 4890 DATA 234,00,00,00,02,02,00,00,00 4900 DATA 235,22,44,22,44,22,44,22,44 4910 DATA 236,00,E6,F8,98,F0,6C,C6,00 4920 DATA 237,00,67,1F,19,0F,36,63,00 4930 DATA 238,F4,F4,F4,F4,F4,F4,54,00 4940 DATA 239,3F,3F,3F,3F,3F,3F,15,00 4950 DATA 240,F4,F4,F4,F4,F4,F4,F4,F4 4960 DATA 241,3F,3F,3F,3F,3F,3F,3F,3F 4970 DATA 242,00,F0,F4,F4,F4,F4,F4,F4 4980 DATA 243,00,3F,3F,3F,3F,3F,3F,3F 4990 DATA 244,00,FF,FF,FF,FF,FF,55,00 5000 DATA 246,00,F0,F4,F4,F4,F4,54,00 5010 DATA 247,00,3F,3F,3F,3F,3F,15,00 5020 DATA 248,0A,0A,0A,0A,0A,0A,0A,0A 5030 DATA 249,A0,A0,A0,A0,A0,A0,A0,A0 5040 DATA 250,0A,0A,AA,AA,00,00,00,00 5050 DATA 251,00,00,AA,AA,00,00,00,00 5060 DATA 252,A0,A0,AA,AA,00,00,00,00 5070 DATA 253,00,00,00,00,AA,AA,0A,0A 5080 DATA 254,00,00,00,00,AA,AA,00,00 5090 DATA 255,00,00,00,00,AA,AA,A0,A0 5100 DATA -1 5110 OUT 248,8 5120 PRINT cls$+szaus$+curaus$+home$ 5130 PRINT FNc$(15,29)+"A -> mit Ton B -> ohne Ton" 5140 OUT 248,7 5150 WHILE INKEY$<>"":WEND:WHILE -1:ein$=INKEY$ 5160 IF LOWER$(ein$)="a" THEN sound=1:RETURN 5170 IF LOWER$(ein$)="b" THEN sound=0:RETURN 5180 WEND 5190 IF ERR=9 THEN RESUME NEXT 5200 IF ERR=53 THEN SYSTEM ELSE RESUME ===== Controls ===== ↑ = UP ↓ = DOWN → = RIGHT ← = LEFT SPACE = SHOOT EXIT = LEAVE GAME ===== Loading the program ===== 1.- Insert the CP/M disc on side 2 2.- Write BASIC and wait for it to load 3.- Remove the CP/M disk and insert the disk containing the Trafalgar game 4.- Type run "Traf" and press the "ENTER" key ===== Download ===== * {{:otros:Trafalgar (Basic).zip|Trafalgar }}(game in dsk format, compressed with zip)