1 REM Ins{nd av Bengt Sandgren <2776> 1988-06-11 07.43.20 (KERMIT) 10 ! !----------------------------------------------------------------------! 12 ! ! MOTOKRAS.806. Lars Gj|rling. Ins{nd 1988-03-16 ! 14 ! ! ! 16 ! ! Skriven 1985-02-24 f|r yngre sl{kt- och familjemedlemmar. ! 18 ! ! ! 20 ! ! Utprovad p} ABC806 (med f{rgsk{rm). ! 22 ! ! ! 24 ! ! Spelprogram, som pr|var skicklighet och reaktionssnabbhet. Det g{l- ! 26 ! ! ler att k|ra en motorcykel, vars sp}r datorn ritar upp, s} l}ngt ! 28 ! ! som m|jligt, samtidigt som man kryssar mellan slumpm{ssigt utplace- ! 30 ! ! de stenar. Man v{ljer mellan 5 hastigheter. G{llande rekordresul- ! 32 ! ! tat lagras i en datafil, 'MOTOKRAS.HSC'. Denna nyskapas om den in- ! 34 ! ! te finns. Vill man b|rja om fr}n b|rjan med rekorden, s} kan man ! 36 ! ! helt enkelt radera datafilen (UNSAVE MOTOKRAS.HSC). ! 38 ! !----------------------------------------------------------------------! 40 ! 42 ! 44 ! ************* H{r startar programmet ********************************* 46 ! 48 ! 100 INTEGER : EXTEND : ; CHR$(12); 110 ATTRIBUTE 1 120 DIM Rek$(5)=32 130 RANDOMIZE 140 Z=FNSettime 150 FGCTL BLK+YEL+CYA+RED+GRN 160 FGPOINT 0,0,0 : FGFILL 255,239 170 Z=FNInfoval : IF Z ; CHR$(12) : GOTO 380 180 Z=FNHinder 190 IF Tid=0 THEN X=2 : D=2 ELSE X=1 : D=1 200 Y=15*RND : Y=10*Y+56 210 FGPOINT X,Y,1 220 IF Tid=0 THEN K=2 ELSE K=1 230 Dx=K : Str{cka=0 : IF Y<120 Dy=K ELSE Dy=-K 240 IF SYS(5)=0 THEN GOTO 310 250 GET W$ : W=ASCII(W$) 260 ON INSTR(1,CHR$(123,45,122,97,197,199,198,196,165,167,175,173),W$)+1 GOTO 310,270,280,290,300,270,280,290,300,270,280,290,300 270 IF Dx=-K AND Dy=-K 310 ELSE Dx=K : Dy=K : GOTO 310 280 IF Dx=-K AND Dy=K 310 ELSE Dx=K : Dy=-K : GOTO 310 290 IF Dx=K AND Dy=K 310 ELSE Dx=-K : Dy=-K : GOTO 310 300 IF Dx=K AND Dy=-K 310 ELSE Dx=-K : Dy=K : GOTO 310 310 X=X+Dx : Y=Y+Dy : S=Dx : IF FGPOINT(X,Y) THEN 370 320 FGLINE X,Y,1 330 Str{cka=Str{cka+D : ; CUR(23,47) CYA; : ; USING "Hast:# Rekord:##### m.Nu:##### m" Speed,Speedrek,Str{cka; 340 IF Speed>3 THEN 240 350 FOR I=1 TO Tid*20 : NEXT I 360 GOTO 240 370 Z=FNSpelslut 380 ; CUR(23,0) YEL "Tryck f|r nytt spel och f|r att sluta!"; 390 GET W$ : IF ASCII(W$)=32 THEN 150 400 IF ASCII(W$)<>13 THEN 390 410 ; CHR$(12); : FGPOINT 0,0,0 : FGFILL 255,239 420 END ! Slut p} huvudprogrammet. 430 ! 1000 ! ************ Funktioner **************************************** 1010 ! 1020 DEF FNInfoval ! FUNKTION F\R INFORMATION OCH VAL AV HASTIGHET. 1030 ; CHR$(12) YEL CUR(0,10);EL DBLE "INFORMATION OM SPELREGLER" NRML YEL " " CHR$(10) 1040 ; : ; YEL "N{r du har l{st informationen, valt hastighet och tryckt p} " 1050 ; YEL "s} visas p} sk{rmen en m{ngd 'stenar' bland vilka du k|r en motorcykel" 1060 ; YEL "DIAGONALT mer eller mindre snabbt. K|rriktning v{ljs med fyra tangenter." 1070 ; YEL "Du kan v{lja att anv{nda a) tangenterna '{','-','z' och 'a' eller " 1080 ; YEL "b) PF6, PF8, PF7 och PF5 eller c) h|rnen av plattan p} tangentbord 99." 1090 ; : ; YEL "Man skall k|ra s} l}ngt som m|jligt. Varje t{nd punkt motsvarar 1 meter." 1100 ; : ; YEL "Man f}r inte sk{ra sina egna hjulsp}r eller den omgivande ramen, och inte" 1110 ; YEL "heller kollidera med 'stenarna', d} har man 'kraschat' och spelet avbryts!" 1120 Z=FNRekord 1130 IF Namn$="" THEN 1170 1140 ; CUR(22,0) CYA "Heter du " Namn$ " (J)? "; : A$=FNGet$(1) : IF W>127 RETURN -1 1150 IF A$="J" OR A$="j" OR A$="" THEN 1200 1160 IF A$="N" OR A$="n" THEN 1170 ELSE 1140 1170 ; CUR(22,0) SPACE$(80) CUR(22,0) CYA "Vad heter du? "; 1180 A$=FNGet$(20) : IF W>127 THEN RETURN -1 1190 IF A$<>"" THEN Namn$=A$ : ; SPACE$(20-LEN(Namn$)); ELSE 1170 1200 ; CUR(23,0) CYA "Vilken hastighet v{ljer du (1-5)? "; 1210 GET W$ : IF ASCII(W$)>127 RETURN -1 1220 Speed=INSTR(1,"12345",W$) : IF Speed=0 GOTO 1200 ELSE ; CHR$(8) W$; 1230 GET W$ : IF W$<>CHR$(13) GOTO 1220 1240 Tid=5-Speed : ; CHR$(12); 1250 Speedrek=CVT$%(RIGHT$(Rek$(Speed),31)) 1260 RETURN 0 1270 FNEND 1300 ! ----------------------------------------------------------------- 1310 DEF FNRekord 1320 ON ERROR GOTO 1430 1330 OPEN "MOTOKRAS.HSC" AS FILE 1 1340 ; CUR(14,0) GRN "G{llande rekordlista:"; 1350 ; CUR(15,0) GRN ULN "Hast Datum Namn Str{cka" NULN " "; 1360 FOR I1=1 TO 5 1370 GET #1,Rek$(I1) COUNT 32 1380 ; CUR(15+I1,0) GRN I1 ": " LEFT$(Rek$(I1),10) " " MID$(Rek$(I1),11,20) " "; 1390 IF CVT$%(RIGHT$(Rek$(I1),31))>0 THEN ; USING "##### m" CVT$%(RIGHT$(Rek$(I1),31)); 1400 NEXT I1 1410 CLOSE 1 1420 RETURN 0 1430 IF ERRCODE=21 THEN Z=FNCrerekfile : RESUME 1320 ELSE Ec=ERRCODE : RESUME 1440 1440 CLOSE 1 : RETURN Ec 1450 FNEND 1500 ! ------------------------------------------------------------------------ 1510 DEF FNSpelslut 1520 Z=FNKrasch 1530 IF Str{cka>CVT$%(RIGHT$(Rek$(Speed),31)) THEN 1550 1540 ; CUR(22,0) CHR$(7) RED "Nu kraschade du!! Men du k|rde i alla fall" Str{cka "meter!"; : RETURN 0 1550 FOR I1=1 TO 5 : ; CHR$(7,0,0,0); : NEXT I1 1560 FGPOINT 0,0,0 : FGFILL 255,239 1570 ; CUR(5,15) RED EL DBLE "NYTT REKORD!!" NRML " " : ; 1580 Rek$(Speed)=Dat$+Namn$+SPACE$(20-LEN(Namn$))+CVT%$(Str{cka) 1590 ; CUR(8,0) RED "Du k|rde" Str{cka "meter, vilket {r nytt rekord f|r hastigheten" Speed "!"; 1600 OPEN "MOTOKRAS.HSC" AS FILE 1 1610 POSIT #1,32*(Speed-1) 1620 PUT #1,Rek$(Speed) 1630 CLOSE 1 1640 ; CUR(14,0) GRN "G{llande rekordlista:"; 1650 ; CUR(15,0) GRN ULN "Hast Datum Namn Str{cka" NULN " "; 1660 FOR I1=1 TO 5 1670 ; CUR(15+I1,0) GRN I1 ": " LEFT$(Rek$(I1),10) " " MID$(Rek$(I1),11,20) " "; 1680 IF CVT$%(RIGHT$(Rek$(I1),31))>0 THEN ; USING "#### m" CVT$%(RIGHT$(Rek$(I1),31)); 1690 NEXT I1 1700 RETURN 0 1710 FNEND 1800 ! -------------------------------------------------------------------- 1810 DEF FNGet$(Maxlen) LOCAL W$=1,A$=80 1820 ! ---------------------------------------------------------------------! 1830 ! ! Funktionen h{mtar in en str{ng via GET-instruktionen. ! 1840 ! ! Max-l{ngden markeras med understrykningstecken. ! 1850 ! ! Radering med v{nsterpil {r m|jlig. ! 1860 ! ! Inmatning f|rbi max-l{ngden {r inte m|jlig. ! 1870 ! ! PF-tangent ger alltid }terhopp med ascii-koden i variabeln W. ! 1880 ! ---------------------------------------------------------------------! 1890 A$="" 1900 ; CYA STRING$(Maxlen,95);STRING$(Maxlen,8); 1910 GET W$ 1920 W=ASCII(W$) 1930 IF W=13 THEN RETURN A$ 1940 IF W=8 AND LEN(A$)>0 THEN A$=LEFT$(A$,LEN(A$)-1) : ; CYA CHR$(8);"_";CHR$(8); : GOTO 1910 1950 IF W<32 THEN GOTO 1910 1960 IF W>127 THEN RETURN "" 1970 IF LEN(A$)"I" Dat$=LEFT$(TIME$,10) : RETURN 0 2030 INPUT "Datum (]]]]-MM-DD)? "Dat$ 2040 IF LEN(Dat$)=10 AND MID$(Dat$,5,1)="-" AND MID$(Dat$,8,1)="-" ; CHR$(12); : RETURN 0 2050 ; CHR$(7) "Felaktigt datum! F|rs|k igen!" : ; : GOTO 2030 2060 FNEND 2100 ! ---------------------------------------------------------------------- 2110 DEF FNHinder LOCAL X3,Y3 2120 ; CHR$(12) CUR(10,35) MAG DBLE "V[NTA!"; 2130 FGPOINT 0,0,2 : FGLINE 0,238 : FGLINE 254,238 : FGLINE 254,0 : FGLINE 0,0 2140 FOR Y=10 TO 230 STEP 10 2150 FOR T=1 TO 3 2160 X3=240*RND+10 : Y3=Y+5*RND 2170 IF Y=10 THEN FGPOINT X3,Y3,4 ELSE FGPOINT X3,Y3,4 2180 FGFILL X3+3,Y3+3 2190 NEXT T 2200 NEXT Y 2210 ; CHR$(12); : FGCTL BLK+YEL+CYA+RED+GRN : RETURN 0 2220 FNEND 2300 ! ------------------------------------------------------------------- 2310 DEF FNMaxmin(Tal,Max,Min) 2320 IF Tal>Max RETURN Max 2330 IF Tal