SHIROのIchigoJam日記

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

紙芝居4コマ「イチゴ太郎 vs コロナ星人」

先日作ったお絵かきツール
www.ichigojaman.jp
を使って、4コマの紙芝居を作ってみました。
動画はこちら。

【IchigoJam】イチゴ太郎 vs コロナ星人

作り方

(1)絵を描く

お絵かきツールで、IchigoJamの画面に絵を描いて保存します。

(お絵かきツール)

10 CLV:CLS
15 COPY #900,#D00,768
20 LC X,Y:?CHR$(!SCR(X,Y));
30 WAIT 3
40 K=INKEY()
50 LC X,Y:?CHR$(!SCR(X,Y)^(K=32));
60 X=X-(K=28)+(K=29)
70 Y=Y-(K=30)+(K=31)
80 IF K=8 CLS
100 IF K!=10 GOTO 20
110 COPY #D00,#900,768:SAVE

(2)パソコンへ絵を転送

IchigoJamとパソコンをUSBシリアルでつなぎます。
下のシリアル転送ツールを、パソコンからIchigoJamへ転送します。
(IJUtilitiesのプログラム転送を使う場合、転送前にNEWコマンドで絵のデータが消されてしまうので、シリアルウインドウにプログラムをペーストしてください)
ツールを起動すると、絵の表示用データがパソコン側に出力されます。
終了したら「UART 1,1」でシリアル設定を元に戻しておいてください。
(シリアル転送ツール)

10 CLV:CLS
15 COPY #900,#D00,768
20 UART 9,1:L=10
30 FOR A=#900 TO #B80 STEP 128
40 ?L;" LET [";(L-10)/10*8;"]";:D=0
50 FOR C=0 TO 7
60 FOR B=0 TO 15
70 D=D<<1:D=D+PEEK(A+C*16+B)
80 NEXT
90 ?",#";HEX$(D);
100 NEXT
110 ?:L=L+10:NEXT

(絵データの出力例)

10 LET [0],#0,#0,#3FF0,#80,#2010,#7C0,#2FD0,#5E0
20 LET [8],#2850,#AC0,#2850,#D40,#EFD0,#1AC0,#A010,#1580
30 LET [16],#BFF0,#1E00,#8000,#200,#BFF0,#700,#A010,#A80
40 LET [24],#E490,#200,#E490,#500,#2490,#0,#2490,#0
50 LET [32],#2010,#0,#3FF0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0

画面全体をそのままPOKEするプログラムだととても1kバイトに収まらないので、絵のドットの有無を0,1の1ビットにして、配列変数[0]~[47]にセットしています。

(3)表示プログラムを追加

転送された絵データに、表示プログラムを追加します。
(表示プログラム)

100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
170 IF !INKEY() CONT

(追加した例)

10 LET [0],#0,#0,#3FF0,#80,#2010,#7C0,#2FD0,#5E0
20 LET [8],#2850,#AC0,#2850,#D40,#EFD0,#1AC0,#A010,#1580
30 LET [16],#BFF0,#1E00,#8000,#200,#BFF0,#700,#A010,#A80
40 LET [24],#E490,#200,#E490,#500,#2490,#0,#2490,#0
50 LET [32],#2010,#0,#3FF0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
170 IF !INKEY() CONT

これで絵を表示するプログラムが完成します。

「イチゴ太郎 vs コロナ星人」プログラム

4コマの絵を描いて保存・出力し、ストーリー表示を追加しました。
IchigoJamのファイル0~3に保存して、「LRUN 0」で順番に読めます。何かキーを押すと次のコマへ移ります。

コマ0

f:id:shiro0922:20200529110028p:plain

10 LET [0],#0,#0,#3FF0,#80,#2010,#7C0,#2FD0,#5E0
20 LET [8],#2850,#AC0,#2850,#D40,#EFD0,#1AC0,#A010,#1580
30 LET [16],#BFF0,#1E00,#8000,#200,#BFF0,#700,#A010,#A80
40 LET [24],#E490,#200,#E490,#500,#2490,#0,#2490,#0
50 LET [32],#2010,#0,#3FF0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"イチゴタロウ ハ キョウモ タノシク プログラミング."
220 IF !INKEY() CONT
230 LRUN FILE()+1

コマ1

f:id:shiro0922:20200529111335p:plain

10 LET [0],#0,#0,#0,#30,#F,#48,#10,#8084
20 LET [8],#4820,#41FE,#3029,#40A8,#3020,#4000,#481F,#8000
30 LET [16],#9,#0,#19,#8000,#900,#0,#600,#2400
40 LET [24],#612,#1800,#90C,#1800,#C,#2400,#12,#0
50 LET [32],#0,#0,#0,#0,#0,#0,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"コロナセイジンガ セメテキタ!"
215 ?"[オマエタチヲ ウイルスニンギョウニ シテヤル!]";
220 IF !INKEY() CONT
230 LRUN FILE()+1

コマ2

f:id:shiro0922:20200529111418p:plain

10 LET [0],#0,#12,#0,#8C,#0,#20C,#C,#812
20 LET [8],#1F,#A100,#1F,#B440,#200D,#800,#7C0C,#8289
30 LET [16],#F412,#406,#6A12,#106,#5612,#49,#6B1E,#0
40 LET [24],#3500,#0,#F1F,#C000,#830,#4000,#1C35,#4000
50 LET [32],#2A15,#4000,#810,#4000,#141F,#C000,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"イチゴタロウノ ハンゲキ!"
215 ?"[ジドウ ショウドク スプレー!]";
220 IF !INKEY() CONT
230 LRUN FILE()+1

コマ3

f:id:shiro0922:20200529111449p:plain

10 LET [0],#0,#4000,#3,#E002,#1002,#F000,#85,#6020
20 LET [8],#6,#A000,#D,#6000,#80A,#C200,#F,#10
30 LET [16],#1,#0,#103,#8000,#8005,#4001,#1,#40
40 LET [24],#2,#8000,#F,#E000,#70,#1C00,#180,#300
50 LET [32],#239,#3880,#448,#4440,#934,#3C20,#0,#0
60 LET [40],#0,#0,#0,#0,#0,#0,#0,#0
100 A=#900
110 FOR V=0 TO 47
120 FOR B=15 TO 0 STEP -1
130 D=[V]&(1<<B)
140 POKE A,D!=0
150 A=A+1
160 NEXT:NEXT
200 LC 0,22
210 ?"イチゴタロウノ プログラミングデ"
215 ?"チキュウハ マモラレタ!  END";
220 IF !INKEY() CONT