SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

IchigoRoulette

Five-Tenさん謹製のIchigoRoulette基板キットを、入手して作ってみました。
LEDが6個(OUT1~OUT6)、タクトスイッチが4個(IN1~IN4)載った拡張基板です。
f:id:shiro0922:20190819172736j:plain

いくつかプログラムを作ってみたので、以下に紹介します。

ルーレット

キット同封の説明書にルーレットのプログラムが載っているのですが、子ども向けにちょっと短くしました。
SW4(左下ボタン)で停止、SW3(右下ボタン)で再開します。

10 'ROULETTE
20 OUT 0
30 I=(I+1)%6
40 OUT I+1,1
50 BEEP
60 WAIT 5
70 IF IN(4) GOTO 20
80 IF IN(3) CONT
90 RUN

小惑星着陸

ルーレットの応用プログラムです。(前半はほぼ一緒なので、ルーレットを改造して作るといいでしょう)
起動すると、探査機が小惑星(黄色LED)の回りを回ります。減速ロケット(SW3、右下ボタン)と加速ロケット(SW4、左下ボタン)を操作して、探査機を小惑星に着陸させてください。黄色LEDで止まれば着陸成功、赤色LEDで止まってしまうと失敗です。
どれかのボタンを押すとリプレイします。

10 'LANDING
15 W=5
20 OUT 0
30 I=(I+1)%6
40 OUT I+1,1
50 BEEP
60 WAIT W
70 W=W+!IN(3)*5-!IN(4)*5
80 IF W<60 GOTO 20
90 BEEP 10+20*(I!=1),60
100 WAIT 60
110 IF IN()&15=15 CONT
120 RUN

サイモン(記憶ゲーム)

起動すると、LED4個(1,3,4,6)のうちのどれか1個が点灯します。
対応するボタンを押すと、次は出題が1個増えます。間違えないように順番にボタンを押してください。
回答をミスするとゲームオーバーです。どれかのボタンを押すとリプレイします。
なお、回答の際に複数のボタンを一度に押してもミスになります。正解を1個ずつ押してください。

10 '*SIMON
20 CLV:OUT 0
30 IF BTN() CONT
40 SRND TICK()+ANA(2)
50 [91]=1:[92]=3:[93]=4:[94]=6
60 [95]=7:[96]=14:[97]=13:[98]=11
70 WAIT 60
80 @QUEST
90 M=M+1
100 [M]=RND(4)+1
110 FOR I=1 TO M
120 N=[I]
130 OUT [90+N],1
140 GSB @PLAY
150 OUT [90+N],0
160 NEXT
170 @ANSWER
180 A=0
190 @ALOOP
200 N=0
210 FOR I=1 TO 4
220 IF IN()&15=[94+I] THEN N=I
230 NEXT
240 IF N=0 THEN GOTO @ALOOP
250 A=A+1
260 IF N<>[A] GOTO @END
270 OUT [90+N],1
280 GSB @PLAY
290 OUT [90+N],0
300 IF A<M GOTO @ALOOP
310 WAIT 60
320 GOTO @QUEST
330 @END
340 OUT 63
350 BEEP 30,120
360 WAIT 120
370 @RESTART
380 IF IN()&15=15 GOTO @RESTART ELSE RUN
390 @PLAY
400 IF N=1 PLAY "R32D"
410 IF N=2 PLAY "R32G"
420 IF N=3 PLAY "R32A"
430 IF N=4 PLAY "R32B"
440 WAIT 30
450 RTN

もぐらたたき

起動すると、LED4個(1,3,4,6)のうちのどれか1個が点灯するので、対応するボタンを押して、もぐらを叩いてください。
30秒間叩くとゲームが終了して、叩いたスコアがLEDで2進数表示されます。どれかのボタンを押すとリプレイします。
なお、ズルしてボタンを押しっぱなしにすると、お手つきになってスコアが減ります。

10 '*Mogura Tataki
20 CLV
30 IF BTN() CONT
40 SRND TICK()+ANA(2)
50 [91]=1:[92]=3:[93]=4:[94]=6
60 [95]=7:[96]=14:[97]=13:[98]=11
70 L=1800:N=80
80 WAIT 60
90 CLT
100 @LOOP
110 OUT 0
120 WAIT 10
130 @MRND
140 R=RND(4)+1
150 IF R=M GOTO @MRND
160 M=R
170 OUT [90+M],1
180 BEEP 30
190 W=TICK()/N
200 @TATAKU
210 IF IN()&15=[94+M] GOTO @HIT
220 IF TICK()/N=W GOTO @TATAKU
230 IF IN()&15!=[94+M] S=S-(S>0)
240 IF TICK()<L GOTO @LOOP
250 OUT 0
260 BEEP 30,60
270 WAIT 60
280 OUT S
290 IF IN()&15=15 CONT
300 RUN
310 @HIT
320 OUT 0
330 BEEP
340 S=(S+1)%64
350 N=N-2:IF N<=0 N=1
360 WAIT 10
370 GOTO @LOOP