皆さん、明けましておめでとうございます。
2019年もよろしくお願いします。
これまで展示会やイベントなどで首から下げていた「IchigoJam名札」ですが、ハードに持ち歩いたせいか、液晶モニタが映らなくなってしまいました。
ちょっと強化して、新しい名札を作ってみました。
秋月電子のA基板用アクリルパネルを装着して、IchigoJamや液晶モニタを保護。見た目もカッコよくなりました。
ただ、おかげでIchigoJamの電源スイッチに指が届かなくなり、やむなく別にスライドスイッチを付けました(^_^;)
下半分の基板は、専用プリント基板を起こしました。
今回はEEPROMも搭載して、多数のプログラムを載せられるようになりました(^_^)v
あとは、今まで作ってきたプログラムを、ジョイスティック&ボタン操作に改造して移植しました。
基板データ
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。
(C) 2018 Shiro Saito (https://www.ichigojaman.jp)
メニュープログラム
ジョイスティックの操作で、数字を「00」~「99」の範囲で変更します。
Aボタンを押すと、スロット100~199のプログラムを起動します。
1 '*PCN Selecter 2 CLV:VIDEO 1:CLS:OUT1,-1:OUT2,-1 3 LET[0],#0080,#0808,#0FF8,#7FFF,#0220,#0808,#0140,#0000 4 LET[8],#0080,#3E2A,#0140,#223E,#0E38,#2208,#F007,#BE3E 5 LET[16],#17F4,#2214,#1004,#2263,#1FFC,#3E49,#1084,#222A 6 LET[24],#12A4,#221C,#1494,#222A,#2084,#4249,0,0 7 LET[32],0,0,#7191,#087F,#4A51,#0849,#4A19,#0E49 8 LET[40],#7215,#087F,#4213,#0849,#4251,#0849,#4191,#7F7F 9 A=#900:FORY=0TO23:FORX=0TO1:M=#8000 10 FORB=0TO15:D=([Y*2+X]&M)!=0:POKEA,D:M=M>>1:A=A+1:NEXT 11 NEXT:NEXT 12 IF!BTN()CONT 13 BEEP:CLS:WAIT30 14 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 15 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 16 N=0:GSB26 17 I=(512-ANA(5))/256 18 J=(ANA(6)-512)/256 19 N=N+I+J*10 20 IFN<0N=N+100 21 IFN>99N=N-100 22 GSB26 23 IF!BTN()GOTO17 24 BEEP:CLS:SRNDTICK() 25 LRUNN+100 26 M=N/10:O=12:GSB28 27 M=N%10:O=16:GSB28:RTN 28 FORY=0TO4:D=[M*5+Y]:LCO,10+Y 29 FORX=0TO2:?CHR$(D%2);:D=D/2:NEXT 30 ?CHR$(28,28,28,31);:NEXT:RTN
かわくだり
おなじみのかわくだりです。ジョイスティックの左右で自キャラを移動させて、岩を避けながら川を下ります。岩に当たるとゲームオーバーで、下った秒数が左下に表示されます。
Aボタンでリプレイ、Bボタンで名札に戻ります。
10 CLS:CLT:X=16 20 I=(512-ANA(5))/256:X=X+I:X=X&31 30 IF SCR(X,5) GOTO 80 40 LC X,5:?"O" 50 LC RND(32),23:?"*" 60 WAIT 3 70 GOTO 20 80 ?TICK()/60 90 IF BTN() RUN 100 IF IN(1) GOTO 90 ELSE LRUN 0
シューティング
上空のUFOを撃ち落とすシューティングゲームです。
ジョイスティックの左右で砲台を移動させて、Aボタンでビームを発射します。
UFOに下まで侵略されるとゲームオーバーです。
Aボタンでリプレイ、Bボタンで名札に戻ります。
10 '*SHOOTING j 20 CLS:CLV:OUT 1,-1 30 LOCATE 0,0 40 ?S 50 X=16:Y=23 60 LOCATE X,Y 70 ?"A"; 72 U=RND(31):V=0 74 LOCATE U,V 76 ?CHR$(241); 80 '*GAMELOOP 90 LOCATE X,Y 100 ?" "; 105 K=(512-ANA(5))/256 110 IF K=-1 AND X>0 THEN X=X-1 120 IF K=1 AND X<30 THEN X=X+1 130 LOCATE X,Y 140 ?"A"; 142 IF BTN()=1 THEN GOSUB 240 145 GOSUB 160 148 WAIT 3 150 IF V<23 THEN GOTO 80 152 BEEP 30,30 153 LOCATE 0,0:?S 154 LOCATE 12,12 156 ?"GAME OVER!":WAIT 30 158 IF BTN() RUN 159 IF !IN(1) LRUN0 ELSE GOTO 158 160 '*UFO 170 LOCATE U,V 180 ?" "; 190 U=U+RND(3)-1 192 IF U<0 THEN U=0 194 IF U>30 THEN U=30 200 V=V+RND(3)-1 201 IF RND(10)=0 V=V+1 202 IF V<0 THEN V=0 204 IF V>23 THEN V=23 210 LOCATE U,V 220 ?CHR$(241); 230 RETURN 240 '*BEAM 250 B=X 260 FOR C=Y-1 TO V STEP -1 270 LOCATE B,C 280 ?"|"; 285 WAIT 2 290 LOCATE B,C 300 ?" "; 310 NEXT 320 IF B<>U THEN RETURN 330 '*HIT 340 BEEP 350 LOCATE U,V 360 ?"*"; 362 S=S+10 364 LOCATE 0,0 366 ?S 370 WAIT 20 380 LOCATE U,V 390 ?" "; 395 U=RND(31):V=0 400 RETURN
スキー
ジョイスティックの左右で自キャラを移動させて、ポールの間をくぐってください。ポールに当たるとゲームオーバーです。
Aボタンでリプレイ、Bボタンで名札に戻ります。
10 '*SKI* 20 CLS 30 CLV:OUT 1,-1 40 X=15 50 Y=3 60 P=12 70 W=7 80 C=0 90 @GAMELOOP 100 LOCATE X,Y 110 PRINT " " 120 I=(512-ANA(5))/256 130 IF I=-1 AND X>1 THEN X=X-1 140 IF I=1 AND X<30 THEN X=X+1 150 GOSUB @POLE 160 D=SCR(X,Y) 170 LOCATE X,Y 180 PRINT CHR$(250) 190 IF D=95 THEN BEEP:S=S+1 200 LOCATE 0,0 210 PRINT S 220 IF D=124 THEN GOTO @OVER 230 W=7-S/20 240 IF W<3 THEN W=3 250 WAIT 3 260 GOTO @GAMELOOP 270 @OVER 280 LOCATE X,Y 290 PRINT "X" 300 BEEP 30,30 310 @RLOOP 320 IF BTN() RUN 330 IF IN(1) GOTO @RLOOP ELSE LRUN 0 340 @POLE 350 C=C+1 360 IF C<10 THEN LOCATE 0,23:PRINT:RETURN 370 P=P+RND(3)-1 380 IF P<0 THEN P=0 390 IF P+W>30 THEN P=30-W 400 LOCATE P,23 410 PRINT "|"; 420 FOR I=1 TO W-2 430 PRINT "_"; 440 NEXT 450 PRINT "|" 460 C=0 470 RETURN
ジャンプアクション
敵のエイリアン「@」を避けつつ、コイン「$」を取ってください。
ジョイスティックの左右で左右移動、上下ではしごの上り下り、Aボタンでジャンプです。
エイリアンに当たるとゲームオーバーです。
Aボタンでリプレイ、Bボタンで名札に戻ります。
1 CLV:OUT1,-1:OUT2,-1:LET[90],30,6,-1,0,14,1,30,22,-1 2 CLS:FORJ=7TO23STEP8:LC0,J:FORI=0TO30:?CHR$(1);:NEXT:NEXT 3 FORJ=7TO22:LC7,J:?"H":LC23,J:?"H":NEXT:GSB19:X=0:Y=22:J=0 4 K=(512-ANA(5))/256:IFJOR(Y%8=6)U=X-(K=-1)*(X>0)+(K=1)*(X<30) 5 V=Y:IFJGOTO8 6 L=(512-ANA(6))/256:V=Y-(L=-1)*(H=72)+(L=1)*(SCR(X,Y+1)=72) 7 IFBTN()*(H<>72)J=1:G=-3 8 V=V+G*J:G=G+J:LCX,Y:?CHR$(H);:H=SCR(U,V):IFH=36BEEP:S=S+1:GSB19:H=0 9 LCU,V:?CHR$(250);:X=U:Y=V 10 IFH=64M=1 11 IFY%8=6J=0 12 IFRND(40)=0GSB25 13 FORA=0TO15STEP5:IF[A]GSB22 14 IF(![A])*(!RND(20))GSB20 15 NEXT:IF!MGOTO4 16 BEEP30,30:LC11,11:?"GAME OVER":WAIT30 17 IFBTN()RUN 18 IFIN(1)GOTO17 ELSELRUN0 19 LC0,0:?"SCORE ";S:RTN 20 R=RND(3)*3:[A+1]=[90+R]:[A+2]=[91+R]:[A+4]=SCR([A+1],[A+2]):IF[A+4]RTN 21 [A]=1:[A+3]=[92+R]:LC[A+1],[A+2]:?"@";:RTN 22 D=[A+1]+[A+3]:E=[A+2]:LC[A+1],[A+2]:?CHR$([A+4]);:IF(D<0)OR(D>30)[A]=0:RTN 23 [A+4]=SCR(D,E):LCD,E:?"@";:IF[A+4]=250M=1 24 [A+1]=D:[A+2]=E:RTN 25 B=RND(31):C=8*RND(3):IFSCR(B,C)GOTO25 26 LCB,C:?"$":RTN
100mダッシュ
Aボタンを連打して100m走ってください。ゴールするとタイムが表示されます。
タイトル画面でBボタンを押すと名札に戻ります。
10 '*100m Dash Event 20 VIDEO 3:CLV 30 @TITLE 40 CLS 50 LC 2,0:?"*100m Dash*" 60 LC 6,3:?"TIME" 70 LC 6,4:?T/60;".";T%60/6; 80 WAIT 120 90 LC 5,7:?"READY?"; 100 IF BTN() CONT 110 @SLOOP 120 IF IN(1)=0 LRUN 0 130 IF !BTN() GOTO @SLOOP 140 CLS 150 LC 0,1:?CHR$(251) 160 LC 4,7:?"|"; 170 LC 0,0 180 FOR T=3 TO 1 STEP -1 190 ?T;" ";:BEEP:WAIT 60 200 NEXT 210 ?"GO!":BEEP 10,60 220 LC 1,1:CLT 230 FOR R=1 TO 100 240 IF !BTN() CONT 250 IF BTN() CONT 260 ?CHR$(8,46,251); 270 NEXT 280 T=TICK() 290 ?" GOAL!"; 300 BEEP 10,60:WAIT 60 310 GOTO @TITLE
ブロックくずし
ジョイスティックの左右でパドルを動かして、ボールを打ち返してください。
3回ミスするとゲームオーバーです。
Aボタンでリプレイ、Bボタンで名札に戻ります。
1 '* KBlock j 2 CLV:OUT1,-1 3 B=3:POKE#700,0,127,127,127,127,127,127,0,0,254,254,254,254,254,254,0 4 CLS:X=5:Y=10:D=1:E=1:C=#E9:GSB18:P=15:GSB23 5 LC1,23:?"SCORE ";S;:LC20,23:IFB>1FORI=1TOB-1:?CHR$(C);:NEXT 6 FORJ=0TO21:LC1,J:?CHR$(1):LC30,J:?CHR$(1):NEXT:GSB19 7 U=X+D:V=Y+E:IFV>-1ELSEV=RND(3)/2:E=1:R=0:GOTO7 8 WAIT2:IFSCR(U,V)<>1GOTO13 9 IFU<2BEEP20:D=1:GOTO7 10 IFU>29BEEP20:D=-1:GOTO7 11 BEEP30:E=-1:D=((U-P)>3)*2-1:R=0:IF!LO=0:GSB19 12 GOTO7 13 GSB22:GSB18:IF2<VANDV<7AND!RGSB20 14 X=U:Y=V:GSB18:GSB22:IFY<22GOTO7 15 BEEP30,60:WAIT60:B=B-1:IFB>0O=1:GOTO4 16 IFBTN()RUN 17 IFIN(1)GOTO16 ELSELRUN0 18 A=#900+X+Y*32:POKEA,C^PEEK(A):RTN 19 L=0:FORJ=0TO3:LC2,J+3:FORI=0TO13:A=I+J*14:[A]=[A]*O:?CHR$(#E0*![A],#E1*![A]);:L=L+![A]:NEXT:NEXT:RTN 20 I=(U-2)/2:J=V-3:A=I+J*14:IF[A]RTN 21 BEEP10:[A]=1:LCI*2+2,V:?CHR$(0,0);:R=1:E=-E:S=S+1:LC7,23:?S;:L=L-1:RTN 22 K=(512-ANA(5))/256:Q=P-(K=-1)*(P>1)+(K=1)*(P<25):IFQ=PWAIT1:RTNELSEP=Q 23 LCP-1,22:?CHR$(0,1,1,1,1,1,1,0);:RTN
落ち物パズル
上から落ちてくるブロックを左右に動かして、うまく積み重ねてください。横1列が揃うとその列は消えます。
Aボタンを押すと、ブロックが上下反転します。
ブロックが上まで積み上がるとゲームオーバーです。
Aボタンでリプレイ、Bボタンで名札に戻ります。
1 '*Fall j 2 CLV:CLS:OUT1,-1:OUT2,-1 3 FORJ=0TO13:[J]=513:Q=[J]:GSB23:NEXT:[14]=1023:Q=[14]:GSB23 4 LC0,16:?"SCORE 0":T=30 5 G=0:A=RND(15)+1:B=(A&3)*16:C=(A&12)*4:Y=0:IF!CGSB24 6 GSB21:IF(B&[0])OR(C&[1])GOTO18 7 FORK=0TOT:IF!BTN()GOTO9 8 GSB24:GSB21:GOTO13 9 I=(512-ANA(5))/256:IF!IGOTO13 10 D=B<<I:E=C<<I 11 IF(D&[Y])OR(E&[Y+1])GOTO13 12 GSB22:B=D:C=E:GSB21 13 NEXT:V=Y+1:IF(B&[V])OR(C&[V+1])GSB26 14 IF!GGOTO17 15 IFG=2GOTO18 16 IFG=1GOTO5 17 GSB22:Y=V:GSB21:GOTO7 18 BEEP30,30 19 IFBTN()RUN 20 IFIN(1)GOTO19 ELSELRUN0 21 LC0,Y:Q=[Y]|B:GSB23:Q=[Y+1]|C:GSB23:RTN 22 LC0,Y:Q=[Y]:GSB23:Q=[Y+1]:GSB23:RTN 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 27 IF[W]=1023&&W<14GSB31 ELSEW=Y 28 IF[W]=1023GSB31 29 G=1:IFY<2G=2 30 RTN 31 BEEP:[W]=513:Q=[W]:LC0,W:GSB23 32 S=S+P:LC6,16:?S:T=T-P*2:P=P+2:IFT<0T=0 33 FORZ=WTO1STEP-1:[Z]=[Z-1]:Q=[Z]:LC0,Z:GSB23:NEXT 34 LC0,0:Q=513:GSB23:RTN