SHIROのIchigoJam日記

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

野球盤Jam

シールド基板で、昔懐かしい「野球盤」を作ってみました。
たった11個のLEDでも、キミの想像力があればここはスタジアムだ!(^_^)
プレイ動画はこちら。

遊び方

  • LEDは、投球と塁上のランナーを表す黄色4個と、打撃結果やアウトカウント・得点を表す赤色7個があります。
  • IchigoJamのボタンを押すと投球します。黄色LEDが1塁(1B)→2塁(2B)→3塁(3B)→本塁(HB)の順に光るので(投げる度に球速が変わります)、ボールが本塁に来た瞬間にボタンを押して打ってください。打つタイミングによって打率が変わります。ボタンを押すのが遅過ぎたり、ボールが本塁に来る前にボタンを押してしまうと、三振になります。
  • 赤色LEDがルーレット式にピカピカ光った後に止まり、打撃結果が表示されます。K=三振、Goro=内野ゴロ、Fly=外野フライ、Hit=ヒット、2BH=ツーベース、3BH=スリーベース、HR=ホームランです。しばらく点灯した後、アウトカウント・得点・ランナー表示に移ります。
  • 三振、内野ゴロ、外野フライの場合、打者はアウトになり、アウトカウントが1つ増えます。内野の2個の赤色LEDでアウトカウントを表示します。3アウトチェンジの時は2個とも細かく点滅します。
  • 安打の場合、塁上のランナーが進塁します。ヒットは1個、ツーベースは2個、スリーベースは3個、ホームランは4個進塁します。ランナーがホームインすると得点が入り、外野の5個の赤色LEDで1〜5点の得点が表示されます。6点以上のビッグイニングになると0点表示になります(仕様です 笑)。
  • ノーアウトまたは1アウトで外野フライを打つと、打者はアウトになりますが、塁上のランナーはタッチアップで1個進塁します。3塁ランナーがいた場合はホームインして1点入ります。
  • ノーアウトまたは1アウトで内野ゴロを打つと、打者はアウトになりますが、塁上のランナーは1個進塁します。3塁ランナーがいた場合はホームインして1点入ります。ただし1塁ランナーがいた場合はダブルプレイとなり、打者と1塁ランナーが共にアウトになります。
  • ボタンを押すと次の打者へ進行します。3アウトになるとそのイニングは終了し、ボタンを押すと最初に戻ります。9回までの表・裏や合計得点の管理は人間がやってくださいm(_._)m
  • ピッチャーは時々「消える魔球」を投げます。その時は黄色LEDが光らないので、音だけを頼りに打ってください。

今時の子どもたちは「野球盤」とか「消える魔球」なんて知らないかな…?

基板データ

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

(C) 2018 Shiro Saito (http://d.hatena.ne.jp/shiro0922/)

このファイルをそのままFusion PCBで登録すれば、基板を発注できます。
基板寸法は61.3×59.8mmです。

部品表

※7/26修正:LEDを普通の輝度の物に替えました。超高輝度LEDを使うと、投球を注視すると眩しいです(^_^;)

プログラムリスト

プログラム0:メインプログラム
1 '*Baseball-0
2 IFBTN()CONT
3 WAIT30
4 CLV:L=1:GSB27:BEEP20,30:WAIT30
5 Q=0:FORI=8TO10:Q=Q+[I]:NEXT
6 L=0:GSB27
7 IF!BTN()CONT
8 W=RND(15)+5:L=RND(10)
9 FORI=8TO10:BEEP10,2:OUTI,L:WAITW:OUTI,0:NEXT
10 IFBTN()B=1:GOTO17
11 OUT11,1:CLT
12 IFTICK()>WB=1:GOTO17
13 IF!BTN()GOTO12
14 T=TICK():OUT11,0
15 FORI=1TO10:Z=RND(7)+1:OUTZ,1:BEEP20,2:WAIT10:OUTZ,0:NEXT
16 B=7-RND(11+T):IFB<1B=1
17 OUTB,1:LRUNFILE()+1,B*10
18 '@RET
19 WAIT60
20 FORI=1TO2:OUTI,I<=O:NEXT
21 FORI=3TO7:OUTI,0:NEXT:IFPOUTP+2,1
22 FORI=8TO11:OUTI,[I]:NEXT
23 IFO=3OUT1,1:OUT2,1:WAIT1:OUT1,0:OUT2,0:WAIT1
24 IF!BTN()GOTO23
25 IFO<3GOTO5
26 GOTO4
27 FORI=1TO11:OUTI,L:NEXT:RTN
プログラム1:打球・走者処理
1 '*Baseball-1
10 '@K
11 BEEP30,20
12 O=O+1:LRUNFILE()-1,18
20 '@GORO
21 BEEP30,20:O=O+1:IF[8][8]=0:O=O+1
22 IFO<3&&Q>0C=0:R=1:GSB80
23 LRUNFILE()-1,18
30 '@FLY
31 BEEP30,20:O=O+1
32 IFO<3&&Q>0C=0:R=1:GSB80
33 LRUNFILE()-1,18
40 '@HIT1
41 BEEP10,20:C=1:R=1:GSB80
42 LRUNFILE()-1,18
50 '@HIT2
51 BEEP10,20:C=1:R=2:GSB80
52 LRUNFILE()-1,18
60 '@HIT3
61 BEEP10,20:C=1:R=3:GSB80
62 LRUNFILE()-1,18
70 '@HR
71 PLAY"L8GECL2<C":WAIT130:C=1:R=4:GSB80
72 LRUNFILE()-1,18
80 '@RUNSCR
81 WAIT60:GSB101
82 [7]=C:FORJ=1TOR:GSB90:NEXT
83 [11]=0:OUT11,0:RTN
90 '@R
91 BEEP:FORI=11TO8STEP-1:[I]=[I-1]:NEXT:[7]=0:GSB101
92 P=P+[11]:FORI=3TO7:OUTI,0:NEXT:IF0<P&&P<6OUTP+2,1
93 WAIT40:RTN
100 @PRTR
101 FORI=8TO11:OUTI,[I]:NEXT:RTN

私がテストプレイした様子だと、やや打撃戦になる傾向があります。ゲームとしてはその方が面白いでしょう。
打率を調整したい時は、プログラム0の16行目「RND(11+T)」を「RND(10+T)」にすれば打率が上がり、「RND(12+T)」にすれば打率が下がります。「RND(12+T)」くらいの方が現実の試合に近いと思います。

(8/6追記)野球盤ルーレット

展示用に、簡単にルーレットで遊べるバージョンを作りました。
ボタンを押すとLEDがランダムに光り、打撃結果が表示されます。
ヒットならランナーが進塁して得点が入ります。
その後、得点が外野のLEDで、アウトカウントが内野のLEDで表示されます。

プログラム0:メインプログラム
1 '*Baseball-0 roulette
2 IFBTN()CONT
3 WAIT30
4 CLV:L=1:GSB20:BEEP20,30:WAIT30:OUT0
5 Q=0:FORI=8TO10:Q=Q+[I]:NEXT
6 IF!BTN()CONT
7 FORI=1TO7:OUTI,0:NEXT
8 FORI=1TO10:Z=RND(7)+1:OUTZ,1:BEEP20,2:WAIT10:OUTZ,0:NEXT
9 B=7-RND(11):IFB<1B=1
10 OUTB,1:LRUNFILE()+1,B*10
11 '@RET
12 WAIT60
13 FORI=1TO2:OUTI,I<=O:NEXT
14 FORI=3TO7:OUTI,0:NEXT:IFPOUTP+2,1
15 FORI=8TO11:OUTI,[I]:NEXT
16 IFO=3OUT1,1:OUT2,1:WAIT1:OUT1,0:OUT2,0:WAIT1
17 IF!BTN()GOTO16
18 IFO<3GOTO5
19 GOTO4
20 FORI=1TO11:OUTI,L:NEXT:RTN
プログラム1:打球・走者処理
1 '*Baseball-1 roulette
10 '@K
11 BEEP30,20
12 O=O+1:LRUNFILE()-1,12
20 '@GORO
21 BEEP30,20:O=O+1:IF[8]&&O<3[8]=0:O=O+1
22 IFO<3&&Q>0C=0:R=1:GSB80
23 LRUNFILE()-1,12
30 '@FLY
31 BEEP30,20:O=O+1
32 IFO<3&&Q>0C=0:R=1:GSB80
33 LRUNFILE()-1,12
40 '@HIT1
41 BEEP10,20:C=1:R=1:GSB80
42 LRUNFILE()-1,12
50 '@HIT2
51 BEEP10,20:C=1:R=2:GSB80
52 LRUNFILE()-1,12
60 '@HIT3
61 BEEP10,20:C=1:R=3:GSB80
62 LRUNFILE()-1,12
70 '@HR
71 PLAY"L8GECL2<C":WAIT130:C=1:R=4:GSB80
72 LRUNFILE()-1,12
80 '@RUNSCR
81 WAIT60:GSB101
82 [7]=C:FORJ=1TOR:GSB90:NEXT
83 [11]=0:OUT11,0:RTN
90 '@R
91 BEEP:FORI=11TO8STEP-1:[I]=[I-1]:NEXT:[7]=0:GSB101
92 P=P+[11]:FORI=3TO7:OUTI,0:NEXT:IF0<P&&P<6OUTP+2,1
93 WAIT40:RTN
100 @PRTR
101 FORI=8TO11:OUTI,[I]:NEXT:RTN