我的代码看起来像这样:
IF INKEY$ <> "" THEN CALL notitle
PLAY "MST170o1e8o0b8o1e8"
IF INKEY$ <> "" THEN CALL notitle
PLAY "e8e4f#8g4f#8"
IF INKEY$ <> "" THEN CALL notitle
PLAY "g4e8d2o0b8o1d2 "
IF INKEY$ <> "" THEN CALL notitle
PLAY "o1e8o0b8o1e8e8e4f#8g4f#8g4a8b2g8b2MLg16a16"
IF INKEY$ <> "" THEN CALL notitle
PLAY "MSb4b8b8a8g8a4a8a4f#8g4g8MLg8f#8"
IF INKEY$ <> "" THEN CALL notitle
PLAY "MSe8f#4f#8f#8g8a8b4.a4.g4.f#4.o0b8o1e8e8e4d8e2."这看起来相当乏味。有没有一种方法可以重写得更简洁?我相信代码试图为用户提供一种跳过音乐的方法。
发布于 2012-11-06 00:29:42
哇,2012年的QBasic编程吧?那会是一个什么样的项目呢?
无论如何,我会将音乐字符串放入一个数组中,并在检查INKEY$时遍历该数组。我没有安装QB,所以我不确定这是否可以工作,但如下所示:
DIM mymusic$(6)
FOR i = 1 TO 6
READ S$
mymusic$(i) = S$
NEXT i
' loop while user doesn't press any key
i = 0
WHILE INKEY$ = ""
' i will be 0..5 so play i+1 to get 1..6
PLAY mymusic$(i+1)
' use MOD to loop i through 0..5
i = (i + 1) MOD 6
WEND
' user pressed a key
CALL notitle
' music strings in data segment
DATA "MST170o1e8o0b8o1e8"
DATA "e8e4f#8g4f#8"
DATA "g4e8d2o0b8o1d2"
DATA "o1e8o0b8o1e8e8e4f#8g4f#8g4a8b2g8b2MLg16a16"
DATA "MSb4b8b8a8g8a4a8a4f#8g4g8MLg8f#8"
DATA "MSe8f#4f#8f#8g8a8b4.a4.g4.f#4.o0b8o1e8e8e4d8e2."顺便说一句,你可以把字符串拆分成更短的部分,这样它就可以更频繁地检查用户输入。
发布于 2016-12-18 12:59:07
这段代码在Qbasic中循环播放来自数据的音乐:
' loop until keypress
i = 1
WHILE INKEY$ = ""
RESTORE
FOR j = 1 TO i
READ p$
NEXT
PLAY p$
i = i + 1
IF i > 6 THEN i = 1
WEND
' user pressed a key
CALL notitle
' music strings in data segment
DATA "MST170o1e8o0b8o1e8"
DATA "e8e4f#8g4f#8"
DATA "g4e8d2o0b8o1d2"
DATA "o1e8o0b8o1e8e8e4f#8g4f#8g4a8b2g8b2MLg16a16"
DATA "MSb4b8b8a8g8a4a8a4f#8g4g8MLg8f#8"
DATA "MSe8f#4f#8f#8g8a8b4.a4.g4.f#4.o0b8o1e8e8e4d8e2."https://stackoverflow.com/questions/13130866
复制相似问题