User Tools

Site Tools


en:trafalgar

TRAFALGAR

Info

Author Ralph Wilgalis
Compatibility Amstrad PCW 8256 / 8512 / 9512
Year 1992
Gender Table
Controls Keyboard
Language German
Status Preserved

Screenshots

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

  • Trafalgar (game in dsk format, compressed with zip)
en/trafalgar.txt · Last modified: 2022/06/30 15:10 by jevicac