シールド基板で、昔懐かしい「野球盤」を作ってみました。
たった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です。
プログラムリスト
プログラム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