SHIROのIchigoJam日記

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

IchigoBoy用プログラムまとめ

PCN三重さんが販売しているIchigoJam携帯ゲーム機「IchigoBoy」「IchigoBoy Pocket」用に作ったプログラムを、過去記事も含めてまとめてみました。

f:id:shiro0922:20180527235915j:plain:w480
IchigoBoy(拡張基板タイプ)

f:id:shiro0922:20190306010211j:plain:w480
IchigoBoy Pocket(小型単独稼働タイプ)

ボタン仕様

左=IN7(OUT3)(プルダウン)
右=IN6(OUT2)(プルダウン)
上=IN5(OUT1)(プルダウン)
下=IN8(OUT4)(プルダウン)
SELECT=IN3(プルアップ)
START=BTN
A=IN11(OUT6)(プルダウン)
B=IN10(OUT5)(プルダウン)

  • プルダウンは、ボタンが押されると入力が1、押されていないと0
  • プルアップは、ボタンが押されると入力が0、押されていないと1

プログラム

セレクタ

f:id:shiro0922:20180527235829j:plain:w320
スロット0に置いて自動起動すると良いです。スロット1~3のプログラムを選択起動できます。
数字変更=上下左右ボタン、決定=STARTボタン。

1 '*Selecter Boy
2 VIDEO3:SWITCH1:CLV:FORP=1TO6:OUTP,-1:NEXT
3 LET[0],7,5,5,5,7,4,4,4,4,4,7,4,7,1,7,7,4,7,4,7,5,5,7,4,4
4 LET[25],7,1,7,4,7,7,1,7,5,7,7,5,5,4,4,7,5,7,5,7,7,5,7,4,7
5 IFBTN()CONT
6 CLS:?"  *IchigoBoy*"
7 N=1:GSB17
8 '@NLOOP
9 I=IN(6)-IN(7)
10 J=IN(5)-IN(8)
11 N=N+I+J
12 IFN<1N=3
13 IFN>3N=1
14 GSB17
15 IF!BTN()GOTO8
16 BEEP:CLS:LRUNN
17 '@PRTN
18 M=N/10:O=4:GSB20
19 M=N%10:O=8:GSB20:RTN
20 '@PRT1
21 FORY=0TO4:D=[M*5+Y]:LCO,2+Y
22 FORX=0TO2:?CHR$(D%2);:D=D/2:NEXT
23 ?CHR$(28,28,28,31);:NEXT:RTN

シューティングゲーム

左右ボタンで自機移動、AまたはBボタンでビーム発射。
敵UFOに画面下まで侵略されるとゲームオーバーです。
ゲームオーバー時は、Bボタンでリプレイ、STARTボタンでセレクターへ戻ります。

10 '*SHOOTING Boy
20 CLS:CLV
30 LOCATE 0,0
40 PRINT S
50 X=7:Y=7
60 LOCATE X,Y
70 PRINT "A";
72 U=RND(15):V=0
74 LOCATE U,V
76 PRINT CHR$(241);
80 '*GAMELOOP
90 LOCATE X,Y
100 PRINT " ";
105 K=IN(6)-IN(7)
110 IF K=-1 AND X>0 THEN X=X-1
120 IF K=1 AND X<14 THEN X=X+1
130 LOCATE X,Y
140 PRINT "A";
142 IF IN(10)||IN(11) GOSUB 240
145 GOSUB 160
148 WAIT 3
150 IF V<7 THEN GOTO 80
152 BEEP 30,30
153 LOCATE 0,0:PRINT S
154 LOCATE 3,3
156 PRINT "GAME OVER!"
157 IF BTN() LRUN 0
158 IF IN(10)=1 THEN RUN
159 GOTO 157
160 '*UFO
170 LOCATE U,V
180 PRINT " ";
190 U=U+RND(3)-1
192 IF U<0 THEN U=0
194 IF U>14 THEN U=14
200 V=V+RND(3)-1
202 IF V<0 THEN V=0
204 IF V>7 THEN V=7
210 LOCATE U,V
220 PRINT CHR$(241);
230 RETURN
240 '*BEAM
250 B=X
260 FOR C=Y-1 TO V STEP -1
270 LOCATE B,C
280 PRINT "|";
285 WAIT 3
290 LOCATE B,C
300 PRINT " ";
310 NEXT
320 IF B<>U THEN RETURN
330 '*HIT
340 BEEP
350 LOCATE U,V
360 PRINT "*";
362 S=S+10
364 LOCATE 0,0
366 PRINT S
370 WAIT 20
380 LOCATE U,V
390 PRINT " ";
395 U=RND(15):V=0
400 RETURN

ジャンプアクションゲーム

www.ichigojaman.jp
画面が狭いので、床2段・はしご2本のステージです。敵のエイリアンに当たらないように避けながら、コインを取ってください。
上下左右で移動、Aボタンでジャンプ。ゲームオーバー時はSTARTでセレクターへ戻ります。

プログラムリスト

1 'Jump Action
2 CLV:FORI=1TO6:OUTI,-1:NEXT:LET[90],15,6,-1,0,2,1
3 CLS:?0:FORJ=48TO112STEP64:FORI=0TO15:POKE#900+I+J,1:NEXT:NEXT
4 FORJ=3TO6:LC3,J:?"H":LC12,J:?"H":NEXT:X=0:Y=6:J=0
5 IFJOR(Y%4=2)U=X-IN(7)*(X>0)+IN(6)*(X<15)
6 V=Y:IFJGOTO9
7 V=Y-IN(5)*(H=72)+IN(8)*(SCR(X,Y+1)=72)
8 IFIN(11)*(Y%4=2)J=1:G=-2
9 V=V+((G>0)-(G<0))*J:G=G+J:LCX,Y:?CHR$(H);:H=SCR(U,V):IFH=36BEEP:S=S+1:LC0,0:?S:H=0
10 LCU,V:?CHR$(250);:X=U:Y=V
11 IFH=64M=1
12 IFY%4=2J=0
13 IFRND(40)=0GSB24
14 FORA=0TO5STEP5:IF[A]GSB21
15 IF(![A])*(!RND(20))GSB19
16 NEXT:WAIT6:IF!MGOTO5
17 BEEP30,30:LC4,1:?"GAME OVER":WAIT30
18 IFBTN()RUNELSECONT
19 R=RND(2)*3:[A+1]=[90+R]:[A+2]=[91+R]:[A+4]=SCR([A+1],[A+2]):IF[A+4]RTN
20 [A]=1:[A+3]=[92+R]:LC[A+1],[A+2]:?"@";:RTN
21 D=[A+1]+[A+3]:E=[A+2]:LC[A+1],[A+2]:?CHR$([A+4]);:IF(D<0)OR(D>15)[A]=0:RTN
22 [A+4]=SCR(D,E):LCD,E:?"@";:IF[A+4]=250M=1
23 [A+1]=D:[A+2]=E:RTN
24 B=RND(16):C=4*RND(2):IFSCR(B,C)GOTO24
25 LCB,C:?"$":RTN

落ち物パズルゲーム

左右ボタンでピース移動、下ボタンでピース落とし。
ゲームオーバー時は、Bボタンでリプレイ、STARTボタンでセレクターへ戻ります。

1 'Fall Boy
2 CLV:CLS:FORY=0TO8:[Y]=513:Q=[Y]:GSB22:NEXT:[9]=1023
3 LC10,0:?"SCORE":LC11,1:?"0":T=50
4 G=0:A=RND(15)+1:B=(A&3)*16:C=(A&12)*4:Y=0:IF!CGSB24
5 GSB20:IFC&[0]GOTO16
6 FORK=0TOT:IFIN(8)K=T
7 IFIN(11)GSB24:GSB20
8 J=IN(6)-IN(7):IF!JGOTO11
9 D=B<<J:E=C<<J:IF(D&[Y])OR(E&[Y+1])GOTO11
10 GSB21:B=D:C=E:GSB20
11 NEXT:V=Y+1:IF(B&[V])OR(C&[V+1])GSB26
12 IF!GGOTO15
13 IFY=0&&BGOTO16
14 GOTO4
15 GSB21:Y=V:GSB20:GOTO6
16 BEEP30,30:WAIT60
17 IFBTN()LRUN0
18 IFIN(10)RUN
19 GOTO17
20 Q=[Y]|B:GSB22:LC0,Y:Q=[Y+1]|C:GSB23:RTN
21 Q=[Y]:GSB22:LC0,Y:Q=[Y+1]:GSB23:RTN
22 IF!YRTNELSELC0,Y-1
23 FORI=0TO9:?CHR$(Q&1);:Q=Q>>1:NEXT:RTN
24 IF!BRTN
25 A=B:B=C:C=A:RTN
26 BEEP30,5:[Y]=[Y]|B:W=Y+1:[W]=[W]|C:P=1:IF[W]=1023&&W<9GSB29 ELSEW=Y
27 IF[W]=1023GSB29
28 G=1:RTN
29 BEEP:[W]=513:Q=[W]:LC0,W-1:GSB23:S=S+P:LC11,1:?S:T=T-P*2:P=P+2:IFT<0T=0
30 FORZ=WTO1STEP-1:[Z]=[Z-1]:Q=[Z]:LC0,Z-1:GSB23:NEXT:RTN

イチゴトランプ

山からカードを引いて、同じ絵柄のカードを4枚揃えた人が上がりです。
イチゴカードを引いてしまうと、手持ちのカードが山のカードと入れ替わってしまいます。
左右ボタンでカーソル移動、Aボタンで捨てるカードを決定。
ゲームオーバー時は、Bボタンでリプレイ、STARTボタンでセレクターへ戻ります。

1 CLV:CLS:LET[90],5,5,0,2,5,0,11,2
2 FORN=1TO4:FORS=235TO245:[M]=S:M=M+1:NEXT:NEXT:GSB11:FORP=0TO3:Q=51+P*5:FORT=0TO2:M=M-1:[Q+T]=[M]:[M]=0:NEXT:GSB12:NEXT:FORN=1TO3:[M]=255:M=M+1:NEXT:GSB11
3 P=(P+1)&3:Q=51+P*5:D=RND(M):[Q+3]=[D]:[D]=0:GSB12:IF[Q+3]=255GSB19
4 IF([Q]=[Q+1])&([Q]=[Q+2])&([Q]=[Q+3])GOTO7
5 C=3:IFPGSB16 ELSEGSB15
6 WAIT9:[D]=[Q+C]:FORN=CTO3:[Q+N]=[Q+N+1]:NEXT:GSB12:GOTO3
7 BEEP9,30:G=P:GSB12
8 IFBTN()LRUN0
9 IFIN(10)RUN
10 GOTO8
11 FORN=1TO100:A=RND(M):B=RND(M):D=[A]:[A]=[B]:[B]=D:NEXT:RTN
12 Z=90+P*2:X=[Z]:Y=[Z+1]:LCX,Y:IFP?"COM";PELSE?"YOU"
13 LCX,Y+1:FORE=0TO3:F=[Q+E]:IFFIFP=G?CHR$(F);ELSE?CHR$(219);
14 NEXT:?" ":RTN
15 LCX+C,Y+2:?" ";:C=C-IN(7)*(C>0)+IN(6)*(C<3):LCX+C,Y+2:?CHR$(226);:WAIT5:IFIN(11)BEEP:LCX+C,Y+2:?" ";:RTNELSECONT
16 FORE=0TO2:A=[Q+E]:FORF=E+1TO3:IF[Q+F]=A[80+E]=1:[80+F]=1
17 NEXT:NEXT:FORE=0TO2:IF![80+E]C=E
18 [80+E]=0:NEXT:RTN
19 IF!PBEEP30,9:WAIT60
20 FORC=0TO3
21 E=RND(M):F=[E]:IF(F=255)|(F=0)GOTO21
22 [E]=[Q+C]:[Q+C]=F:NEXT:GSB12:RTN

いちがめ

www.ichigojaman.jp
さめがめ風のコマを消していくゲームです。

  • プログラムは初期化プログラムとメインプログラムの2つです。連続したスロットに置いて、初期化プログラムから起動してください。
  • 起動すると、画面左に11×8に並んだコマ、画面右にレベル(0~)とスコアが表示されます。
  • 反転カーソルを上下左右ボタンで移動して、Aボタンでコマを消します。同じ種類が上下左右に2個以上つながっているコマだけを消すことができます。たくさんのコマを一度に消すと、スコアが上がります。コマを消すと、残りのコマが下あるいは左へ移動して詰まります。
  • 残りのコマ数がある程度以下になると、そのレベルはクリアです。次のレベルへ進み、コマが1種類増えます。
  • クリアする前に手詰まりになるとゲームオーバーです。Bボタンを押すと最初からリプレイします。STARTボタンを押すとセレクターへ戻ります。

●初期化プログラム

1 '*1GameBoy-Ini
2 CLP
3 '
4 'Koma PCG Pattern
5 LET [ 8],#04,#3E,#2F,#56,#6A,#D6,#AC,#F0
6 LET [16],#38,#7C,#FE,#FE,#FE,#7C,#38,#00
7 LET [24],#38,#44,#82,#82,#82,#44,#38,#00
8 LET [32],#38,#44,#92,#BA,#92,#44,#38,#00
9 LET [40],#38,#74,#F2,#F2,#F2,#74,#38,#00
10 LET [48],#38,#44,#82,#FE,#82,#44,#38,#00
11 LET [56],#38,#44,#A2,#92,#8A,#44,#38,#00
12 LET [64],#38,#44,#8A,#94,#A2,#44,#38,#00
13 LET [72],#38,#44,#82,#82,#FE,#7C,#38,#00
14 '
15 'Normal Koma(#E1-#E9)
16 FOR C=1 TO 9:FOR B=0 TO 7
17 POKE (#E0+C)*8+B,[C*8+B]
18 NEXT:NEXT
19 '
20 'Reverse Koma(#F1-#F9)
21 FOR C=1 TO 9:FOR B=0 TO 7
22 POKE (#F0+C)*8+B,PEEK((#E0+C)*8+B)^#FF
23 NEXT:NEXT
24 '
25 CLV:FOR P=1 TO 6:OUT P,-1:NEXT
26 LET [91],-1,0,1,0,0,-1,0,1,0,0
27 J=10:K=7:SRND TICK()+ANA(2)
28 LRUN FILE()+1

●メインプログラム

1 G=0:L=(J+1)*(K+1):W=J:M=S%7+3
2 CLS:FORY=0TOK:LC0,Y:FORX=0TOJ:?CHR$(#E1+RND(M));:NEXT:NEXT:GSB11:GSB12
3 E=IN(6)-IN(7):F=IN(8)-IN(5)
4 IFIN(11)GSB15:IFL<M*2BEEP9,30:WAIT60:S=S+1:GOTO1
5 GSB13:X=P+E:Y=Q+F:IFSCR(X,Y)P=X:Q=Y
6 WAIT1:GSB13:WAIT3:IF!GGOTO3
7 BEEP30,30
8 IFIN(10)LRUNFILE()-1
9 IFBTN()LRUN0
10 GOTO8
11 LC12,0:?S:LC12,1:?T:RTN
12 P=0:Q=K
13 X=P:Y=Q
14 I=SCR(X,Y):I=I+((I<#F0)-(I>#EF))*16:LCX,Y:?CHR$(I);:RTN
15 U=P:V=Q:N=SCR(U,V)-16:C=0:[C]=U+V*16:H=1:GSB25:IF!CRTN
16 BEEP:B=0
17 B=B+1:U=[B]&15:V=[B]/16:GSB25:IFB<CGOTO17
18 I=C-1:T=T+I*I:L=L-I-2:GSB11:FORB=0TOC:X=[B]&15:FORY=KTO0STEP-1:IF#F0>SCR(X,Y)ELSEFORZ=YTO0STEP-1:POKE#900+X+Z*16,SCR(X,Z-1):NEXT:Y=Y+1
19 NEXT:NEXT:IF!LRTN
20 FORX=WTO0STEP-1:IFSCR(X,K)ELSEFORY=KTO0STEP-1:LCX,Y:FORZ=XTOW:?CHR$(SCR(Z+1,Y));:NEXT:NEXT:W=W-1
21 NEXT:C=0:H=0:FORU=0TOW:FORV=KTO0STEP-1:N=SCR(U,V):IF!NGOTO23
22 GSB25:IFCU=W:V=0
23 NEXT:NEXT:IF!CG=1
24 GSB12:RTN
25 FORD=91TO97STEP2:X=U+[D]:Y=V+[D+1]:IFSCR(X,Y)=NC=C+1:[C]=X+Y*16:IFHGSB14
26 NEXT:RTN