SHIROのIchigoJam日記

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

LightsOut

FacebookIchigoJam-FANグループで話題に出たパズルゲーム「LightsOut」をリメイクしたものを掲載します。
通常のIchigoJam版と、Ichigo64版(IchigoJam+IchigoDot+ジョイスティック)の2種類です。

IchigoJam

起動すると、5×5=25個のライトがランダムにON/OFFされて表示されます。
反転するカーソルをカーソルキーで上下左右に動かして、スペースキーを押すと、そのライトおよび上下左右に隣接するライトが反転(ON→OFF、OFF→ON)します。
全てのライトをOFFにすると、そのステージはクリアとなり、次のステージへ進みます。
ギブアップの場合は、「R」キーを押すと別のステージに変わります。

1 '*LightOut
2 CLV:LET[90],-1,0,1,0,0,-1,0,1,0,0
3 POKE#740,0,0,0,#18,#18,0,0,0
4 POKE#750,#FF,#FF,#FF,#E7,#E7,#FF,#FF,#FF
5 POKE#758,#C3,#81,0,0,0,0,#81,#C3
6 SRNDTICK()+ANA(2)
7 FORI=1TO10:P=RND(5):Q=RND(5):GSB20:NEXT
8 CLS:GSB26:P=0:Q=0
9 R=2:GSB25
10 K=INKEY()-28:IFK=54GOTO6
11 IFK<0ORK>4GOTO10
12 IFK=4GOTO17
13 R=0:GSB25
14 P=P+[90+K*2]:Q=Q+[91+K*2]
15 P=P+(P<0)-(P>4):Q=Q+(Q<0)-(Q>4)
16 GOTO9
17 BEEP:GSB20:GSB26
18 IFL>0GOTO9
19 LC0,6:?"CLEAR!":BEEP9,5:WAIT9:BEEP9,5:WAIT120:S=S+1:GOTO6
20 FORD=0TO4
21 X=P+[90+D*2]:IFX<0ORX>4GOTO24
22 Y=Q+[91+D*2]:IFY<0ORY>4GOTO24
23 Z=X+Y*5:[Z]=![Z]
24 NEXT:RTN
25 LCP,Q:?CHR$(232+R+[P+Q*5]):RTN
26 L=0:FORY=0TO4:LC0,Y:FORX=0TO4
27 Z=X+Y*5:?CHR$(232+[Z]);:IF[Z]L=L+1
28 NEXT:NEXT:RTN

Ichigo64版

起動すると、8×8=64個のライトがランダムにON/OFFされて表示されます。
点滅するカーソルをジョイスティックで上下左右に動かして、ボタンを押すと、そのライトおよび上下左右に隣接するライトが反転(ON→OFF、OFF→ON)します。
全てのライトをOFFにすると、そのステージはクリアとなり、次のステージへ進みます。
ギブアップの場合は、ボタンを1秒以上長押しすると別のステージに変わります。

  • ジョイスティックのアナログ値による調整(3行目のH,L)
    • 横方向(IN5):「左」=0近辺・「右」=1023近辺の時は「H=1」、逆の時は「H=-1」。
    • 縦方向(IN6):「上」=0近辺・「下」=1023近辺の時は「L=1」、逆の時は「L=-1」。

1 '*LightOut64J
2 WAIT60:VIDEO0:UART1:CLS:?:OUT1,-1:OUT2,-1
3 CLV:H=1:L=1:LET[90],-1,0,1,0,0,-1,0,1,0,0
4 ?"MATLED SHOW 868989E602979263":PLAY"R32L8GECC":WAIT99
5 FORY=0TO7:[Y]=0:NEXT
6 SRNDANA(2)+TICK()
7 FORT=1TO20:P=RND(8):Q=RND(8):GSB22:NEXT
8 GSB27:P=0:Q=0
9 [8]=[8]^(#80>>P):GSB27
10 IFBTN()CLT:GOTO15
11 I=(ANA(5)-511)/300*H:J=(ANA(6)-511)/300*L
12 IF!(I|J)GOTO9
13 P=P+I:Q=Q+J:P=P+(P<0)-(P>7):Q=Q+(Q<0)-(Q>7)
14 [8]=0:WAIT10:GOTO9
15 IFBTN()GOTO15
16 IFTICK()>60BEEP30,60:GOTO5
17 BEEP:GSB22:GSB27
18 IFW>0GOTO9
19 [8]=0:FORT=1TO2:BEEP9,5:GSB21:GSB21:NEXT
20 WAIT99:S=S+1:GOTO5
21 FORY=0TO7:[Y]=[Y]^#FF:NEXT:GSB27:RTN
22 FORE=0TO4
23 X=P+[90+E*2]:IFX<0ORX>7GOTO26
24 Y=Q+[91+E*2]:IFY<0ORY>7GOTO26
25 [Y]=[Y]^(#80>>X)
26 NEXT:RTN
27 W=0:?"MATLED SHOW ";
28 FORY=0TO7:D=[Y]:W=W+D:IFY=QD=D^[8]
29 IFD<16?0;
30 ?HEX$(D);:NEXT:?:RTN