1 REM Ins{nd av Karsten Husberg <6574> 1989-10-20 22.49.08 (SEND) 10 ! ################################# 11 ! ## ESPRIT.BAC ## 12 ! ################################# 13 ! ## Ett bilspel-program ## 14 ! ## Av Karsten Husberg ## 15 ! ## P} ABC800M ## 16 ! ## Den Lite d} och d} ## 17 ! ## Helt UTAN GOTO ## 18 ! ################################# 19 INTEGER : EXTEND : SINGLE 20 DIM Reks$(16),Reks(16) 21 RANDOMIZE 22 Slask=FNHrerase+FNInitiera 23 IF Grafik Slask=FNGrafikstart 24 Slask=FNGrundreks 25 ! ######## Gamlareks ########### 26 ON ERROR GOTO 30 27 OPEN Rekfil$ AS FILE 1 28 FOR I=1 TO 15 : INPUT #1,Reks$(I) : INPUT #1,Reks(I) 29 NEXT I : CLOSE 1 30 ON ERROR GOTO 31 ! ############################## 32 Slask=FNSpel 33 ! ############################## 34 DEF FNSpel 35 Slask=FNHrerase+FNStarttxt+FNInitiera+FNStartgata 36 IF Grafik FGPOINT 0,2,1 : FGLINE 239,2 : FGLINE 239,239 37 IF Grafik FGLINE 0,239 : FGLINE 0,2 38 WHILE Miss=0 39 Miss=FNBilen 40 Slask=FNDr|j(Tid) 41 Slask=FNNyrad 42 Km=Km+Ett 43 IF Gr{ns=0 AND Km>2500 THEN Slask=FNGr{ns 44 IF Km>Sn{ppv{rde THEN Bredd=Bredd-1 : Sn{ppv{rde=Sn{ppv{rde+Sn{pp 45 IF Bredd=5 THEN Sn{ppv{rde=0 46 WEND 47 IF Grafik Slask=FNHrerase 48 Slask=FNEfterslut(FNSnyggt$(FNSluttxt$(Miss))) 49 FNEND 50 ! ############################## 51 ! # Funktioner # 52 ! ############################## 53 DEF FNInitiera 54 Bredd=13 ! V{gens bredd vid start 55 Grafik=1 ! Ritar lite grafik (1) 56 Bilkol=35 ! Startkolumn f|r bilen 57 Bilrad=10 ! Rad som bilen k|r p} 58 Ett=2 ! [ndra ej, d} funkar ej v{xlingen 59 Sn{ppv{rde=400 ! Po{ng n{r v{gbr{dden minskar f|r f|rsta g}ngen 60 Sn{pp=400 ! Vad sn{ppv{rde skall |kas med fr}n b|rjan 61 Defnamn$="KARSTEN" ! Defaultnamn vid namn-fr}gan 62 Km=0 ! Antal kilometrar vid start 63 Miss=0 ! Kontrollvariabel om man ej missat 64 Tid=200 ! [ndra ej, d} funkar ej v{xlingen 65 Gr{ns=0 ! Kontroll variabel vid forts{ttningen 66 Rekfil$="ESPRIT.REK" ! Fil som rekorden ska ligga i 67 Kantpos=30 ! Position f|r v{gens v{nstra kant vid start 68 Bilsn{pp=1 ! Antal steg bilen flyttas i sidled 69 V{gsn{pp=1 ! Antal steg v{gen flyttas i sidled 70 V{knapp$="Aa" ! Knapp som sv{nger }t v{nster 71 Raknapp$=" " ! Knapp som sv{nger "rakt" 72 H|knapp$="[{" ! Knapp som sv{nger }t h|ger 73 RETURN 1 74 FNEND 75 ! ############################## 76 DEF FNT|m(Fr}n,Till) LOCAL \ 77 FOR I=Fr}n TO Till STEP -1 78 PRINT CUR(I,0) SPACE$(80); 79 Slask=FNDr|j(50) 80 NEXT I 81 RETURN 1 82 FNEND 83 ! ############################## 84 DEF FNDr|j(Tid) 85 FOR \=0 TO Tid 86 NEXT \ 87 RETURN 1 88 FNEND 89 ! ############################## 90 DEF FNHrerase 91 Slask=FNT|m(24,0) 92 FGCTL 0 93 FGPOINT 0,0,0 94 FGFILL 239,239 95 FGCTL 1 96 RETURN 1 97 FNEND 98 ! ############################## 99 DEF FNH}nljud LOCAL \ 100 \=FNTut(136,250) 101 \=FNTut(136,250) 102 \=FNTut(136,250) 103 \=FNTut(120,255) 104 \=FNTut(136,250) 105 \=FNTut(160,235) 106 RETURN 1 107 FNEND 108 ! ############################## 109 DEF FNFanfarljud LOCAL \ 110 \=FNTut(214,210) 111 \=FNTut(170,230) 112 \=FNTut(143,245) 113 \=FNTut(120,255) 114 \=FNTut(143,245) 115 \=FNTut(170,230) 116 \=FNTut(214,210) 117 \=FNTut(102,255) 118 \=FNTut(102,255) 119 \=FNTut(102,255) 120 RETURN 1 121 FNEND 122 ! ############################## 123 DEF FNTut(Frekv,L{ngd) LOCAL Tut$=15 124 Tut$=CHR$(66,22,0,219,5,197,16,254,193,27,122,179,32,245,201) 125 Slask=FNDr|j(40) 126 RETURN CALL(VARPTR(Tut$),Frekv*256+L{ngd) 127 FNEND 128 ! ############################## 129 DEF FNStarttxt LOCAL A$=60 130 ; CUR(0,20) "Lotus Esprit Spelet" 131 IF Grafik FGPOINT 60,229,1 : FGLINE 118,229,1 132 ; : RESTORE 156 133 FOR Ii=1 TO 9 134 ON ERROR GOTO 166 135 ; TAB(11); : READ A$ 136 IF INP(34)=32 THEN \=FNT|m(24,0) : FGLINE 60,229,0 : RETURN 1 137 FOR I=1 TO LEN(A$) 138 ; MID$(A$,I,1); 139 Slask=FNTut(255,1) 140 NEXT I 141 NEXT Ii 142 ; CUR(11,10) "Ni styr med :" 143 ; CUR(12,10) '"' MID$(V{knapp$,1,1);'" <-- "';MID$(Raknapp$,1,1);'" --> "';MID$(H|knapp$,1,1);'"' 144 ; CUR(0,60) "Av Karsten 1987"; 145 ; CUR(16,10) "PF1 -- 4:an" 146 ; CUR(17,10) "PF3 -- 3:an" 147 ; CUR(18,10) "PF5 -- 2:an i vid start" 148 ; CUR(19,10) "PF7 -- 1:an " 149 WHILE INP(34)<>32 150 Slask=FNDr|j(500)+FNTut(255,800) 151 ; CUR(0,63);SPACE$(7);CUR(14,17);SPACE$(12); 152 Slask=FNDr|j(500)+FNTut(255,800) 153 ; CUR(14,10) "Pressa mellanslaget n{r Ni vill b|rja !" 154 ; CUR(0,63) "Karsten"; 155 WEND 156 DATA Datamaffian har hittat Er hemliga data butik. 157 DATA Ni kastar Er in i Er Lotus Esprit. 158 DATA G|r en rivstart och k|r mot gr{nsen. 159 DATA Det g{ller att skynda p} s} Ni har gasen i botten, 160 DATA men v{gen {r vinglig och full med stenar och h}l. 161 DATA K|r Ni d{r eller utanf|r v{gen krossas bilen och 162 DATA Ni och det vore ju synd p} en Lotus Esprit. 163 DATA S} lycka till ! 164 DATA 165 Slask=FNHrerase 166 RETURN 1 167 FNEND 168 ! ############################## 169 DEF FNNerscroll LOCAL Asm$=25 170 POKE VARPTR(Asm$),33,47,127,17,127,127,1,48,7,237 171 POKE VARPTR(Asm$)+10,184,33,0,120,17,1,120,1,79,0 172 POKE VARPTR(Asm$)+20,54,32,237,176,201 173 Slask=CALL(VARPTR(Asm$)) 174 RETURN 1 175 FNEND 176 ! ############################## 177 DEF FNGrundreks 178 FOR I=1 TO 15 179 Reks$(I)="ABC800 XX" 180 Reks(I)=100 181 NEXT I 182 FOR I=1 TO 9 183 Rek(I)=1 184 Rek$(I)="ABC800 " 185 NEXT I 186 RETURN 1 187 FNEND 188 ! ############################## 189 DEF FNSnyggt$(Str{ng$) LOCAL Utstr$=40,Bokst$=1,Tag,Varv 190 Varv=2 191 Bokst$=MID$(Str{ng$,1,1) 192 IF Bokst$=" " THEN Bokst$=MID$(Str{ng$,2,1) : Varv=3 193 IF Bokst$>"_" THEN Bokst$=CHR$(ASCII(Bokst$) XOR 32) 194 Utstr$=Bokst$ 195 WHILE Varv<11 196 Bokst$=MID$(Str{ng$,Varv,1) 197 IF Bokst$<"@" AND Tag=0 THEN Utstr$=Utstr$+Bokst$ : Tag=1 198 IF Bokst$="_" AND Tag=0 THEN Utstr$=Utstr$+Bokst$ : Tag=1 199 IF Bokst$>"^" AND Tag=0 THEN Utstr$=Utstr$+Bokst$ : Tag=1 200 IF Tag=0 THEN Utstr$=Utstr$+CHR$(ASCII(Bokst$) OR 32) : Tag=1 201 Tag=0 202 Varv=Varv+1 203 WEND 204 Utstr$=Utstr$+SPACE$(14) 205 Utstr$=LEFT$(Utstr$,14) 206 RETURN Utstr$ 207 FNEND 208 ! ############################## 209 DEF FNSluttxt$(S{tt) LOCAL Namn$=30,Char$=1 210 Slask=FNT|m(24,0) 211 ; CUR(0,20) "Lotus Esprit Spelets" 212 ; CUR(2,20) "Meddelande avdelning" 213 IF Grafik FGPOINT 61,229,1 : FGLINE 120,229 214 IF Grafik FGPOINT 61,209,1 : FGLINE 119,209 215 ; : ; TAB(21) "Ojsan ! Ojsan ! s} det kan g}." 216 IF S{tt=-1 ; TAB(21) "K|ra ner i h}len p} det d{r viset." 217 IF S{tt=1 ; TAB(21) "K|ra av v{gen p} det d{r viset." 218 ; TAB(21) "Och med en Lotus Esprit till p} k|pet." 219 ; TAB(21) "Men du kom i alla fall " INT(Km/10) " kilometer," 220 ; TAB(21) "och det {r ju b{ttre {n ingeting." 221 ; : ; 222 Slask=FNH}nljud 223 GET Namn$ 224 Namn$="" : Char$="" 225 WHILE LEN(Namn$)<10 226 ; CUR(15,20) "Vad heter du :__________";STRING$(10,8); 227 ; Namn$; 228 GET Char$ 229 IF Char$=CHR$(13) AND Namn$="" THEN Namn$=Defnamn$ 230 IF Char$=CHR$(13) THEN Namn$=Namn$+SPACE$(11) 231 IF Char$=CHR$(8) AND LEN(Namn$)>0 THEN Namn$=LEFT$(Namn$,LEN(Namn$)-1) 232 IF Char$<>CHR$(8) THEN Namn$=Namn$+Char$ 233 IF Char$=CHR$(24) THEN Namn$="" 234 WEND 235 IF Grafik FGPOINT 61,229,0 : FGLINE 122,229 : FGPOINT 61,209,0 : FGLINE 119,209 236 RETURN Namn$ 237 FNEND 238 ! ############################## 239 DEF FNNyrad LOCAL Slask,Str{ng$=80,Rand 240 Slask=FNNerscroll 241 Str{ng$=STRING$(80,127) 242 Rand=INT(RND*9)+1 243 IF Rand=1 THEN S{tt=-V{gsn{pp 244 IF Rand>=9 THEN S{tt=V{gsn{pp 245 Kantpos=Kantpos+S{tt 246 IF Kantpos<2 THEN Kantpos=2 247 IF Kantpos+Bredd>80 THEN Kantpos=80-Bredd 248 MID$(Str{ng$,Kantpos,Bredd)=STRING$(Bredd,32) 249 ; CUR(0,0) Str{ng$ 250 Pos=INT(RND*79) 251 IF PEEK(0*80+Pos+30720)<>127 THEN POKE 0*80+Pos+30720,111 252 RETURN 1 253 FNEND 254 ! ############################## 255 DEF FNBilen 256 IF INSTR(1,V{knapp$,CHR$(INP(34))) THEN H}ll=-Bilsn{pp 257 IF INSTR(1,H|knapp$,CHR$(INP(34))) THEN H}ll=Bilsn{pp 258 IF INSTR(1,Raknapp$,CHR$(INP(34))) THEN H}ll=0 259 WHILE NOT Gr{ns 260 IF INP(34)=192 THEN Tid=0 : Ett=4 261 IF INP(34)=194 THEN Tid=90 : Ett=3 262 IF INP(34)=196 THEN Tid=150 : Ett=2 263 IF INP(34)=198 THEN Tid=400 : Ett=1 264 IF 0 WEND 265 ; CUR(Bilrad,Bilkol) " "; 266 Bilkol=Bilkol+H}ll 267 IF Bilkol<0 THEN Bilkol=0 268 IF Bilkol>79 THEN Bilkol=79 269 IF PEEK((Bilrad-1)*80+Bilkol+30720)=111 THEN RETURN -1 270 IF PEEK((Bilrad-1)*80+Bilkol+30720)=127 THEN RETURN 1 271 ; CUR(Bilrad-1,Bilkol) "8" 272 RETURN 0 273 FNEND 274 ! ############################## 275 DEF FNGrafikstart LOCAL X,Y,Tangent$=1 276 ; CUR(18,25) 'Tryck p} "CE" tangenten.' 277 FGPOINT 74,49,1 : FGLINE 74,61,1 : FGLINE 147,61,1 : FGLINE 147,49,1 278 FGLINE 74,49,1 279 WHILE Lager<6 AND NOT Sluta 280 RESTORE 293 281 FOR I=1 TO 86 282 READ X,Y 283 IF INP(34)=24 THEN I=86 : Sluta=1 : ; CUR(18,24) SPACE$(40) 284 X=X+Lager : Y=Y+Lager 285 IF X>1000 THEN FGPOINT X-1000,Y,1 ELSE FGLINE X,Y 286 NEXT I 287 Lager=Lager+1 288 WEND 289 WHILE INP(34)<>24 290 WEND 291 ; CUR(18,25) SPACE$(40) 292 RETURN 1 293 DATA 1025,190,20,185,20,140,25,135,45,135,50,140,50,145,45,150 294 DATA 35,150,30,155,30,185,25,190 295 DATA 1060,190,55,185,55,140,60,135,80,135,85,140,85,185,80,190,60,190 296 DATA 1065,175,65,151,67,149,73,149,75,151,75,175,73,177,67,177,65,175 297 DATA 1095,190,90,185,90,180,95,175,98,175,100,173,100,140,105,135 298 DATA 110,140,110,173,112,175,115,175,120,180,120,185,115,190,95,190 299 DATA 1130,190,125,185,125,140,130,135,150,135,155,140,155,185,150,190 300 DATA 145,185,145,151,143,149,137,149,135,151,135,185,130,190 301 DATA 1185,190,190,185,190,180,185,175,170,175,168,173,168,171,170,169 302 DATA 185,169,190,164,190,140,185,135,165,135,160,140,160,145,165,150 303 DATA 180,150,182,152,182,154,180,156,166,156,160,162,160,185,165,190 304 DATA 185,190 305 FNEND 306 END 307 ! ############################## 308 DEF FNSlut LOCAL Valet$=1 309 Slask=FNHrerase 310 ON ERROR GOTO 311 PREPARE Rekfil$ AS FILE 1 312 FOR I=1 TO 15 313 ; #1,Reks$(I) : ; #1 Reks(I) 314 NEXT I 315 Slask=FNT|m(24,0) 316 ; "Sluta ? (J/N) (N)" CHR$(8,8); 317 GET Valet$ 318 IF INSTR(1,"nN "+CHR$(13),Valet$)<>0 THEN Slask=FNSpel 319 ; : ; "V{lkommen tillbaka och spela lite mer s} sm}ningom." 320 CHAIN "nul:" 321 RETURN 0 322 FNEND 323 ! ############################## 324 DEF FNSortgod LOCAL Slask,Slask$=80 325 FOR I=1 TO 16 326 FOR Ii=1 TO 15 327 IF Reks(Ii)Reks(15) THEN God=1 341 IF God THEN ; CUR(6,6) "Ni kommer att rekord registreras. Grattis!" 342 IF God ; CUR(7,6) "Det vore kul om Ni kunde ange Er }lder:"; : INPUT ]lder$ 343 IF God ON ERROR GOTO 342 : ]lder=VAL(]lder$) : ON ERROR GOTO 344 IF God Godnamn$=Namnet$+NUM$(]lder) 345 IF God Reks$(16)=Godnamn$ : Reks(16)=Km 346 IF God Slask=FNSortgod 347 Rek$(9)=Namnet$ 348 Rek(9)=Km 349 Slask=FNDagsort 350 Slask=FNT|m(8,5) 351 ; CUR(8,5) "Dagens b{sta :" 352 ; CUR(9,4) "Nr: Namn: Po{ng:" 353 FOR I=1 TO 9 354 ; CUR(9+I,3) I " " Rek$(I) CHR$(8,8,8) Rek(I) 355 Slask=FNDr|j(50) 356 NEXT I 357 IF Grafik FGPOINT 10,150,1 : FGLINE 75,150 : FGPOINT 55,150 358 IF Grafik FGLINE 55,50 : FGPOINT 10,150 : FGLINE 10,50 359 IF Grafik FGPOINT 75,150 : FGLINE 75,50 : FGLINE 10,50 360 ; CUR(4,40) "De riktiga rekorden:" 361 ; CUR(5,40) "Nr: Namn: ]lder: Po{ng:" 362 FOR I=1 TO 15 363 IF Reks$(I)=Godnamn$ AND Reks(I)=Km THEN ; CUR(5+I,37) "->" 364 ; CUR(5+I,40) I CUR(5+I,45) Reks$(I) CUR(5+I,65) Reks(I) 365 Slask=FNDr|j(50) 366 NEXT I 367 IF Grafik FGPOINT 119,30,1 : FGLINE 119,191 : FGLINE 214,191 368 IF Grafik FGPOINT 130,190 : FGLINE 130,30 : FGPOINT 167,190 369 IF Grafik FGLINE 167,30 : FGPOINT 192,190 : FGLINE 192,30 370 IF Grafik FGPOINT 119,30,1 : FGLINE 214,30 : FGLINE 214,191 371 WHILE G}=1 372 ; CUR(4,1) "Skulle Ni vilja f|rs|ka " 373 ; CUR(5,1) "{nnu en g}ng ? (J/N) (J)"; 374 ; CHR$(8,8); : GET A$ 375 IF INSTR(1,"nN",A$) THEN Slask=FNSlut 376 IF INSTR(1,"YyJj "+CHR$(13),A$) THEN Slask=FNSpel 377 WEND 378 Slask=FNSpel 379 RETURN 0 380 FNEND 381 ! ############################## 382 DEF FNDagsort LOCAL Slask,Slask$=20 383 FOR I=1 TO 9 384 FOR Ii=1 TO 8 385 IF Rek(Ii)32 405 Slask=FNDr|j(500)+FNTut(255,800) 406 ; CUR(15,19) SPACE$(12); 407 Slask=FNDr|j(500)+FNTut(255,800) 408 ; CUR(15,19) "mellanslaget" 409 WEND 410 ! 411 Bredd=4 412 Ett=10 413 Kantpos=30 414 Bilkol=31 415 Gr{ns=1 416 Tid=280 417 Sn{ppv{rde=10000 418 Slask=FNT|m(24,0) 419 RETURN 1 420 FNEND 421 ! ############################ 422 DEF FNStartgata 423 FOR I=3 TO 28 424 ; CUR(I,0) STRING$(29,127);STRING$(13,32);STRING$(38,127) 425 NEXT I 426 RETURN 1 427 FNEND 428 ! ########################