SHIROのIchigoJam日記

IchigoJamの電子工作とプログラミングをメインに

IchigoJamミュージック

音楽をテーマにしたミニプログラム4本を掲載したペーパー(PDF)です。
「はじめのいっぽ/ミニゲームス」に続く、子ども向けのIchigoJam入門課題として作りました。
PLAY命令の文字変数演奏機能を使っていますので、ファームウェア1.2b3以降が必要です。
ペーパーおよびプログラムは、CC BYライセンスとします。プログラミング教室などでご自由にお使いください。

※7/12更新 MMLのバグ修正

※7/30更新

  • ピアノ、オルゴール、きおくゲーム
    • プログラム先頭部分を共通にしました。スクリーンエディットすれば入力の手間が省けます。
  • おとゲーム
    • タイトルを変更。音の動きが速くてゲームが難しかったので、遅くしました。


PDFファイルはこちらからダウンロードしてください。

ピアノ

「1〜8のすうじでえんそう!」
1〜8の数字キーを押すと、ド〜1オクターブ上のドを演奏します。

1 '*Piano* CC BY Copyright (c) 2016 Shiro SAITO
10 CLV:CLS
20 ?"ドレ ミ ファソ ラ シ ド"
30 ?"1 2 3 4 5 6 7 8"
40 P="C ;D ;E ;F ;G ;A ;B ;<C"
50 K=INKEY():IF !K GOTO 50
60 PLAY P+(K-49)*3
70 GOTO 50

オルゴール

「すうじでメロディをいれてエンターをおすと、そのとおりになるよ!」
1〜8の数字キーをいくつか入力してEnterキーを押すと、そのメロディを演奏します。
10〜50行はピアノと同じなので、スクリーンエディットすると入力の手間が省けます。

1 '*Music Box* CC BY Copyright (c) 2016 Shiro SAITO
10 CLV:CLS
20 ?"ドレ ミ ファソ ラ シ ド"
30 ?"1 2 3 4 5 6 7 8"
40 P="C ;D ;E ;F ;G ;A ;B ;<C"
50 K=INKEY():IF !K GOTO 50
60 IF K=10 GOTO 90
70 L=L+1:K=K-48:[L]=K:?K;
80 GSB 120:GOTO 50
90 FOR K=1 TO L
100 GSB 120
110 NEXT:RUN
120 PLAY P+([K]-1)*3:WAIT 30:RTN

きおくゲーム

「おとがなったじゅんばんにすうじをおせ!」
いわゆるサイモンです。最初に1つの音を出題されるので、そのとおりにキーを押します。
音が1個ずつ増えて出題されるので、その順番にキーを押します。
押し間違えると、正確に答えられた音の数を表示して終了します。
10〜40行はピアノやオルゴールと同じなので、スクリーンエディットすると入力の手間が省けます。

1 '*Simon* CC BY Copyright (c) 2016 Shiro SAITO
10 CLV:CLS
20 ?"ドレ ミ ファソ ラ シ ド"
30 ?"1 2 3 4 5 6 7 8"
40 P="C ;D ;E ;F ;G ;A ;B ;<C"
50 WAIT 30:L=L+1:[L]=RND(8)+1
60 FOR I=1 TO L:GSB 120:NEXT:I=0
70 K=INKEY():IF !K GOTO 70
80 I=I+1:K=K-48
90 IF K<>[I] BEEP:LC 0,2:?"SCORE=";L-1:END
100 GSB 120:IF I<L GOTO 70
110 GOTO 50
120 LC ([I]-1)*2,2:?"*"
130 PLAY P+([I]-1)*3:WAIT 30
140 LC ([I]-1)*2,2:?" ":RTN

おとゲーム

「いちばん上にきたタイミングで、すうじをおせ!」
いわゆる音ゲーです。画面下から1〜4の数字が上がってくるので、一番上の「<」に来たタイミングで数字キーを押してください。スコアが加算されます。
制限時間の1分が経つと、ゲームが終了します。

1 '*Rhythm* CC BY Copyright (c) 2016 Shiro SAITO
10 CLV:CLS:CLT
20 P="C ;E ;G ;<C"
30 M=RND(20)+1
40 LC M-1,23:IF M<5 ?M ELSE ?
50 LC 4,0:?"< SCORE=";S
60 FOR T=1 TO 40
70 K=INKEY()
80 IF K>0 AND SCR(K-49,0)=K GSB 120
90 NEXT
100 IF TICK()/60<60 GOTO 30
110 LC 0,1:END
120 PLAY P+(K-49)*3:S=S+1
130 LC K-49,0:?" ":RTN