SHIROのIchigoJam日記

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

野球盤7Seg

野球盤」の7セグメントバージョンを作りました。数字が表示できるので、イニングやスコアの管理もIchigoJamがやります(^_^)
プレイ動画はこちら。撮影のためにテストプレイしたら壮絶な試合になりました…。動画が15分あるので注意してください。

ちなみに動画の試合のスコアボードはこんな感じです。延長12回の大熱戦でした。

000 001 021 112 =8
000 010 021 110 =6


遊び方

  • 基板上には、塁上のランナーを表す4個のLEDと、投球・数字・文字などを表示する7セグメントLEDがあります。
  • 各イニングの開始時に、7セグメントLEDでイニング数、表「∩」/裏「∪」、スコア(先攻−後攻)が表示されます。イニングや得点が10以上の場合は、10の位→1の位の順に表示します。
  • 各打者の打席前には、7セグメントLEDにアウトカウント(「o」+数字)が表示されます。
  • IchigoJamのボタンを押すとピッチャーが投球します。7セグメントLEDの上から時計回りにLEDが光るので(投げる度に球速が変わります)、下(4番目)のLEDが点いた瞬間にボタンを押して打ってください。打つタイミングによって打率が変わります。ボタンを押すのが遅過ぎたり、ボールが来る前にボタンを押してしまうと、三振になります。
  • 7セグメントLEDがルーレット式にピカピカ光った後に止まり、打撃結果が表示されます。三=三振、G=内野ゴロ、F=外野フライ、H=ヒットで、ヒットの後は数字が表示され、1=シングルヒット、2=ツーベース、3=スリーベース、4=ホームランです。
  • 三振、内野ゴロ、外野フライの場合、打者はアウトになり、アウトカウントが1つ増えます。7セグメントLEDでアウトカウントを表示します。
  • 安打の場合、打者走者および塁上のランナーが進塁します。ヒットは1個、ツーベースは2個、スリーベースは3個、ホームランは4個進塁します。ランナーがホームインすると得点が入り、7セグメントLEDで得点が表示されます。10点以上になると1の位だけ表示します。
  • ノーアウトまたは1アウトで外野フライを打つと、打者はアウトになりますが、塁上のランナーはタッチアップで1個進塁します。3塁ランナーがいた場合はホームインして1点入ります。
  • ノーアウトまたは1アウトで内野ゴロを打つと、打者はアウトになりますが、塁上のランナーは1個進塁します。3塁ランナーがいた場合はホームインして1点入ります。ただし1塁ランナーがいた場合はダブルプレイとなり、打者と1塁ランナーが共にアウトになります。
  • ボタンを押すと次の打者へ進行します。3アウトになるとそのイニングは終了し、次のイニングへ移ります。
  • 9回までで勝敗が決まれば試合終了です。9回表終了時に後攻チームがリードしていれば9回裏は無しでX勝利、9回裏攻撃中に後攻チームが逆転するとサヨナラ勝ちになります。9回を終わって同点の場合は延長戦に入り、決着が着くまで行われます。システム上は延長99回まで対応します。コールドゲームはありません。
  • 試合終了後は7セグメントLEDで結果スコアが表示されます。7セグメントLEDが消えている時にボタンを押すと、試合開始からリプレイします。
  • ピッチャーは時々「消える魔球」を投げます。その時は7セグメントLEDが光らないので、音だけを頼りに打ってください。

基板データ

(8/6 v0.3)抵抗・LEDのパッドを大きくして、はんだ付けしやすくしました。

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

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

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

プログラムリスト

スロット0:メインプログラム
1 '*Baseball-0
2 CLV:LET[0],63,6,91,79,102,109,125,39,127,111
3 LET[10],35,28,92,73,61,113,118,64:I=1
4 J=0
5 WAIT60:L=1:GSB32:BEEP20,30:WAIT30:OUT0:WAIT60
6 S=0:O=0:R=0:FORK=21TO24:[K]=0:NEXT
7 N=I:GSB34:OUT[10+J]:WAIT60:OUT0:WAIT60:GSB33
8 OUTR:WAIT60:OUTR+[12]:WAIT60:OUTR+[O]:WAIT60:OUTR:WAIT60:BEEP30,3
9 IF!BTN()CONT
10 W=RND(15)+5:L=RND(10)
11 FORA=1TO3:BEEP10,2:OUTA,L:WAITW:OUTA,0:NEXT
12 IFBTN()B=1:GOTO18
13 OUT4,1:CLT
14 IFTICK()>WB=1:GOTO18
15 IF!BTN()GOTO14
16 T=TICK():FORA=1TO10:Z=13+RND(4):OUTR+[Z]:BEEP20,2:WAIT10:OUT0:NEXT
17 B=7-RND(11+T):IFB<1B=1
18 LRUNFILE()+1,B*10
19 WAIT60
20 IFI>8&&J=1&&[28]<[29]GOTO27
21 IFO<3GOTO8
22 OUT0:WAIT60
23 IFI=9&&J=0&&[28]<[29]GOTO27
24 J=J+1:IFJ=1GOTO5
25 IFI>8&&[28]<>[29]GOTO27
26 I=I+1:GOTO4
27 L=1:GSB32:PLAY"L8GGGL4<C":WAIT90
28 GSB33:OUTR+[19]:CLT
29 IFBTN()RUN
30 IFTICK()<60GOTO29
31 GOTO28
32 FORA=1TO11:OUTA,L:NEXT:RTN
33 N=[28]:GSB34:OUTR+[17]:WAIT60:N=[29]:GSB34:RTN
34 IFN>9OUTR+[N/10]:WAIT60
35 OUTR+[N%10]:WAIT60:RTN
スロット1:打撃結果・走者・スコア処理
1 '*Baseball-1
10 '@K
11 OUTR+[13]:BEEP30,20
12 O=O+1:LRUNFILE()-1,19
20 '@GORO
21 OUTR+[14]:BEEP30,20
22 O=O+1:IF[24]&&O<3[24]=0:O=O+1
23 IFO<3&&R>0C=0:Q=1:GSB83
24 LRUNFILE()-1,19
30 '@FLY
31 OUTR+[15]:BEEP30,20:O=O+1
32 IFO<3&&R>0C=0:Q=1:GSB83
33 LRUNFILE()-1,19
40 '@HIT1
41 C=1:Q=1:GSB81
42 LRUNFILE()-1,19
50 '@HIT2
51 C=1:Q=2:GSB81
52 LRUNFILE()-1,19
60 '@HIT3
61 C=1:Q=3:GSB81
62 LRUNFILE()-1,19
70 '@HR
71 OUTR+[16]:PLAY"L8GECL2<C":WAIT60:C=1:Q=4:GSB82
72 LRUNFILE()-1,19
80 '@RUNSCR
81 OUTR+[16]:BEEP10,20
82 WAIT60:OUTR+[Q]
83 WAIT60:OUTR:WAIT60:GSB101:WAIT40
84 [25]=C:FORK=1TOQ:GSB91:NEXT
85 [21]=0:OUT11,0:GSB@PRTSR:RTN
90 '@R
91 BEEP:FORL=21TO24:[L]=[L+1]:NEXT:[25]=0:[28+J]=[28+J]+[21]:S=S+[21]:GSB101
92 WAIT40:RTN
100 @PRTSR
101 R=0:FORL=21TO24:R=R+[L]:R=R<<1:NEXT:R=R<<6
102 OUTR+[[28+J]%10]:RTN