MOB SET/Reaktionstest
Aus C64-Wiki
Zur Navigation springenZur Suche springenBeispiel 2 zu MOB SET:
10 los! 20 REPEAT : n4=0: ; Zähler für Sprite-Wechsel bildschirm: anzeige 30 REPEAT : n4=n4+1: wahl: ; Sprite-Form und -Position setzen: ; auswählen und anzeigen warte: ; auf Reaktion warten anzeige: ; Ergebnis anzeigen UNTIL r=1 OR en 40 IF r<>1 THEN treffer 50 aus: n3=n3+1: ; Durchgänge zählen (à 1 Minute) en=0 60 UNTIL r=1 OR (n3=3) ; nach 3 Durchgängen ist Schluss 70 anzeige: PRINT "{home}" 80 END 1000 PROC los! ; Variablen-Initialisierung 1010 b0=14: b1=13: b2=15: m=0: ; Spritenummer ms=0: ; Anzahl der Fehler des Getesteten n1=0: ; Anzahl der Treffer n2=0: n3=0: n4=0: en=0: ; Flags first=-1: an=-1 1020 zl=12: sp=19: x=0: y=122 1030 r$="{C=a}{Sh*}{C=s}{C=-} {C=-}{C=z}{Sh*}{C=x}": zt=3: ; schnellste Reaktionszeit z0=0: z1=-1 1040 DIM mo(2),fa(3),sp(3),zl(3) 1045 fa(0)=6 1050 mo(1)=b0: fa(1)=5: ; Spritefarben sp(1)=7: ; Spritepositionen zl(1)=9 1055 mo(2)=b1: fa(2)=14: sp(2)=17: zl(2)=9 1060 fa(3)=10: sp(3)=27: zl(3)=9: PRINT "{CTRL n}{CRTL h}" ; Kleinschrift fixieren 1070 COLOUR 0,0,fa(0): sprites: ti$="000000": t0=0: ; Zeitnahme-Variablen t1=0 1080 END PROC 1100 PROC setzen 1110 MOB SET m,mo(nr),fa(f),0,0 1115 x=sp(z)*8+24 1120 MMOB m,x,y,x,y,3,0 1130 END PROC 1300 PROC aus 1310 MOB OFF m 1320 END PROC 1400 PROC zufall 1410 z=INT(RND(1)*3)+1 1420 END PROC 1500 PROC wahl 1510 zufall: f=z 1520 zufall: nr=z-1: IF nr<1 THEN CALL wahl 1530 zufall: t0=time 1540 END PROC 1600 PROC bildschirm 1605 aus: INSERT r$,0,0,40,25,fa(0) 1610 PRINT AT(0,2)"{C=q}"DUP("{Sh*}",38)"{C=w}" 1615 PRINT AT(0,20)"{C=q}"DUP("{Sh*}",38)"{C=w}" 1620 PRINT AT(0,22)"{C=q}"DUP("{Sh*}",38)"{C=w}" 1625 COLOUR ,12: PRINT AT(6,1)"R E A K T I O N S - T E S T" 1630 INSERT r$,8,6,7,7,fa(0) 1635 INSERT r$,8,16,7,7,fa(0) 1640 INSERT r$,8,26,7,7,fa(0) 1645 COLOUR ,fa(1): PRINT AT(1,6)"Den roten Ball im rotem Kasten treffen" 1650 COLOUR ,fa(0) 1655 zufall: INSERT r$,zl(z)-1,sp(z)-1,7,7,fa(3): ka=sp(z) 1660 PRINT AT(4,16)"Schusstaste ist die Taste : ";: COLOUR ,fa(3): PRINT "F7" 1665 COLOUR ,fa(0) 1670 PRINT AT(4,18)"Vorzeitig Test beenden mit : ";: COLOUR ,fa(3): PRINT "F1" 1675 COLOUR ,fa(0) 1680 IF an THEN DO 1682 COLOUR ,fa(3): ; Dieser DO-Abschnitt nur beim allerersten Mal PRINT AT(12,21)"Starten mit F7": besser: m=1: nr=1: f=3: setzen 1684 REPEAT : r=INKEY : UNTIL r=7 1686 PRINT AT(12,21)DUP(" ",14): COLOUR ,fa(0): an=0: besser: besser 1688 DOne 1690 END PROC 1700 PROC warte 1710 fl=0: t1=0: re=0: IF sp(z)=ka THEN fl=1 ; Flag: Sprite im roten Kasten? 1720 FOR i=1 TO 100 1730 r=INKEY : ; Welche F-Taste gedrückt? re=time: ; Zeitnahme für "verpasst" IF fl THEN IF r=7 THEN IF f=3 THEN IF nr=1 THEN t1=re: treffer: ; Treffer wenn Kasten, Taste, Farbe und Sprite-Form richtig re=0 1735 IF r THEN i=100 1740 NEXT : IF r=1 THEN re=0: ; F1 gedrückt (vorzeitig Beenden) END PROC 1745 IF r THEN IF fl=0 THEN schlecht ; falscher Kasten 1750 IF f<>3 THEN t1=0: ; falsche Farbe re=0: IF r THEN schlecht 1755 IF nr<>1 THEN t1=0: ; falsche Sprite-Form re=0: IF r THEN schlecht 1760 IF re THEN IF fl=0 THEN re=0 ; Zeit bei falschem Kasten zurücksetzen 1770 END PROC 1800 PROC schlecht ; tiefer Ton 1810 aus: VOL 15: ENVELOPE 1,1,5,15,15: WAVE 1,00100001: MUSIC 6,"{clr}1c3{F2}": PLAY 1 1820 WAVE 1,00100000 VOL 0: 1825 ms=ms+1 1830 END PROC 1900 PROC gut ; Fanfare 1910 aus: VOL 15: ENVELOPE 1,1,5,15,15: WAVE 1,00100001: MUSIC 8,"{clr}1a4{F1}{clr}ga4{F1}{clr}1b4{F1}{clr}gb4{F1}{clr}1c5{F2}": PLAY 1 1920 WAVE 1,00100000: VOL 0 1930 END PROC 1950 PROC besser ; hohe Töne anhängen 1960 aus: VOL 15: ENVELOPE 1,1,5,15,15: WAVE 1,00100001: MUSIC 8,"{clr}1a4{F1}{clr}ga4{F1}{clr}1d5{F2}": PLAY 1 1920 WAVE 1,00100000: VOL 0 1980 END PROC 2000 PROC sprites ; Spriteform definieren 2010 DESIGN 0,mo(1)*64 2020 @........bbbbb........... 2021 @.....bbbbbbbbbbb........ 2022 @....bbbbbbbbbbbbb....... 2023 @...bbbbbbbbbbbbbbb...... 2024 @..bbbbbbbbbbbbbbbbb..... 2025 @..bbbbbbbbbbbbbbbbb..... 2026 @.bbbbbbbbbbbbbbbbbbb.... 2027 @.bbbbbbbbbbbbbbbbbbb.... 2028 @bbbbbbbbbbbbbbbbbbbbb... 2029 @bbbbbbbbbbbbbbbbbbbbb... 2030 @bbbbbbbbbbbbbbbbbbbbb... 2031 @bbbbbbbbbbbbbbbbbbbbb... 2032 @bbbbbbbbbbbbbbbbbbbbb... 2033 @.bbbbbbbbbbbbbbbbbbb.... 2034 @.bbbbbbbbbbbbbbbbbbb.... 2035 @..bbbbbbbbbbbbbbbbb..... 2036 @..bbbbbbbbbbbbbbbbb..... 2037 @...bbbbbbbbbbbbbbb...... 2038 @....bbbbbbbbbbbbb....... 2039 @.....bbbbbbbbbbb........ 2040 @........bbbbb........... 2050 DESIGN 0,mo(2)*64 2060 @..........b............. 2061 @.........bbb............ 2062 @........bbbbb........... 2063 @.......bbbbbbb.......... 2064 @......bbbbbbbbb......... 2065 @.....bbbbbbbbbbb........ 2066 @....bbbbbbbbbbbbb....... 2067 @...bbbbbbbbbbbbbbb...... 2068 @..bbbbbbbbbbbbbbbbb..... 2069 @.bbbbbbbbbbbbbbbbbbb.... 2070 @bbbbbbbbbbbbbbbbbbbbb... 2071 @.bbbbbbbbbbbbbbbbbbb.... 2072 @..bbbbbbbbbbbbbbbbb..... 2073 @...bbbbbbbbbbbbbbb...... 2074 @....bbbbbbbbbbbbb....... 2075 @.....bbbbbbbbbbb........ 2076 @......bbbbbbbbb......... 2077 @.......bbbbbbb.......... 2078 @........bbbbb........... 2079 @.........bbb............ 2080 @..........b............. 2090 END PROC 2100 PROC anzeige ; Ergebnisse 2110 COLOUR ,12: PRINT AT(19,21)"";: ; Anzahl der Fehler USE "F=##",ms; 2115 PRINT AT(27,21)MID$(time$,4,1)":"RIGHT$(time$,2)" m"; 2120 USE " (###)",n4: ; Anzeige der Laufdauer IF re THEN vf=vf+1: ; Anzahl der verpassten richtigen Kombinationen schlecht: ms=ms-1 2125 z0=VAL(MID$(time$,4,1)): IF z1<>z0 THEN z1=z0: en=1 2130 PRINT AT(1,23)"";: USE "Treffer=##:verpasst=##:Bestzeit:#,## s",n1,vf,zt 2135 COLOUR ,fa(0): IF first THEN en=0: first=0 2140 END PROC 2200 PROC treffer 2210 IF t1=0 THEN END PROC 2220 z=(t1-t0)/60-.38 2230 PRINT AT(1,21)"Zeit:";: USE "###,## s",z 2240 IF z<.01 THEN z=zt 2250 gut 2260 n1=n1+1: IF z<zt THEN zt=z: ; Bestzeit merken IF n1>1 THEN besser 2270 END PROC