100 REM ******************************* 101 REM * * 102 REM * PROGRAMNAMN : KANON * 103 REM * * 104 REM ******************************* 105 REM * * 106 REM * PROGRAMMET AVSETT F\R ABC-80* 107 REM * * 108 REM * * 109 REM * KONSTUKT\R JAN BERGLUND * 110 REM * * 111 REM * ADRESS MASTV[GEN 9 * 112 REM * 19800 B]LSTA * 113 REM * * 114 REM * TELEFON 0171/51345 * 115 REM * * 116 REM ******************************* 117 REM 118 REM 119 REM 120 REM 121 REM 122 ; CHR$(12) : ; CUR(6,7);"**** SPELET KANON ****" : ; : ; 123 ; " VET DU VAD SPELET G]R UT P] (J/N)"; : GET P$ 124 IF P$<>"J" AND P$<>"j" AND P$<>"N" AND P$<>"n" THEN 122 ELSE IF P$="J" OR P$="j" THEN 131 125 ; CHR$(12) : ; : ; : ; "DETTA [R ETT SPEL F\R TV] PERSONER." : ; 126 ; "DET G[LLER ATT SKJUTA P] MOTST]NDAREN" : ; 127 ; "MED GRANATER.DU KAN REGLERA L[NGDEN" : ; 128 ; "P] SKOTTEN MED UTG]NGSVINKEL OCH UTG]NGS" : ; "HASTIGHET.[VEN V[DRET P]VERKAR L[NGDEN" : ; : ; "P] SKOTTEN" 129 ; : ; "VID FEL INMATNING GES LJUD I H\GTALAREN." 130 ; : ; "N[R NI [R KLARA TRYCK P] RETURN"; : GET P$ 131 ; CHR$(12) : FOR A=0 TO 23 : ; CUR(A,0);CHR$(151) : NEXT A 132 RANDOMIZE : ]=RND : IF ]<.7 THEN 132 133 IF ]>.95 THEN ]$="VACKERT V[DER" : GOTO 137 134 IF ]>.85 THEN ]$="MOLNIGT V[DER" : GOTO 137 135 IF ]>.8 THEN ]$="BL]SIGT" : GOTO 137 136 IF ]>.75 THEN ]$="HAGELSKURAR MED BL]ST" ELSE ]$="SN\STORM" 137 ; CUR(22,1);STRING$(39,127) 138 ; CUR(21,1);STRING$(39,127) 139 ; CUR(20,1);STRING$(39,127) 140 ; CUR(19,1);STRING$(39,127) 141 ; CUR(18,1);SPACE$(16);STRING$(23,127) 142 ; CUR(17,1);SPACE$(17);STRING$(22,127) 143 ; CUR(16,1);SPACE$(17);STRING$(22,127) 144 ; CUR(15,1);SPACE$(18);STRING$(6,127) 145 ; CUR(14,1);SPACE$(19);STRING$(4,127) 146 ; CUR(13,1);SPACE$(20);STRING$(2,127) 147 ; CUR(12,1);SPACE$(20);STRING$(1,127) 148 RANDOMIZE 149 D=INT(RND*12+1) : RANDOMIZE : E=INT(RND*14+1) : ; CUR(19,D+1);"A" : ; CUR(16,E+25);"B" 150 DEFFNA(X)=TAN((A*PI)/180)*X-9.81/(2*V^2%*(COS((A*PI)/180))^2%)*X^2% 151 ONERRORGOTO 219 : IF Z=1 THEN ; CUR(0,0);"SPELARE B " ELSE ; CUR(0,0);"SPELARE A " 152 REM == INMATNING == 153 ; CUR(1,0);SPACE$(160);CUR(3,0);"V[DERLEK:";]$;CUR(1,0);"UTG]NGS VINKEL (10-80)"; : INPUT A 154 ; CUR(1,0);SPACE$(160);CUR(1,0);"UTG]NGSHASTIGHET (100-400)"; : INPUT V : V=V/10 155 IF V>40 OR V<10 OR A<10 OR A>80 THEN A$=SPACE$(39)+CHR$(7) : ; CUR(0,0);A$;CUR(1,0);A$ : GOTO 151 156 A=A*] 157 FOR I%=0% TO 5% : ; CUR(I%,0%);CHR$(151);SPACE$(39); : NEXT I% 158 IF Z=1 THEN 179 ELSE 161 159 REM 160 REM ********** 161 REM *PLAYER A* 162 REM ********** 163 REM 164 FOR X=1 TO 80 165 Y=FNA(X) 166 IF 2*(D+1)+X>79 THEN 176 167 R=2*(D+1) : T=2*(E+25) : I=INT(ABS(Y-57)) : K=INT(57-Y) : IF K<0 OR I>69 THEN 176 168 IF I>45 THEN IF T=R+X THEN ; CHR$(7) : GOTO 211 169 IF I>45 THEN IF T=X+R-1 THEN ; CHR$(7) : GOTO 211 170 IF I>69 THEN FOR A=1 TO 1000 : NEXT A : GOTO 151 171 IF DOT(INT(ABS(Y-57)),X+2*(D+1)) THEN OUT 6,137 : GOSUB 208 : GOTO 176 172 SETDOT INT(ABS(Y-57)),X+2*(D+1) 173 FOR Z=1 TO 18 : NEXT Z 174 CLRDOT INT(ABS(Y-57)),X+2*(D+1) 175 NEXT X 176 I=1E+5 : Z=1 : GOTO 170 177 REM 178 REM ********** 179 REM *PLAYER B* 180 REM ********** 181 REM 182 FOR X=1 TO 80 183 Y=FNA(X) 184 IF 2*(E+26)-X<=2 THEN 194 185 I=INT(ABS(Y-48)) : R=2*(D+1) : T=2*(E+25) : K=INT(48-Y) : IF K<0 OR I>68 THEN 194 186 IF I>56 THEN IF T=R+X-2 THEN ; CHR$(7) : GOTO 213 187 IF I>56 THEN IF T=X+R-1 THEN ; CHR$(7) : GOTO 213 188 IF I>69 THEN FOR A=1 TO 1000 : NEXT A : GOTO 151 189 IF DOT(INT(ABS(Y-48)),2*(E+26)-X) THEN OUT 6,137 : GOSUB 200 : GOTO 194 190 SETDOT INT(ABS(Y-48)),2*(E+26)-X 191 FOR Z=1 TO 18 : NEXT Z 192 CLRDOT INT(ABS(Y-48)),2*(E+26)-X 193 NEXT X 194 I=1E+5 : Z=0 : GOTO 188 195 REM 196 REM ******************************* 197 REM MARK TR[FF INDIKERING A 198 REM ******************************* 199 REM 200 CLRDOT INT(ABS(Y-48)),2*(E+26)-X : CLRDOT INT(ABS(Y-47)),2*(E+26)-X 201 CLRDOT INT(ABS(Y-46)),2*(E+26)-X : CLRDOT INT(ABS(Y-45)),2*(E+26)-X : CLRDOT INT(ABS(Y-44)),2*(E+26)-X 202 RETURN 203 REM 204 REM ******************************* 205 REM MARK TR[FF INDIKERING B 206 REM ******************************* 207 REM 208 CLRDOT INT(ABS(Y-56)),X+2*(D+1) : CLRDOT INT(ABS(Y-55)),X+2*(D+1) 209 CLRDOT INT(ABS(Y-57)),X+2*(D+1) : CLRDOT INT(ABS(Y-54)),X+2*(D+1) : CLRDOT INT(ABS(Y-53)),2*(D+1)+X 210 RETURN 211 ; CUR(1,1);CHR$(135);"BRA GJORT!! DU VANN SPELARE A" 212 FOR A=31744 TO 33000 : B=PEEK(A)+128 : POKE A,B : NEXT A : GOTO 215 213 ; CUR(1,1);CHR$(135);"BRA GJORT!! DU VANN SPELARE B" 214 FOR A%=31744% TO 32766% : POKE A%,PEEK(A%)+128% : NEXT A% : GOTO 215 215 FOR L=1 TO 4000 : NEXT L 216 ; CHR$(12) : ; CUR(10,5);"VILL NI SPELA MER (J/N)"; 217 GET P$ : IF P$<>"J" AND P$<>"N" AND P$<>"j" AND P$<>"n" THEN 216 218 IF P$="J" OR P$="j" THEN 109 ELSE ; CHR$(12) : END 219 ; CUR(1,0);CHR$(7) : GOTO 151