SHIROのIchigoJam日記

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

ハンドスピナーJam

先日、ながの電気クラブ主催の光るハンドスピナー工作教室を見学に行ってきました。
中国製のハンドスピナーキットを工作していたのですが、なかなか面白かったので、IchigoJamとLEDをのせたハンドスピナー基板を作ってみました。
動画はこちら。

【IchigoJam】ハンドスピナーJam

※(10/31)基板を新バージョンに更新

ビデオ端子やキーボード端子も付けたので、普通のIchigoJamとしても使えて、簡単にプログラミングできます。
ボタンが無いので、ファームウェア1.4βを入れて、「@ARUN」でプログラムを自動起動するといいでしょう。

基板データ

※(10/31)新バージョンに差し替え
*この基板ガーバーデータは、CC BYライセンスとします。どうぞご利用ください。

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

材料

プログラム

回転式バーサライタでハート形が見えます。
「VIDEO 0,2」で動作クロックを1/2に落としていますが、手で回す速度でちょうどいい感じに見えます。

100 @ARUN:'*POV Heart
110 VIDEO 0,2:CLV:OUT 8,0
120 [0]=`00001110
130 [1]=`00011111
140 [2]=`00111111
150 [3]=`01111110
160 [4]=`11111100
170 [5]=`01111110
180 [6]=`00111111
190 [7]=`00011111
200 [8]=`00001110
210 L=9
220 FOR I=0 TO L
230 OUT [I]
240 NEXT
250 GOTO 220

(8/9追記)「上田」と漢字を表示してみました。文字に依りますが、外側に寄せた方が見やすいようです。

100 @ARUN:'*POV Ueda
110 VIDEO 0,2:CLV:OUT 8,0
120 [ 0]=`01111111
130 [ 1]=`01001001
140 [ 2]=`01001001
150 [ 3]=`01111111
160 [ 4]=`01001001
170 [ 5]=`01001001
180 [ 6]=`01111111
190 [ 7]=`00000000
200 [ 8]=`00000001
210 [ 9]=`00001001
220 [10]=`00001001
230 [11]=`01111111
240 [12]=`00000001
250 [13]=`00000001
260 [14]=`00000001
270 L=15
280 FOR I=0 TO L
290 OUT [I]
300 NEXT
310 GOTO 280

IchigoJamスポーツ1.4

現在、IchigoJamの次期ファームウェア1.4が開発中で、β版が公開されています。
新機能として、以下のような機能が拡張される予定です。

  • グラフィックキャラクタを使った簡易グラフィック機能
  • 三角関数(COS、SIN)
  • スロット0のプログラム先頭行にラベル「@ARUN」を置くと、電源ON時にボタンを押さなくても自動起動
  • LEDテープ・WS2812Bの簡単制御
  • XキーをBTN(88)で入力検出

新機能を使ったミニゲーム集ペーパー「IchigoJamスポーツ1.4」を作ってみました。
ファームウェア1.4の環境でお試しください。
f:id:shiro0922:20190728142917p:plain

f:id:shiro0922:20190728142933p:plain

●PDFファイルはこちら。

プログラムリスト

大なわとびさっちゃん

まわるなわをふまないように、スペースキーでジャンプ!

【IchigoJam】大なわとびさっちゃん

10 CLV:CLS:Z=20
20 S=S+1
30 FOR T=-260 TO 90 STEP 10
40 DRAW X,Y,0
50 X=30+COS(T)/12
60 Y=22+SIN(T)/12
70 DRAW X,Y
80 LC 15,Z:?" "
90 IF J Z=Z+V:V=V+1
100 LC 15,Z:?"@"
110 IF V=6 J=0
120 IF !J && INKEY()=32 J=1:V=-5
130 NEXT
140 IF Z!=20 GOTO 20
150 ?S-1

ゴルフ

ホールをねらって、ボールをうて! なんかいで入れられるかな?
(1)ななめせんを上↑・下↓でうごかして、うつかくどをきめる
(2)スペースキーをながおしして、うつパワーをきめる

10 CLV:Z=10+RND(20)
20 CLS:S=S+1:?S:X=0:Y=0:T=20:P=0
30 LC 1,24:?CHR$(250);
40 LC Z,24:?CHR$(232);
50 DRAW 4,47,4+U,47-V,0
60 T=T+5*BTN(30)-5*BTN(31)
70 U=COS(T)/32:V=SIN(T)/32
80 DRAW 4,47,4+U,47-V
90 IF !BTN(32) GOTO 50
100 P=P+1:IF P>47 P=1
110 DRAW 0,47-P,1
120 WAIT 5
130 IF BTN(32) GOTO 100
140 U=U*P/2:V=V*P/2
150 X=X+U/32:Y=Y+V/32
160 DRAW 4+X,47-Y
170 V=V-8:WAIT 3
180 IF Y>0 GOTO 150
190 IF X/2=Z-2 LC 0,1:?"IN!":CLK:END
200 X=X+U/32
210 DRAW 4+X,47
220 U=U-16:WAIT 3
230 IF U>0 GOTO 190
240 WAIT 60
250 GOTO 20

PKチームバトル

5人ずつのチームでたいせん!
・キッカー(右がわの人):カーソルキー←(左)か→(右)でシュートほうこうをにゅうりょく
・キーパー(左がわの人):X(左)かスペース(右)でジャンプほうこうをにゅうりょく
2人でどうじにおす! キーパーとぎゃくにシュートがきまればせいこう!
キッカーとキーパーをこうたいしながらやろう
5人けってもきまらなければ、1人ずつサドンデス

1 '*PK Battle
2 CLV:VIDEO 3:G=-1
3 COPY 240*8,144*8,8
4 COPY 241*8,111*8,8
5 COPY 242*8,120*8,8
6 GSB 17:A=A+1:E=E+C
7 IF E-F>H-B M=0:GOTO 15
8 IF F-E>H-A M=1:GOTO 15
9 GSB 17:B=B+1:F=F+C
10 IF E-F>H-B M=0:GOTO 15
11 IF F-E>H-A M=1:GOTO 15
12 IF G>9 AND E>F M=0:GOTO 15
13 IF G>9 AND E<F M=1:GOTO 15
14 GOTO 6
15 LC 3,8:?"*";CHR$(65+M);" WIN!!*"
16 END
17 G=G+1:H=G/2+1:IF H<5 H=5
18 CLS:
19 LC 1,4:?"[=====";CHR$(249);"=====]"
20 X=7:LC X,10:?CHR$(233)
21 LC X,11:?CHR$(250);
22 GSB 35:D=0:K=0:CLK
23 D=BTN(29)-BTN(28)
24 K=BTN(32)-BTN(88)
25 IF D*K ELSE GOTO 23
26 BEEP 20:FOR Y=10 TO 6 STEP -1
27 LC X,Y:?" ":X=X+D
28 LC X,Y-1:?CHR$(233):WAIT 3
29 NEXT
30 LC 7,4:?"="
31 LC 7+K*5,4:?CHR$(252-K)
32 C=(D!=K):BEEP 30-C*20,30:[G]=2-C
33 GSB 35:WAIT 60
34 RTN
35 LC 0,1:?"A":?"B"
36 FOR I=1 TO H
37 LC I,0:?I%10
38 J=(I-1)*2
39 LC I,1:?CHR$(240+[J])
40 J=J+1
41 LC I,2:?CHR$(240+[J])
42 NEXT
43 RTN

PKバトル

以前作ったPK戦ゲームをシンプルにした「1人用PKバトル」と、チームで対戦する「PKチームバトル」を作ってみました。

1人用PKバトル


カーソルキーの左右でシュート方向を選びます。


キーパーの逆を突いてゴールが決まれば、次へ進みます。


キーパーに止められたらゲームオーバーです。
決めたゴール数が表示されます。

PKチームバトル


5人ずつのチームで、キッカーとキーパーを交替しながら対戦します。
キッカーはカーソルキーの左右、キーパーはZとXで方向を入力します。
(両者がキー入力すると、先へ進みます)


5人蹴った後に、勝ったチームが表示されて終了します。
(5人蹴る前に勝敗が決まった場合は、そこで終了します)


5人蹴っても勝負が着かない場合は、1人ずつのサドンデスになり、決着が着くまで行われます。


プログラム3行目の文字を変更すると、表示されるチーム名が変わります。

プログラムリスト:1人用PKバトル

10 CLV:VIDEO 7
20 CLS
30 LC 1,2:?CHR$(233);
40 LC 1,0:?CHR$(249)
50 D=BTN(29)-BTN(28)
60 IF !D GOTO 50
70 CLS:LC 1+D,1:?CHR$(233)
80 R=RND(2)*2-1
90 LC 1+R,0:?CHR$(252-R)
100 WAIT 60
110 IF D<>R S=S+1:GOTO 20
120 ?S

Web版はこちら。

プログラムリスト:PKチームバトル

1 '*PK Battle
2 CLV:VIDEO 3:G=-1
3 [100]="A":[101]="B"
4 COPY 240*8,144*8,8
5 COPY 241*8,111*8,8
6 COPY 242*8,120*8,8
7 GSB 18:A=A+1:E=E+C
8 IF E-F>H-B M=0:GOTO 16
9 IF F-E>H-A M=1:GOTO 16
10 GSB 18:B=B+1:F=F+C
11 IF E-F>H-B M=0:GOTO 16
12 IF F-E>H-A M=1:GOTO 16
13 IF G>9 AND E>F M=0:GOTO 16
14 IF G>9 AND E<F M=1:GOTO 16
15 GOTO 7
16 LC 3,8:?"*";CHR$(PEEK([100+M]));" WIN!!*"
17 END
18 G=G+1:H=G/2+1:IF H<5 H=5
19 CLS:
20 LC 1,4:?"[=====";CHR$(249);"=====]"
21 X=7:LC X,10:?CHR$(233)
22 LC X,11:?CHR$(250);
23 GSB 39:D=0:K=0:CLK
24 I=INKEY()
25 IF I=28 D=-1
26 IF I=29 D=1
27 IF I=90 K=-1
28 IF I=88 K=1
29 IF !D || !K GOTO 24
30 BEEP 20:FOR Y=10 TO 6 STEP -1
31 LC X,Y:?" ":X=X+D
32 LC X,Y-1:?CHR$(233):WAIT 3
33 NEXT
34 LC 7,4:?"="
35 LC 7+K*5,4:?CHR$(252-K)
36 C=(D!=K):BEEP 30-C*20,30:[G]=2-C
37 GSB 39:WAIT 60
38 RTN
39 LC 0,1:?CHR$(PEEK([100])):?CHR$(PEEK([101]))
40 FOR I=1 TO H
41 LC I,0:?I%10
42 J=(I-1)*2
43 LC I,1:?CHR$(240+[J])
44 J=J+1
45 LC I,2:?CHR$(240+[J])
46 NEXT
47 RTN

Web版はこちら。

入力をボタンやジョイスティックにしてチームバトルすると、かなり盛り上がるでしょう。
(キー入力部分は24~28行。Dがキッカー、Kがキーパーの方向。左が-1、右が1)
プログラムサイズが1kバイトギリギリなので、スペースを詰めないとボタン入力機能は入りませんが…。