SHIROのIchigoJam日記

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

Renda64

Ichigo64環境(IchigoJam+IchigoDot)用の連打ゲームです。
IchigoDotに標準添付の連打ゲームとは、動作が若干違います。

  • 起動するとタイトル画面が出ます。
  • ダウンカウント後、64個のドットが表示されます。ボタンを押して1個ずつ消してください。
  • 64個のドットを全部消すと、所要時間が0.1秒単位で表示されます。例えば12.3秒かかった場合は、数字で「2.3」と表示され、画面一番下の行で10の位のドットが1個点灯します。最大89.9秒まで表示されます。
  • ボタンを押すと、タイトル画面に戻ってリプレイされます。

作者の私はいい中年なので(^_^;)、通常のIchigoJamのタクトスイッチだとギリギリ9秒台です。
Ichigo64 Portableだとボタンが押しやすいので、7秒台が出せます。

IchigoDotでよく起きる、ボタンのチャタリング動作を確認したくて作りました。
が、連続消去されないようにプログラム内でボタンのON/OFFをちゃんと読んでいるせいか、そもそもBASICの速度がチャタリングに追いついていないのか、ドットが連続消去されることはありません。

ドットの消去動作は、高速化とコード短縮のため「MATLED PUSH」コマンドで消しています。(消すというより、1個少ない列を左へスクロールしています)。
IchigoDotの連打ゲームは左から右へドットが消えるのですが、このゲームでは逆に右から左へドットが消えます。

※10/17 Ver2.0

1ボタンでの操作は変わりませんが、画面表示をかなり変えました。

  • PUSH方向を「上」にしました。
  • ダウンカウント&終了後のタイム表示を、ローダーと同じ数字フォントにしました。
  • タイム表示で16進数表示をやめ、10秒以上かかった場合は10の位をドット数で表すようにしました。
1 '*Renda64
2 WAIT60:UART1:CLS:?
3 CLV:?"MATLED SHOW 455166002E743464":PLAY"L8RGREFG":WAIT120
4 LET [10],7,5,5,5,7
5 LET [15],1,1,1,1,1
6 LET [20],7,1,7,4,7
7 LET [25],7,1,7,1,7
8 LET [30],5,5,7,1,1
9 LET [35],7,4,7,1,7
10 LET [40],4,4,7,5,7
11 LET [45],7,1,1,1,1
12 LET [50],7,5,7,5,7
13 LET [55],7,5,7,1,1
14 FORN=3TO1STEP-1:GSB29:GSB31:BEEP20,10:WAIT50:NEXT
15 FORI=0TO7:?"MATLED PUSH 255":NEXT:BEEP20,30:CLT:P=#FF
16 FORY=0TO7:P=P<<1:FORX=0TO7
17 IF!BTN()GOTO17
18 BEEP10,5:?"MATLED PUSH ";P
19 IFBTN()GOTO19
20 NEXT:NEXT
21 T=TICK()/6:IFT>899T=899
22 N=T/100:[7]=0:IFN=0GOTO24
23 FORB=0TON-1:[7]=[7]+(1<<B):NEXT
24 N=(T%100)/10:GSB30
25 N=T%10:GSB29
26 [5]=8:GSB31
27 BEEP30,60:WAIT60
28 IFBTN()GOTO3 ELSEGOTO28
29 FORY=0TO4:[Y]=([Y]&#F8)+[10+N*5+Y]:NEXT:RTN
30 FORY=0TO4:[Y]=([10+N*5+Y]<<4)+([Y]&7):NEXT:RTN
31 ?"MATLED SHOW ";:FORB=0TO7:IF[B]<16?0;
32 ?HEX$([B]);:NEXT:?:RTN

Renda15(9/13追加)

通常のIchigoJam用に移植しました。
IchigoDotを持っていない方も、マトリックスLEDで遊ぶ雰囲気を味わってみてください。

1 '*Renda15
2 CLS:LET[0],0,#A7,#F4,#62,16,#F5,20,3:GSB31:PLAY"G8R8E8F8G8":WAIT120
3 CLV:FORN=3TO1STEP-1:GSB11:BEEP20,10:WAIT30:NEXT:WAIT20
4 O=#E9:LC0,0:FORY=0TO7:?CHR$(O,O,O,O,O,O,O,O):NEXT:BEEP20,30:CLT
5 LC0,0:FORY=0TO7:FORX=0TO7
6 IF!BTN()GOTO6
7 BEEP10,5:?CHR$(#E8);
8 IFBTN()GOTO8
9 NEXT:?:NEXT:N=TICK()/6:GSB12:BEEP30,60:WAIT60
10 IFBTN()GOTO2 ELSEGOTO10
11 D=4:M=N:GSB14:GSB31:RTN
12 IFN>159N=159
13 D=0:M=N/10:GSB14:D=4:M=N%10:GSB14:[3]=#80:GSB31:RTN
14 GSBLINE()+M+1:RTN
15 LET[D],#3E,#41,#3E,0:RTN
16 LET[D],#42,#7F,#40,0:RTN
17 LET[D],#62,#59,#46,0:RTN
18 LET[D],#22,#49,#36,0:RTN
19 LET[D],#0C,#0A,#7F,0:RTN
20 LET[D],#2F,#49,#31,0:RTN
21 LET[D],#3E,#49,#32,0:RTN
22 LET[D],#03,#71,#0F,0:RTN
23 LET[D],#36,#49,#36,0:RTN
24 LET[D],#26,#49,#3E,0:RTN
25 LET[D],#7E,#09,#7E,0:RTN
26 LET[D],#7F,#49,#36,0:RTN
27 LET[D],#3E,#41,#22,0:RTN
28 LET[D],#7F,#41,#3E,0:RTN
29 LET[D],#7F,#49,#41,0:RTN
30 LET[D],#7F,#09,#01,0:RTN
31 LC0,0:FORB=0TO7:FORC=0TO7:A=([C]&(1<<B))>0:?CHR$(#E8+A);:NEXT:?:NEXT:RTN