1

次のようなコードがあります。

            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."

これはかなり面倒に思えます。これをもっと簡潔に書き直す方法はありますか?このコードは、音楽をスキップする方法をユーザーに提供しようとしていると思います。

4

2 に答える 2

2

うわー、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."

ところで、文字列を短いビットに分割して、ユーザー入力をより頻繁にチェックすることができます。

于 2012-11-05T16:29:42.273 に答える