SHIROのIchigoJam日記

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

USBシリアル変換基板

※この記事は「IchigoJam Advent Calendar 2018」にエントリーしています。

PCからIchigoJamへプログラムを転送するのに、USBシリアルモジュールがよく使われます。「イチゴジャムレシピ」の情報ページはこちら。
USB-シリアル - イチゴジャム レシピ

私もこれまでいろいろ使ってきました。IchigoJamとなるべく簡単に接続したいので、ユニバーサル基板で変換基板を作ったり。
f:id:shiro0922:20181213051429j:plain
もっと小型のモジュール
FT232RQ USBシリアル変換キット: 半導体 秋月電子通商-電子部品・ネット通販
と、aitendoの変換基板
ジャムISP書き込み変換基板 - aitendo
を使って、こんなものも作りました。
f:id:shiro0922:20181213051521j:plain
ところがこれ、シリアル通信は問題無いのですが、中央のジャンパーを繋いで3.3V電源も供給しようとすると、IchigoJamが起動しません(^_^;) どうやら供給電力不足の様子。

それを解決するために、変換プリント基板を新たに作ってみました。
使うUSBシリアルモジュールは、秋月電子で売っているFT-231X。
akizukidenshi.com
過去に、
www.ichigojaman.jp
www.ichigojaman.jp
などで組み込みに使っていて、かなりの供給電力があることは実証済み。

あらたに設計した変換プリント基板はこんな感じです。
f:id:shiro0922:20181213054222p:plain

f:id:shiro0922:20181214002251p:plain
基板を組み立てた様子。
f:id:shiro0922:20181214001057j:plain
コマンド・プログラム転送やファームウェア書き換えも、無事にできました。

基板データ

*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。

(C) 2018 Shiro Saito (https://www.ichigojaman.jp)

武蔵の剣

※この記事は「IchigoJam Advent Calendar 2018」にエントリーしています。

f:id:shiro0922:20181212120710p:plain
両刀遣いの宮本武蔵と敵との剣の戦い。攻撃条件があってかなり難しいゲームです。
剣の道は厳しいのだ!(笑)

遊び方

  • ゲームを起動すると、自分のキャラの武蔵と、敵の武士「@」4人が表示されます。
  • 武蔵を上下左右のカーソルキーで移動させて、スペースキーで敵に攻撃してください。ただし武蔵の剣は、左右移動中は上下2方向、上下移動中は左右2方向にしか出ません。倒した敵の人数は左下に表示されます。
  • 武蔵が敵に捕らえられるとゲームオーバーです。

プログラムリスト

1 '*Musashi
2 CLV:VIDEO3:CLS:LC0,7:?0;
3 X=8:Y=4:H=5:J=9
4 FORN=0TOJSTEP3
5 WAIT3:GSB11:IFMN=J
6 IF[N]GSB33 ELSEGSB31
7 WAIT2:GSB11:IFMN=J
8 NEXT:IF!MGOTO4
9 BEEP30,30:LCX,Y:?"X";
10 LC3,4:?"GAME OVER":END
11 U=X-BTN(28)*(X>0)+BTN(29)*(X<15)
12 IFU<XH=253
13 IFU>XH=251
14 V=Y-BTN(30)*(Y>0)+BTN(31)*(Y<6)
15 IFV!=YH=5
16 IFSCR(U,V)=64M=1
17 LCX,Y:?" ";:LCU,V:?CHR$(H);:X=U:Y=V
18 IF!BTN(32)RTN
19 IFH=5C=45:D=1:E=0ELSEC=124:D=0:E=1
20 A=SCR(X-D,Y-E):B=SCR(X+D,Y+E)
21 LCX-D,Y-E:?CHR$(C);:LCX+D,Y+E:?CHR$(C);
22 LCX-D,Y-E:?" ";:LCX+D,Y+E:?" ";
23 IFA!=64&&B!=64RTN
24 IFA=64GSB30
25 IFB=64GSB30
26 FORN=0TOJSTEP3
27 IFX-D=[N+1]&&Y-E=[N+2][N]=0
28 IFX+D=[N+1]&&Y+E=[N+2][N]=0
29 NEXT:RTN
30 BEEP:S=S+1:LC0,7:?S;:RTN
31 [N]=1:[N+1]=15*(N/3%2):[N+2]=6*(N/3/2%2)
32 LC[N+1],[N+2]:?"@";:RTN
33 U=[N+1]+RND(3)-1:V=[N+2]+RND(3)-1
34 IF(U<0)+(U>15)+(V<0)+(V>6)GOTO33
35 IFSCR(U,V)=64GOTO33
36 IFU=X&&V=YM=1
37 LC[N+1],[N+2]:?" ";
38 LCU,V:?"@";:[N+1]=U:[N+2]=V:RTN

プログラム2行目の「VIDEO3」で画面を16文字×12行モードにしています。縦は8行までしか使っていないので、「VIDEO3」→「SWITCH1」に変更すれば、IchigoBoyなどのSPI液晶画面でも遊べます。
3行目の「J=9」は敵の数(の3倍)を表していて、J=12にすれば敵が5人、J=15にすれば6人…と増えます。処理は余裕があるので結構増やせます。

ゲームのアイデアは、2016年の大河ドラマ真田丸」の頃からあったのですが、実現できて良かったです。
武蔵が両刀遣いで2方向同時に攻撃するのは、ボードゲーム十六むさし」からの発想です。

IchigoJam RPiでさめがめ風ゲーム「いちがめ」

※この記事は「IchigoJam Advent Calendar 2018」「Raspberry Pi Advent Calendar 2018」にエントリーしています。

以前にIchigoJamで作った、さめがめ風ゲーム「いちがめ」。
www.ichigojaman.jp
同じ種類のコマを選んで消していくのですが、さすがに処理が重くて「何とか我慢して遊べる」感じでした。
ふと、「IchigoJam RPi(ラズパイ版)で動かしたら速いんじゃ?」と思い立って、試してみました。
IchigoJam RPiは、先日公開された最新板(1.2.6)をダウンロードして使いました。
IchigoJam BASIC RPi1.2 ダウンロード

f:id:shiro0922:20181206220252j:plain

ラズパイ版では嘘のようにコマをサクサク消せて、すごく快適に遊べます。あまりに速くてビックリしました。
ラズパイをお持ちの方は、ぜひ遊んでみてください。

遊び方

  • 起動すると、16×16=256個の駒が表示されます。最初のステージ0は駒が3種類です。
  • 反転しているカーソルをカーソルキーで移動して、同じ駒が縦・横に2個以上つながっている所で、スペースキーを押してください。その駒が消えて、駒が下へ詰まります。縦1列全ての駒が消えた場合は、右側の列が左へ詰まります。
  • (消した駒数-2)の2乗がスコアに加算されます。駒2個だと消しても0点、駒数が増えると点数が上昇します。
  • 残り駒数が駒種類数×2以下(最初は6個以下)になると、そのステージはクリアです。次のステージでは駒が1種類増えます。ステージ6(駒9種類)をクリアすると、駒は3種類に戻ります。

プログラムリスト

再掲します。以下の2つのプログラムを連続したスロットに配置して、コマ設定プログラムから起動してください。なお2回目以降のプレイでは、メインプログラムを直接RUNして構いません。

(1)コマ設定プログラム

1 '*1Game V2 Koma* (PCG)
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 LRUN FILE()+1

(2)メインプログラム

1 '1Game V2
2 CLV:LET[91],-1,0,1,0,0,-1,0,1,0,0:J=15
3 CLS:L=256:W=J:M=S%7+3:FORY=0TOJ:FORX=0TOJ:?CHR$(#E1+RND(M));:NEXT:?:NEXT:GSB9:GSB10
4 K=INKEY()*2-60:IFABS(K)>4GOTO4
5 IFK=4GSB13:IFL<M*2BEEP9,30:WAIT60:S=S+1:GOTO3
6 GSB11:X=P+[K+95]:Y=Q+[K+96]:IFSCR(X,Y)P=X:Q=Y
7 GSB11:IF!GGOTO4
8 LC0,19:END
9 LC0,18:?"Stage ";S;"  Score ";T:RTN
10 P=0:Q=J
11 X=P:Y=Q
12 I=SCR(X,Y):I=I+((I<#F0)-(I>#EF))*16:LCX,Y:?CHR$(I):RTN
13 U=P:V=Q:N=SCR(U,V)-16:C=0:[C]=U+V*16:H=1:GSB23:IF!CRTN
14 BEEP:B=0
15 B=B+1:U=[B]&15:V=[B]/16:GSB23:IFB<CGOTO15
16 I=C-1:T=T+I*I:L=L-I-2:GSB9:FORB=0TOC:X=[B]&15:FORY=JTO0STEP-1:IF#F0>SCR(X,Y)ELSEFORZ=YTO0STEP-1:POKE#900+X+Z*32,SCR(X,Z-1):NEXT:Y=Y+1
17 NEXT:NEXT:IF!LRTN
18 FORX=WTO0STEP-1:IFSCR(X,J)ELSEFORY=JTO0STEP-1:LCX,Y:FORZ=XTOW:?CHR$(SCR(Z+1,Y));:NEXT:NEXT:W=W-1
19 NEXT:C=0:H=0:FORU=0TOW:FORV=JTO0STEP-1:N=SCR(U,V):IF!NGOTO21
20 GSB23:IFCU=W:V=0
21 NEXT:NEXT:IF!CG=1
22 GSB10:RTN
23 FORD=91TO97STEP2:X=U+[D]:Y=V+[D+1]:IFSCR(X,Y)=NC=C+1:[C]=X+Y*16:IFHGSB12
24 NEXT:RTN