书城科普读物探索未知丛书-计算机王国
45421700000071

第71章 怎样用BASIC语言演奏音乐

下面是用BASIC语言编写的音乐程序。

10REM CEC—I音乐程序

20READ X,Y

30IF X<0 THEN END

40MUSIC X,Y

50GOTO 20

60DATA 192,70,172,70,152,70,144,70,128,70,114,70,102,70,96,70

500DATA-1,-1

这个程序可以演奏C调的一个八度音程。

20语句行的定义符READ,叫做读数。60语句行的定义符DATA,叫做置数,这两条语句结合在一起是给变量提供数据的第三种方法(前两种分别是LET和INPUT)。这种方法特别适宜给变量提供批量数据。

DATA语句为READ语句准备所需要的数据,READ语句将这些数据依次赋给变量。DATA语句是非执行语句,它可以放在程序的任何地方。一般习惯将DATA语句放在其它语句的后面,END语句之前。

本程序第一次执行20语句后,X的值是192,Y的值是70。

40语句行的定义符MUSIC,是中华学习机特有的定音语句。这个语句行的意思是,按照X决定的音高,Y决定的音长响一声。

声音有4个特性:①音高(频率、音调)②音长(声音持续的时间)③音量(响度)④音色(音品,由谐音决定)。通过程序,一般只能控制计算机喇叭的音高和音长,不能控制音量和音色。

因此,MUSIC后面的语句体只有X,Y两个数据,X中存决定音高的音阶码,Y中存音长码。

下面是C调的音阶代码表。

音符56

7123456代码255228204192

172152

144128114

音符71·2·3·4·5·6·7·0代码10

2968676726457511(代码1表示休止符)

下面是音长代码表(参考值)

节拍1/4拍1/2拍1拍2拍

代码3070160225

当程序第一次执行20语句时,将奏出C调“1”,并延续半拍。

执行50语句行,使程序转回20语句行,再次读X,Y的值。这时将读到DATA语句中的第2组数据,分别把172和70赋给X,Y。再次执行40语句时,将按照172决定的音高、70决定的音长响一声,也就是奏出“2”,并延续半拍。如此反复进行,直到读到两个—1,因为30语句的条件被满足,所以程序结束。

怎样用BASIC语言绘图

绘图主要有两种方式,一种叫低分辨率绘图,另一种叫高分辨率绘图。下面各举一例,并作说明。

程序1

10REM流水(低分辨率绘图)

20GR

30COLOR=15

40FOR S=1 TO 6

50READ X1,X2,Y

60HLIN X1,X2,AT Y

70NEXT S

80DATA 4,14,13,15,31,4,15,29,6,15,19,10,14,17,12,34,39

90FOR S=1 TO 8

100READ Y1,Y2,X

110VLIN Y1,Y2,AT X

120NEXT S

130DATA 2,13,4,4,2,4,14,6,10,14,6,34,29,4,34,31,30,39,9,30,39,35,10,13,19

140FOR S=1 TO 5

150READ X,Y

160PLOT X,Y

170NEXT S

180DATA,3,2,15,2,17,13,8,30,36,30

190FOR M=1 TO 14

200COLOR=M

210FOR I=12 TO 6 STEP-1

220HLIN 5,13 AT

230NEXT I

240FOR I=38 TO 35 STEP-1

250HLIN 10,34 AT I

260NEXT I

270FOR I=34 TO 32 STEP-1

280HLIN 10,28 AT I

290NEXT I

300FOR I=34 TO 32 STEP-1

310HLIN 32,34 AT I

320NEXT I

330HLIN 14,18 AT 11

340VLIN 32,34 AT 30

350X=18:Y=12:XU=0:YU=3

360NX=X+XU:NY=Y+YU

370IF NY>32 THEN NX=30:NY=32:XU=0:YU=-3

380IF NY<7 THEN XU=-1:YU=0

390COLOR 0:PLOT=14,5

400IF NX<14 THEN 450

410COLOR=M:PLOT NX,NY420COLOR=0:PLOT X,Y430X=NX:Y=NY

440GOTO 360

450NEXT M

460END

这个程序比较长,建议:

一、先把低分辨率作图的基本命令搞清楚。

二、分段输入这个程序,每输入一段,运行一下程序,体会这段程序的功能并学习它的编程方法。这样化整为零学习起来就不难了。

首先,介绍低分辨率绘图用到的基本命令。

一、GR(见20语句行)

这个命令使屏幕进入低分辨率图形和文本显示的混合状态。在屏幕的底部留出四行作为文本显示区。文本区之上为图形显示区,可以显示40行(0—39)、40列(0—39)小色块。

二、COLOR(见30语句行)

COLOR语句的功能是设定颜色。COLOR的值可以取0—15(若超过15,则按16的模处理,但不得超过255),分别代表16种不同的颜色。

下面是颜色的代码表

012345黑色品红深蓝紫色深绿深灰

67891011天蓝淡蓝褐色橙色灰色粉红12131415绿色黄色湖蓝白色

三、PLOT(见160语句行)

PLOT语句的功能是,在屏幕(X,Y)坐标决定的位置上绘出一个小色块。这里X是横坐标,Y是纵坐标。

四、HLIN(见60语句行)

HLIN语句的功能是,在屏幕上绘出一条从点(X1,Y)到点(X2,Y)的水平色条。

五、VLIN(见110语句行)

VLIN语句的功能是,在屏幕上绘出一条从点(X,Y1)到点(X,Y2)的竖直色条。

以上这些定义符在本程序中都用到了,可以分段运行,体会它们的作用。

第一段10——80语句

第二段90——130语句

第三段140——180语句

第四段190——450语句。本段还可以分为几个小段(应先输入450语句)

①200——230语句

②240——260语句

③270——340语句

④350——440语句

如果在400和430语句行之间加上以下两个语句行,你将不仅看到流水的画面,而且能听到水滴的声音。

424LF NY=32 AND YU=-3 THEN POKE 6,250:POKE 7,50:CALL 800

428IF YU<>0 THEN POKE 6,NY+30:POKE 7,30:CALL 800

程序2

10REM风景(高分辨率绘图)

20HGR2

30HCOLOR=3

40HPLOT 10,190 TO 270,190

50HPLOT 50,190,TO 50,140 TO,20,140 TO 45,100 TO 25,100 TO 50,60 TO 30

,60 TO 55,30

60HPLOT TO 80,60 TO 60,60 TO85,100 TO 65,100 TO 90,140 TO 64,140 TO 60,90

70READ X1,Y1,X2,Y2

80IF X1=-1 THEN END

90HPLOT X1,Y1 TO X2,Y2

100GOTO 70

110DATA 150,90,230,90,150,90,125,130,125,130,255,130,230,90,205

,130,230,90,255,130

120DATA 130,130,130,190,200,130,200,190,250,130,250,190

130DATA 160,150,160,190,160,150,180,150,180,190

140DATA 200,140,220,155,220,140,235,140,235,155,220,155,235,155

200DATA-1,-1,-1,-1

运行本程序将在屏幕上出现一棵树和一座小房子。下面对程序2做简要说明。

20语句行的定义符HGR2,其功能是置屏幕为高分辨率第二页绘图状态。在比状态下屏幕可以显示192行(0——191),280列(0——279)个小色点。

30语句行的定义符HCOLOR是设定颜色,颜色码规定如下:0123456

黑绿紫白黑红蓝白

40、50、60、90语句行中的HPLOT,是高分辨率作图语句的定义符。它有三种格式:①HPLOT X1,Y1

②HPLOT TO X1,Y2

③HPLOT X1,Y1 TO X2,Y2 TO X3,Y3……

格式①是在(X1,Y1)坐标处画一个点。格式②是从已绘图形最后一点到点(X2,Y2)绘出一条线。格式③绘出从点(X1,Y1)到点(X2,Y2)到点(X3,Y3)……一组线段。

建议分段运行程序2:

第1段10——40语句行,画出地平线

第2段50—60语句行,画出一棵树,其中,50语句行画出树的左半部分,60语句行画出树的右半部分。

第3段70——200语句行,画出小房子。输入本段程序时,可以把70——100及200语句行先输进去。然后每输入一个DATA语句,就运行一下程序,看看这组数据是画小房子的哪一部分的。这样做将有助于读懂程序。