20 REM +++++++++++++++++++++++++++++++++ 30 REM ! Program .... SPINDEL.BAS Utg}va 1.5 F|r ABC80X 40 REM ! av (c) Jan H|rnstr|m. 50 REM ! [ndrat till ABC806 av H-G Wallentinus <4046> 1985-12-28 51 REM ! [ndrat till ABC802 av Kristoffer Eriksson <5357> 1986-06-23 52 REM ! RESUME p} INPUT-fel <5357> 1986-07-08 53 REM ! L{ttare inladdning i 800,802: EL -> Elo$ <5357> 1986-08-15 70 REM ! Ins{nt av 5357 80 REM +++++++++++++++++++++++++++++++++ 90 ! Ett bra game & watch-inspirerat spel i l}g-grafik 100 ! De som har f{rgsk{rm f}r programmet i f{rg. 110 ! J{mf|rt med ver. 1.0 (f|r ABC80) finns hastighetsval och "rekordtabell" 115 ! OBS: N{r tiden tar slut f}r man en "KROCK" 120 ! Fungerar p} ABC806, ABC802 och utan grafik p} 800M. 130 ! F|rhoppningsvis p} ABC800C. 140 ! Testad p} ABC806 och ABC802 160 ! 170 ON ERROR GOTO 2920 190 INTEGER : EXTEND 200 Fil$="HISCOSPI.DAT" : Flag=5 210 OPEN Fil$ AS FILE 1 220 CLOSE 1 230 Flag=0 240 REM Laddning av maskinspr}ksrutin *********************** 250 POKE 64256,33,10,251,1,58,0,205,11,0,201,12,27,61,42,42,151 260 POKE 64272,53,106,32,55,105,32,54,105,32,54,41,32,53,106,27,61 270 POKE 64288,43,42,151,61,49,32,61,54,32,53,106,32,53,32,32,61 280 POKE 64304,49,27,61,44,42,151,53,106,32,53,106,32,101,58,32,101 290 POKE 64320,56,32,53,106 300 REM Dimensionering, laddning, m m ************************ 310 RANDOMIZE 312 Abc=800 : IF PEEK(39)=4 THEN Abc=806 ELSE IF PEEK(39)=3 THEN Abc=802 313 Bred=(Abc<>800 OR FNWid(0)>40) 314 C1$=GGRN ! Spindelf{rg 315 C2$=GRED ! Flugf{rg 316 C3$=GYEL ! Hiss 317 C4$=GMAG : C5$=GBLU : C6$=GCYA ! Figurer 318 IF Abc<>806 C1$="" : C2$="" : C3$="" : C4$="" : C5$="" : C6$="" 319 C7$=GYEL ! Bana 320 Spin1=30 : Spin2=141 : IF Abc<>806 THEN Spin1=ASCII(">") : Spin2=ASCII("m") 321 Flug1=134 : IF Abc<>806 THEN Flug1=102 322 Flug2=25 : IF Abc<>806 THEN Flug2=57 323 Hiss=138 : IF Abc<>806 THEN Hiss=106 324 Elo$=CHR$(142) ! ELongate 328 IF Abc=806 THEN POKE 65266,1 ! ATTRIBUTE 1 329 H3=0 330 DIM R(24) 340 REM Adress till pos. 0 i varje rad 350 FOR C=0 TO 23 360 IF Bred THEN R(C)=30720+C*80 ELSE R(C)=31744+C*128-R/8*984 370 NEXT C 380 ; CHR$(12) : Z=FNWid(40) 390 PRINT CUR(1,15);FLSH Elo$ RED;"S P I N D E L" 400 PRINT CUR(2,15);FLSH Elo$ MAG;"=============" STDY NRML 410 PRINT CUR(8,10);MAG;"VAD HETER DU?" 420 PRINT CUR(9,10);CYA; : INPUT ""Namn$ 425 WHILE 1 430 ; CUR(12,10);GRN;"Instruktioner? (J/N) "; : GET V$ 440 IF V$="J" OR V$="j" THEN 2510 450 IF V$="N" OR V$="n" OR V$=CHR$(13) THEN 460 455 WEND 460 PRINT CHR$(12) 470 PRINT CUR(1,0);Elo$ MAG;"G [ L L A N D E R E K O R D :" NRML 480 OPEN Fil$ AS FILE 1 490 Z=FNWid(40) 500 FOR I1=0 TO 9 510 GET #1,Po{ng$ COUNT 10 : GET #1,Namn1$ COUNT 40 520 Po{ng=VAL(Po{ng$) 530 PRINT CUR(I1+3,5);MAG;I1+1;CUR(I1+3,10);CHR$(130);Po{ng; 540 PRINT CUR(I1+3,20);CYA;Namn1$; 550 NEXT I1 555 PRINT CUR(13,0) MAG "(HASTIGHET)(PO[NG) (NAMN)" 560 PRINT CUR(16,10);MAG;"V[LJ HASTIGHET (1-10)" 570 PRINT CUR(17,10);MAG;"1 [R H\GSTA HASTIGHET" 580 PRINT CUR(19,10);CYA; : INPUT ""De 590 IF De>10 THEN LET De=10 : IF De<1 THEN LET De=0 600 Z=FNWid(80) 610 Delay=(De-1)*100 620 S=0 ! Po{ngr{knare 630 V=3 ! Spindlar "i livet" 640 T1=7 650 P1=350 ! Tid kvar 660 REM 670 A=20 : B=37 ! A%=radnr (0-23), B=kolumn (1-37) 680 D=8 : E=3 ! Figur p} rad 2 uppifr}n 690 F=14 : G=33 ! Figur p} rad 3 uppifr}n 700 H=2 : I=33 ! Figur p} |versta raden 710 K=20 : L=25 ! Figur p} nedersta raden 720 W=0 730 P=P1 740 ; CHR$(12) 750 GOSUB 2310 ! Ritning av bana 760 IF Bred THEN ; CUR(4,50);DBLE CYA;"TID:";NRML; ELSE ; CUR(22,0) CYA "TID:"; 770 IF Bred THEN ; CUR(8,50);DBLE CYA;"PO[NG:";NRML; ELSE ; CUR(22,15) CYA "PO[NG:"; 780 ; CUR(A,B);C1$;">m"; ! Spindeln 790 REM H{r b|rjar huvudloopen ************************ 800 IF SYS(5) THEN GET X$ : Q=ASCII(X$) ELSE Q=0 820 P=P-1 830 IF P<0 THEN 1910 840 GOSUB 1570 ! Flyttning av figurer 850 IF A=D AND E=B OR A=F AND G=B OR A=H AND I=B OR A=K AND L=B THEN S=S+10 : PRINT CHR$(7); 860 IF Bred ; CUR(4,62);DBLE GRN;P;NRML; ELSE ; CUR(22,8);GRN;P; 870 IF Bred ; CUR(8,62);DBLE GRN;S;NRML; ELSE ; CUR(22,23);GRN;S; 880 IF T>0 THEN T=T+1 : FOR X=0 TO 60 : NEXT X : GOTO 940 890 ; CUR(A,B);C1$;">m"; 900 IF Q=52 THEN 970 910 IF Q=54 THEN 1090 920 IF Q=56 THEN 1210 930 IF Q=50 THEN 1450 940 IF T1<3 THEN T1=3 950 IF T=T1 THEN 1300 960 GOTO 800 965 ! 970 REM Spindeln g}r }t v{nster ****************** 980 IF B-1<1 THEN 800 990 WHILE PEEK(R(A)+B-1)=Flug1 1000 ; CUR(2,39);C2$;"9"; 1010 ; CUR(20,1) " "; 1020 GOSUB 2440 1030 GOTO 1770 1040 IF End WEND 1050 ; CUR(A,B-1);C1$;">m"; 1060 ; CUR(A,B+1) " "; 1070 B=B-1 1080 GOTO 800 1085 ! 1090 REM Spindeln g}r }t h|ger *********************** 1100 IF B+1>38 THEN 800 1110 WHILE PEEK(R(A)+B+2)=Flug2 1120 ; CUR(20,1);C2$;"f"; 1130 ; CUR(2,39);" "; 1140 GOSUB 2440 1150 GOTO 1770 1160 IF End WEND 1170 ; CUR(A,B+1);C1$;">m"; 1180 ; CUR(A,B) " "; 1190 B=B+1 1200 GOTO 800 1205 ! 1210 REM Spindeln hoppar ********************* 1220 IF A=2 THEN 1250 1230 X=PEEK(R(A-3)+B) 1235 IF X=Hiss THEN 1360 1240 IF X<>32 AND X<>0 THEN 1840 1250 ; CUR(A-1,B);C1$;">m"; 1260 ; CUR(A,B) " "; 1270 IF A=2 THEN 1290 1280 ; CUR(A-2,B);C1$;">m"; : ; CUR(A-1,B) " "; 1290 T=1 : GOTO 800 1295 ! 1300 REM Flyttning om annan/ingen tangent {r nedtryckt **************** 1310 T=0 : IF A=2 THEN 1340 1320 ; CUR(A-1,B);C1$;">m"; : ; CUR(A-2,B) " "; : ; CUR(A,B);C1$;">m"; : ; CUR(A-1,B) " "; 1330 GOTO 800 1340 ; CUR(A,B);C1$;">m"; : ; CUR(A-1,B) " "; 1350 GOTO 800 1355 ! 1360 REM Spindeln "}ker hiss" **************** 1370 ; CUR(A,B) " "; 1380 PRINT CHR$(7); ! OUT 6,251 1390 ; CUR(A-3,B);C1$;"~}"; : ; CUR(A-2,B) " "; : FOR X=0 TO 40 : NEXT X 1400 ; CUR(A-4,B);C1$;"~}"; : ; CUR(A-3,B);C3$;"j5"; : FOR X=0 TO 40 : NEXT X 1410 ; CUR(A-5,B);C1$;""; : ; CUR(A-4,B);C3$;"j5"; : FOR X=0 TO 40 : NEXT X 1420 ; CUR(A-5,B);C3$;"k7"; : A=A-6 1430 ; CUR(A,B);C1$;">m"; 1440 GOTO 800 1445 ! 1450 REM Spindeln hoppar ned genom h}l **************** 1460 IF PEEK(R(A+1)+B)<>7 AND PEEK(R(A+1)+B)<>39 THEN 800 1470 PRINT CHR$(7); ! OUT 6,249 1480 ; CUR(A+1,B) " "; : FOR X=0 TO 50 : NEXT X 1490 ; CUR(A+1,B);C1$;">m"; : ; CUR(A,B) " "; : FOR X=0 TO 40 : NEXT X 1500 ; CUR(A+2,B);C1$;">m"; : ; CUR(A+1,B);C3$;"'+"; : FOR X=0 TO 40 : NEXT X 1510 ; CUR(A+3,B);C1$;">m"; : ; CUR(A+2,B) " "; : FOR X=0 TO 40 : NEXT X 1520 ; CUR(A+4,B);C1$;">m"; : ; CUR(A+3,B) " "; : FOR X=0 TO 40 : NEXT X 1530 ; CUR(A+5,B);C1$;">m"; : ; CUR(A+4,B) " "; : FOR X=0 TO 40 : NEXT X 1540 ; CUR(A+6,B);C1$;">m"; : ; CUR(A+5,B) " "; : FOR X=0 TO 40 : NEXT X 1550 A=A+6 : GOTO 800 1555 ! 1560 REM Slut flyttning av spindel ====================== 1570 REM Flyttning av figurer ********************* 1580 FOR I1=1 TO Delay : NEXT I1 1590 IF T>0 THEN 1640 1600 IF PEEK(R(K)+L+1)=Spin1 OR PEEK(R(K)+L+1)=Spin2 THEN 1910 1610 IF PEEK(R(H)+I-1)=Spin1 OR PEEK(R(H)+I-1)=Spin2 THEN 1910 1620 IF PEEK(R(D)+E+1)=Spin1 OR PEEK(R(D)+E+1)=Spin2 THEN 1910 1630 IF PEEK(R(F)+G-1)=Spin1 OR PEEK(R(F)+G-1)=Spin2 THEN 1910 1640 IF E>38 THEN ; CUR(D,E) " "; : E=1 : GOTO 1670 1650 ; CUR(D,E+1);C4$;"6"; : ; CUR(D,E) " "; 1660 E=E+1 1670 IF G<2 THEN ; CUR(F,G) " "; : G=38 : GOTO 1700 1680 ; CUR(F,G-1);C5$;"k"; : ; CUR(F,G);" "; 1690 G=G-1 1700 IF I<2 THEN ; CUR(H,I) " "; : I=36 : GOTO 1730 1710 ; CUR(H,I-1);C6$;","; : ; CUR(H,I) " "; 1720 I=I-1 1730 IF L>34 THEN ; CUR(K,L) " "; : L=3 : RETURN 1740 ; CUR(K,L+1);C6$;"#"; : ; CUR(K,L) " "; 1750 L=L+1 1760 RETURN 1765 ! 1770 REM [tit en fluga, |ka po{ngen med 250 ************** 1780 S=S+250 1790 T1=T1-1 1800 ; CHR$(7); : FOR X=0 TO 500 : NEXT X : ; CHR$(7); 1810 S=S+P*5 1820 P=P1 1830 GOTO 800 1835 ! 1840 REM Spindeln tr{ffar p} annat f|rem}l {n hissen ********* 1850 PRINT CHR$(7); : FOR X=0 TO 80 : NEXT X 1860 S=S+50 1870 IF A=20 THEN ; CUR(17,19) " "; 1880 IF A=14 THEN ; CUR(11,8) " "; 1890 IF A=8 THEN ; CUR(5,25) " "; 1900 GOTO 1250 1905 ! 1910 REM Tiden ute ******************** 1920 V=V-1 1930 Y=CALL(64256) 1940 ; CHR$(7); : FOR X=0 TO 50 : NEXT X : ; CHR$(7); 1950 IF V=0 THEN GOTO 1970 1960 FOR X=0 TO 1000 : NEXT X : GOTO 660 1970 OPEN "HISCOSPI.DAT" AS FILE 1 1980 POSIT #1,(De-1)*50 1990 GET #1,Po{ng$ COUNT 10 : GET #1,Namn1$ COUNT 40 2000 H3=VAL(Po{ng$) 2010 WHILE S>H3 2020 H3=S 2030 Namn1$=Namn$ 2040 OPEN "HISCOSPI.DAT" AS FILE 1 2050 POSIT #1,(De-1)*50 2060 Po{ng$=NUM$(H3)+SPACE$(10) : Po{ng$=LEFT$(Po{ng$,10) 2070 Namn1$=Namn1$+SPACE$(40) : Namn1$=LEFT$(Namn1$,40) 2080 PUT #1,Po{ng$ : PUT #1,Namn1$ 2090 IF End WEND 2100 CLOSE 1 2110 FOR X=0 TO 2000 : NEXT X 2120 ; CHR$(12) : Z=FNWid(40) 2130 ; CUR(10,10);YEL;"DU FICK";GRN;S;YEL;" PO[NG!"; 2140 ; CUR(12,10);YEL;"REKORDET [R";GRN;H3;YEL;" PO[NG!"; 2150 ; CUR(13,10);YEL;"OCH INNEHAS AV ";GRN;Namn1$ 2160 ; CUR(16,10);RED;"VILL DU SPELA IGEN? (J/N)"; 2170 WHILE SYS(5) : GET V$ : WEND : PRINT CUR(16,36);GRN; : INPUT ""V$ 2180 Z=FNWid(80) 2190 IF V$="J" OR V$="j" THEN 460 2200 REM Avslutning ***************** 2210 WHILE V$="N" OR V$="n" 2220 Z=FNWid(40) 2230 PRINT CUR(17,10);CHR$(129);"SKALL N]GON ANNAN SPELA? "; 2240 PRINT CHR$(130); : INPUT ""V$ 2250 Z=FNWid(80) 2260 IF V$="J" OR V$="j" THEN GOTO 20 2270 PRINT CHR$(12); 2280 END 2290 IF End WEND 2300 GOTO 2160 2305 ! 2310 REM  Rita bana  ************************** 2315 FOR I=0 TO 23 : ; CUR(I,0) C7$; : NEXT I 2320 ; CUR(21,1);STRING$(39,35); 2330 ; CUR(15,1);STRING$(39,35); 2340 ; CUR(15,10);"k7"; 2350 ; CUR(16,10);"j5"; 2360 ; CUR(17,10);"j5"; 2370 ; CUR(9,1);STRING$(39,35); 2380 ; CUR(9,23);"k7";CUR(10,23);"j5";CUR(11,23);"j5"; 2390 ; CUR(3,1);STRING$(39,35); 2400 ; CUR(3,5);"k7";CUR(4,5);"j5";CUR(5,5);"j5"; 2410 ; CUR(3,20);"'+"; 2420 ; CUR(9,10);"'+";CUR(15,17);"'+"; 2430 ; CUR(2,39);C2$;"9"; 2440 REM [ndring av figurer slumpartat ******************* 2450 Z=INT(RND*5)+1 2460 RESTORE 2470 FOR U=1 TO Z : READ N,M : NEXT U 2480 ! POKE R(17)+19,N,M : POKE R(5)+25,N,M : POKE R(11)+8,N,M 2485 ; CUR(23,0) C2$ CUR(17,19) CHR$(N,M) CUR(5,25) CHR$(N,M) CUR(11,8) CHR$(N,M) 2490 RETURN 2500 DATA 117,122, 121,118, 119,123, 113,114, 122,117 2510 REM  INSTRUKTIONER  ********************** 2520 ; CHR$(12) : Z=FNWid(40) 2530 ; CUR(3,15);MAG;"SPINDEL" 2540 ; CUR(4,15) GRED;"#######" 2550 ; CUR(6,0);YEL;" Detta {r ett r{tt kul spel gjort av" 2560 ; YEL;" den suver{ne killen JAN H\RNSTR\M. " 2570 ; YEL;" Man {r en spindel (";GGRN;">m";YEL;"), och man" 2580 ; YEL;" skall f|rs|ka ta sig upp/ner till en" 2590 ; YEL;" fluga (";GRED;"9";YEL;") och {ta upp den " 2600 ; YEL;" innan tiden {r ute." : ; 2610 ; YEL;" Men f|r att komma dit upp/ner m}ste" 2620 ; YEL;" du hoppa |ver diverse faror." 2630 ; CUR(22,0);RED;" Tryck en knapp!" 2640 FOR X=0 TO 300 : NEXT X 2650 GET Slask$ 2660 ; CHR$(12) 2670 PRINT CUR(5,15);YEL;' DU STYR MED:' 2680 ; : ; GRN;' "8"';CYA;' HOPP ' 2690 ; : ; GRN;' "4"';CYA;' V[NSTER ';GRN;' "6"';CYA;' H\GER ' 2700 ; : ; GRN ' "2"';CYA;' NED ' 2710 ; : ; : ; : ; RED;" Tryck en knapp!" 2720 FOR X=0 TO 500 : NEXT X 2730 GET Slask$ 2740 GOSUB 2810 2750 ; CHR$(12) : ; CUR(12,0);DBLE FLSH RED;" OBS!" 2760 ; CUR(14,0);MAG;"EFTER VARJE UPP[TEN FLUGA S]" 2770 ; MAG;"BLIR DET SV]RARE ATT HOPPA!" 2780 PRINT CUR(20,0);RED;'Tryck ned en tangent f|r att starta!'; : GET Slask$ 2790 Z=FNWid(80) 2800 GOTO 460 2810 ; CHR$(12) 2820 ; : ; : ; CYA;" F\R ATT KUNNA KOMMA UPP P]" ! CYA 2830 ; CYA;" NIV]N OVANF\R, M]STE MAN" 2840 ; CYA;" HOPPA D] MAN ST]R UNDER EN " 2850 ; CYA;' "HISS" (Lodr{tt vitt streck).' 2860 ; : ; GRN;" F\R ATT KOMMA NER," 2870 ; GRN;' M]STE MAN ST] \VER EN "LUCKA"' 2880 ; GRN;" (Tv} sm} streck under niv}n)." 2890 ; : ; : ; RED;" Tryck en knapp!" 2900 GET Slask$ 2910 RETURN 2920 REM Errorhanterare **************** 2930 IF ERRCODE=21 AND Flag=5 THEN RESUME 2980 2935 IF ERRCODE=210 OR ERRCODE=53 THEN RESUME 2940 PRINT RED;"Fel nr: ";Elo$ CYA;ERRCODE NRML; 2950 STOP 2960 REM ****** Filen "HISCOSPI.DAT" l{ggs upp ************* 2970 REM Filen anv{nds f|r att lagra REKORDEN i resp. klass 2980 PREPARE Fil$ AS FILE 1 2990 Text$="0 Ingen " 3000 FOR I1=0 TO 9 3010 PUT #1,Text$ 3020 NEXT I1 3030 CLOSE 1 3040 GOTO 230 3050 ! 3060 DEF FNWid(Wid) 3070 IF Abc<>800 AND Wid>0 THEN POKE 65364,Wid 3080 RETURN PEEK(65364) 3090 FNEND 3100 REM ------------ h{r slutar det ----------