具有按键指示功能的颤音演奏程序

Author: 杨 辉 Date: 1993-06-04

        以下程序演奏的曲名为《莫斯科郊外的晚上》。
        N=39:A=15:B=.2617992#
        DIM  F(N,24),L(N),O(36),Q(N)
        SCREEN  0,1:WIDTH  40:COLOR  15,1,1:CLS
        COLOR  15,0
        FOR  I=0  TO  15:FOR  J=0  TO  8
        LOCATE  5+J,5+I*2:PRINT  CHR$(219);CHR$(221);
        NEXT:NEXT
        FOR  I=0  TO  12:FOR  J=0  TO  4
        IF  I=2  OR  I=6  OR  I=9  OR  I=13  THEN  GOTO  QQ
        LOCATE  5+J,8+I*2:PRINT  CHR$(32);CHR$(222);
        QQ:NEXT:NEXT
        FOR  J=0  TO  9
        LOCATE  4+J,4:COLOR  4,0:PRINT  CHR$(221);
        LOCATE  4+J,36:COLOR  15,0:PRINT  CHR$(221);
        COLOR  4,1:PRINT  CHR$(221);NEXT
        COLOR  4,1:LOCATE  4,4
        FOR  I=0  TO  32:PRINT  CHR$(219);:NEXT
        PRINT  CHR$(221);:LOCATE  13,4
        FOR  I=0  TO  32:PRINT  CHR$(219);:NEXT
        PRINT  CHR$(221);:COLOR  0,7
        O(0)=100:O(11)=5:O(12)=7:O(13)=8:O(14)
        =9
        O(15)=10:O(16)=11:O(17)=13:O(18)=14
        O(19)=15:O(20)=16:O(21)=17:O(22)=18
        O(23)=19:O(24)=21:O(25)=22:O(26)=23
        O(27)=24:O(28)=25:O(29)=27:O(30)=28
        O(31)=29:O(32)=30:O(33)=31:O(34)=32
        O(35)=33:O(36)=35
        FOR  I=1  TO  N:READ  J,L(I):Q(I)=O(J)
        F(I,0)=36.8*(2^((J+22)/12))
        FOR  K=1  TO  24:F(I,K)=F(I,0)+A*SIN(B*K)
        NEXT:NEXT
        FOR  I=1  TO  N
        IF  Q(I)=100  THEN  SOUND  32767,L(I):GOTO  JJ
        IF  Q(I)=0  THEN  Q(I)=1:GOTO  PP
        IF  SCREEN(5,Q(I))<>32THEN  COLOR  0,7
        LOCATE  11,Q(I):PRINT  CHR$(14);
        COLOR  15,0:GOTO  PP
        COLOR  15,0:LOCATE  7,Q(I):PRINT  CHR$(14):
        COLOR  0,7
        PP:SOUND  F(I,0),.2*L(I)
        FOR  P=1  TO  L(I).8/3.6
        FOR  J=1  TO  24;SOUND  F(I,J),.15
        NEXT:NEXT
        SOUND  32767,1.5
        IF  SCREEN(5,Q(I))=32  THEN  COLOR  15,0
        LOCATE  7,Q(I):PRINT  CHR$(32);:GOTO  JJ
        COLOR  15,0:LOCATE  11,Q(I):PRINT  CHR$(219);
        JJ:NEXT
        KK:IF  INKEY$<>""THEN  GOTO  KK
        END
        DATA  9,4.5,12,4.5,16,4.5,12,4.5,14,9,12,4.5
        DATA  11,4.5,16,9,14,9,9,18,12,4.5,16,4.5
        DATA  19,4.5,19,4.5,21,9,19,4.5,17,4.5,16,18
        DATA  18,9,20,9,23,4.5,21,4.5,16,9,0,4.5,11,9
        DATA  9,4.5,16,4.5,14,4.5,17,9,17,4.5,0,4.5
        DATA  19,4.5,17,4.5,16,9,14,4.5,12,4.5,16,9
        DATA  14,9,9,18