SHIROのIchigoJam日記

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

連打OLED

IchigoDotでおなじみの「連打ゲーム」の有機EL版です。もちろんNameDakeでも遊べます(^_^)

  • 起動すると「3、2、1、」とダウンカウントされて、ゲームが始まります。
  • ボタンを連打して、64個のドットを消してください。
  • 全て消すと所要タイムが表示されます。ボタンを押すとリプレイします。

OLEDサブルーチンは、国野さんのサイトに掲載されていた高速・横画面表示版を使っています。が、表示の高速化のためにエラーチェックなど一部の処理を省いています。ちょっと行儀の悪いプログラムです。

※7/5修正:処理を変更して若干高速化。

1 '*Renda OLED
2 CLS:GSB80:FORY=0TO7:LC0,Y
3 FORX=0TO7:?CHR$(233);:NEXT
4 NEXT:GSB91:WAIT30
5 LC9,0:FORT=3TO1STEP-1:?T;:BEEP:GSB91:WAIT40:NEXT
6 LC9,1:?"START!":BEEP10,30:GSB91:CLT
7 FORY=0TO7:LC0,Y:FORX=0TO7
8 IF!BTN()CONT
9 IFBTN()CONT
10 ?".";:BEEP:GSB91
11 NEXT:NEXT:BEEP20,30:T=TICK()
12 LC9,2:?T/60;".";T%60/6:GSB91:WAIT60
13 IF!BTN()CONT
14 RUN
80 'INIT
81 let[0],#4000,33,#227F,#700,#B5F0,#1840,#230B,#21B,#18C9,#4694,#2410
82 let[11],#7803,#DB,#18D2,#2708,#2300,#2507,#5D56,#40FE,#415B,#3D01
83 let[21],#D2FA,#700B,#3101,#3F01,#D1F4,#3001,#4662,#3C01,#D1EC,#BDF0
84 let[90],#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
85 ifi2cw(60,#800,1,#8B4,20)?"E"
86 video3:copy#A00,#800,62:clv
90 'OUT
91 for[98]=0to7:i=usr(#A08,#900+[98]*16)|i2cw(60,#A01,1,#B00,128):next:rtn
連打OLEDに合わせて、NameDakeのメインプログラムも変更。名前を表示した状態でボタンを1秒以上長押しすると、連打ゲームが遊べます。SAVEスロット配置は以下のようにしてください。

  • スロット0:NameDake初期化(自動起動
  • スロット1:NameDakeメイン
  • スロット2:連打OLED

10 '*NameDake Main
20 CLS:A=#900
30 LET [0],0,0,12,12,13,12,4,0,8,12,13,12,12,12,13,12
40 LET [16],0,0,0,9,8,1,0,0,0,0,1,0,0,0,1,0
50 LET [32],0,0,0,8,9,0,0,0,0,7,3,5,0,13,13,5
60 LET [48],12,12,3,1,0,3,9,12,4,13,12,5,0,12,13,4
70 GSB 200
80 LET [0],0,10,2,3,3,3,10,0,0,5,0,5,8,6,2,12
90 LET [16],0,10,3,3,7,3,11,0,0,7,3,5,2,4,5,6
100 LET [32],0,10,8,1,5,9,10,0,0,5,0,5,0,6,7,4
110 LET [48],0,1,0,0,1,0,2,0,2,0,0,1,2,0,1,2
120 GSB 200
130 GSB 900
140 VIDEO 0,30
150 IF !BTN() CONT
160 CLT
170 IF BTN() CONT
180 IF TICK()<2 GOTO 150
190 BEEP:VIDEO 1:LRUN FILE()+1
200 'Prt Half
210 FOR Y=0 TO 3
220 FOR X=0 TO 15
230 POKE A,[Y*16+X]+#80
240 A=A+1
250 NEXT
260 A=A+16
270 NEXT
280 RTN
900 'OLED OUT
910 forP=#7D2to#7D7:ifi2cw(60,#7D0,1,P,1)?"E:ADR";hex$(P)
915 next
920 forY=0to7:D=usr(#79A,#900+Y*32):ifi2cw(60,#7D1,1,#700,128)?"E"
930 next
940 rtn