この記事は
一生遊べる野球ゲーム 【ベストプレープロ野球】
をエクセルVBAでオリジナルリーグを作成するツールを作り、自分だけの世界を楽しんでもらえる参考になればと思い書いております。
すでに自作ツールで運用している方にも良い刺激になればと思っております。
前 回 まで
・野手シートと投手シートの選手名を自動で作成しました。
・リーグ運営の設定表作成(選手の能力・成長 決定)
今回は16歳時の (高校入学~1年生) 野手の能力を決定していきたいと思います。
野手モジュール の作成
いよいよ野手作成のプログラムを作っていきます。
開発エクスプローラーから 標準モジュールフォルダを選択、標準モジュールフォルダを挿入して、名前を野手編に変更します。(分かりやすくするため)
前回作った名前作成を使用しながらベスプレ用能力と各能力指数と成長補正指数を作成します。
【野手シート】
名前の行…ベスプレで実際に使う各パラメータ
名前の下の行…このツール内での各能力指数(前回の設定表を参照して、ベスプレで実際に使う各パラメータを割り出す為の指数)
さらにその下の行…その選手独自の各能力の成長補正値です。(能力Upのみ確率に加算します。)
成長確率が、
9で9-5=4%アップします。ダウン確率が5-9=4%ダウンします。
1で1-5=4%ダウンします。ダウン確率が5-1=4%アップします。
↓のプログラムを野手編ジュールに作成します。
‘Newleague True:新規球団作成 False:2年目以降の新人・外人作成
Public Sub 野手作成(SName As String, Optional Newleague As Boolean = True)
‘ 開発開始日 : 2019/11/13 ユーザー名 : ZAKI
Dim y As Byte ‘野手の作成ループ回数
Dim i As Integer ‘ループ変数
Dim j As Byte ‘野手の作成開始:新規=0 2年目以降=24
Dim Low As Byte ‘ワークシートの行
Dim Col As Byte ‘ワークシートの列
Dim Hosei(2) As Byte ‘成長タイプにおける初期補正値0:(心),1:(技),2:(体)
Dim Point As Byte ‘一時格納変数(守備:守備指数、打撃指数:補正指数、特徴:特徴コード)
Dim BStyle As String ‘打席タイプ
Dim Syubi As Byte ‘メイン守備位置
Dim Jinsyu As String ‘人種
Dim Bk_Sisu(1) As Byte ‘能力値決定時一時保管用
Dim UnicPoint As Byte ‘選手の能力成長補正ポイント:成長確率に加算
Worksheets(SName).Activate
‘選手名を作成
If Newleague = True Then
Call Get_Name(SName, True)
j = 0
Else
Call Get_Name(SName, False)
j = 36
End If
‘選手数分だけループ
For y = j To 43
‘初期変数設定
Low = 3
Low = Low + (y * 3) ‘選手数分だけ行をずらす。
Col = 3
i = 0
Point = 0
‘名前部分を選択
Cells(Low – 1, 1).Select
Selection.Font.ColorIndex = 0
‘外人対策
If Newleague = False And Cells(Low, 2) > 1 Then
Else
‘今季年齢決定
Select Case y
Case Is <= 33 ‘既存選手
Cells(Low, Col – 1) = 18 + (Saikoro(17)) + 1
Case Is >= 39 ‘新人
Cells(Low, Col – 1) = 18 + ((Saikoro(4) * 2) – 2) + 1
Case Else ‘外人
Cells(Low, Col – 1) = 25 + (Saikoro(9)) + 1
End Select
‘初期年齢設定
Cells(Low – 1, Col – 1) = 16
‘基本能力値決定(項目分だけ作成):i=0心:i=20打撃指数
For i = 0 To 20
‘守備から打撃指数までは(1~128)
‘肩と選球眼と体力と打撃指数は2回の内どちらか良い方を選択
If i >= 5 And i <= 20 Then
If i = 10 Or i = 11 Or i = 13 Or i = 15 Or i = 20 Then
Bk_Sisu(0) = Saikoro(128)
Bk_Sisu(1) = Saikoro(128)
If Bk_Sisu(0) > Bk_Sisu(1) Then
Cells(Low, Col + i) = Bk_Sisu(0)
Else
Cells(Low, Col + i) = Bk_Sisu(1)
End If
Else
Cells(Low, Col + i) = Saikoro(128)
End If
Else
Cells(Low, Col + i) = Saikoro(100)
End If
‘選手の能力成長補正ポイントを作成・書き込み
If Col + i > 7 Then
Cells(Low + 1, Col + i) = Saikoro(9)
End If
Next i
‘人種判定:行により決定:外人は外人枠から移動しない為
If y > 34 And y < 40 Then
Jinsyu = “外人”
Else
Jinsyu = “日本人”
End If
‘成長タイプ確定:心・技・体
For i = 0 To 2
Cells(Low – 1, Col + i) = Get_SeityoType(Cells(Low, Col + i).Value, i, Point, Jinsyu)
‘成長タイプにおける初期補正値獲得
Hosei(i) = Point
Next i
‘変数の値変更
Col = Col + 3
‘打席確定
Cells(Low – 1, Col) = Get_Daseki(Cells(Low, Col))
BStyle = Cells(Low – 1, Col)
‘変数の値変更
Col = Col + 1
‘タイプ確定
Cells(Low – 1, Col) = Get_Type(Cells(Low, Col))
BStyle = BStyle & Cells(Low – 1, Col)
‘全守備力確定:
Point = 0
For i = 1 To 6
‘外人のファーストと外野以外の守備力を下げる。
If Jinsyu = “外人” Then
If i <> 2 And i <> 6 Then
Cells(Low, Col + i) = Int((Cells(Low, Col + i) + Hosei(1) – 10) * 0.9)
Else
Cells(Low, Col + i) = (Cells(Low, Col + i) + Hosei(1))
End If
Else
Cells(Low, Col + i) = (Cells(Low, Col + i) + Hosei(1))
End If
‘最大守備力取得:Point=Max守備力
If Point < Cells(Low, Col + i) Then
Point = Cells(Low, Col + i)
Syubi = i
End If
‘各守備力を一時的に決定
Cells(Low – 1, Col + i) = Get_Nouryoku(Cells(Low, Col + i))
Next i
Point = 0
‘最終守備力確定
For i = 1 To 6
‘最大守備位置以外削除
If i <> Syubi Then
Cells(Low – 1, Col + i) = “”
Else
‘本職の守備位置書き込み
Select Case Syubi
Case 1
Cells(Low + 1, 1) = “捕手”
Case 2
Cells(Low + 1, 1) = “ファースト”
Case 3
Cells(Low + 1, 1) = “セカンド”
Case 4
Cells(Low + 1, 1) = “サード”
Case 5
Cells(Low + 1, 1) = “ショート”
Case Else
Cells(Low + 1, 1) = “外野”
End Select
End If
‘キャッチャーの他の守備力を下げる。
If Syubi = 1 And i <> 1 Then
Point = Point + Int(Cells(Low, Col + i) * 0.1)
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 0.9)
End If
‘内野手の他の守備力を上げる。
If Syubi = 2 And i = 6 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 1.1)
End If
If Syubi = 3 And i <> 3 And i >= 2 And i < 5 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 1.2)
ElseIf Syubi = 3 And i = 5 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 1.1)
End If
If Syubi = 4 And i <> 4 And i = 2 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 1.2)
ElseIf Syubi = 4 And i = 3 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 1.1)
End If
If Syubi = 5 And i <> 5 And i >= 3 And i < 6 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 1.2)
ElseIf Syubi = 5 And i = 6 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 1.1)
End If
‘外野手の他の守備力を下げる。
If Syubi = 6 And i <> 6 And i <> 2 Then
Cells(Low, Col + i) = Int(Cells(Low, Col + i) * 0.9)
End If
Next i
‘変数の値変更
Col = Col + 7
‘肩力決定
If Syubi = 1 Then
If Cells(Low, Col) = ((Cells(Low, Col) + Hosei(2)) + Point) > 245 Then
Cells(Low, Col) = 245
Else
Cells(Low, Col) = ((Cells(Low, Col) + Hosei(2)) + Point)
End If
Else
Cells(Low, Col) = (Cells(Low, Col) + Hosei(2))
End If
Cells(Low – 1, Col) = Get_Nouryoku(Cells(Low, Col))
‘変数の値変更
Col = Col + 1
‘走力決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(1)
Cells(Low – 1, Col) = Get_Nouryoku(Cells(Low, Col))
‘変数の値変更
Col = Col + 1
‘選球眼決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(0)
Cells(Low – 1, Col) = Get_Nouryoku(Cells(Low, Col))
‘変数の値変更
Col = Col + 1
‘実績決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(0)
Cells(Low – 1, Col) = Get_Nouryoku(Cells(Low, Col))
‘変数の値変更
Col = Col + 1
‘体力決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(2)
Cells(Low – 1, Col) = Get_Nouryoku(Cells(Low, Col))
‘変数の値変更
Col = Col + 1
‘好打決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(1)
Cells(Low – 1, Col) = Get_Nouryoku(Cells(Low, Col))
‘変数の値変更
Col = Col + 1
‘長打決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(2)
Cells(Low – 1, Col) = Get_Nouryoku(Cells(Low, Col))
‘変数の値変更
Col = Col + 1
‘信頼決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(0)
Cells(Low – 1, Col) = Get_Sinrai(Cells(Low, Col), BStyle)
‘変数の値変更
Col = Col + 1
‘対左決定
Cells(Low, Col) = Cells(Low, Col) + Hosei(0)
Cells(Low – 1, Col) = Get_KillLeft(Cells(Low, Col), BStyle)
‘変数の値変更
Col = Col + 1
Point = 0
‘打撃指数決定(下記指数UP)
‘L打者+10:B打者+5:打者タイプS+10
If Left(BStyle, 1) = “L” Then
Point = Point + 10
ElseIf Left(BStyle, 1) = “B” Then
Point = Point + 5
End If
If Right(BStyle, 1) = “S” Then
Point = Point + 10
End If
Cells(Low, Col) = Cells(Low, Col) + Hosei(1) + Point
Cells(Low – 1, Col) = Get_Daritu(Cells(Low, Col))
End If
Next y
End Sub
↑ここまでです。
長いですがプログラムを野手編ジュールに作成しました。
さらにこのプログラムのサブルーチンとして、
↓のプログラムを野手編ジュールに作成します。
Public Function Get_Daseki(Atai As Byte) As String
Select Case Atai
Case Is <= Sheets(“設定表”).Range(“D3”)
Get_Daseki = Sheets(“設定表”).Range(“E3”)
Case Is <= Sheets(“設定表”).Range(“D4”)
Get_Daseki = Sheets(“設定表”).Range(“E4”)
Case Else
Get_Daseki = Sheets(“設定表”).Range(“E5”)
End Select
End Function
Public Function Get_Type(Atai As Byte) As String
Select Case Atai
Case Is <= 60
Get_Type = Sheets(“設定表”).Range(“E8”)
Case Else
Get_Type = Sheets(“設定表”).Range(“E9”)
End Select
End Function
Public Function Get_Sinrai(Atai As Byte, BStyle As String) As String
If Right(BStyle, 1) = “P” And Atai < 245 Then
Atai = Atai + 10
End If
Select Case Atai
Case Is >= Sheets(“設定表”).Range(“B27”)
Get_Sinrai = Sheets(“設定表”).Range(“E27”)
Case Is >= Sheets(“設定表”).Range(“B28”)
Get_Sinrai = Sheets(“設定表”).Range(“E28”)
Case Is >= Sheets(“設定表”).Range(“B29”)
Get_Sinrai = Sheets(“設定表”).Range(“E29”)
Case Is >= Sheets(“設定表”).Range(“B30”)
Get_Sinrai = Sheets(“設定表”).Range(“E30”)
Case Is >= Sheets(“設定表”).Range(“B31”)
Get_Sinrai = Sheets(“設定表”).Range(“E31”)
End Select
End Function
Public Function Get_KillLeft(Atai As Byte, BStyle As String) As String
If Right(BStyle, 1) = “S” And Atai < 245 Then
Atai = Atai + 10
End If
Select Case Left(BStyle, 1)
Case “B”
Atai = 70
Case “L”
Atai = Int(Atai / 3)
Case “R”
If Atai <= 50 Then
Atai = 50
End If
End Select
Select Case Atai
Case Is >= Sheets(“設定表”).Range(“B34”)
Get_KillLeft = Sheets(“設定表”).Range(“E34”)
Case Is >= Sheets(“設定表”).Range(“B35”)
Get_KillLeft = Sheets(“設定表”).Range(“E35”)
Case Is >= Sheets(“設定表”).Range(“B36”)
Get_KillLeft = Sheets(“設定表”).Range(“E36”)
Case Is >= Sheets(“設定表”).Range(“B37”)
Get_KillLeft = Sheets(“設定表”).Range(“E37”)
Case Is >= Sheets(“設定表”).Range(“B38”)
Get_KillLeft = Sheets(“設定表”).Range(“E38”)
End Select
End Function
Public Function Get_Daritu(Atai As Byte) As Integer
Get_Daritu = (Int(Atai / 8) * 5) + 200
End Function
↑ここまでです。
共通モジュール に追加
野手モジュールは野手のみのプログラムでしたが、
野手・投手 共通のプログラムを共通モジュールに追加します。
↓のプログラムを共通ジュールに追加します。
Public Function Get_SeityoType(Atai As Byte, i As Integer, Hosei As Byte, Syubetu As String) As String
Select Case Atai
Case Is <= 25
Get_SeityoType = “早熟”
Select Case i
Case 0
Hosei = Sheets(“設定表”).Cells(30, 9)
If Syubetu = “外人” Then
Hosei = Hosei + 30
End If
Case 1
Hosei = Sheets(“設定表”).Cells(30, 10)
If Syubetu = “外人” Then
Hosei = Hosei + 10
End If
Case Else
Hosei = Sheets(“設定表”).Cells(30, 11)
If Syubetu = “外人” Then
Hosei = Hosei + 60
End If
End Select
Case Is <= 65
Get_SeityoType = “普通”
Select Case i
Case 0
Hosei = Sheets(“設定表”).Cells(30, 12)
If Syubetu = “外人” Then
Hosei = Hosei + 30
End If
Case 1
Hosei = Sheets(“設定表”).Cells(30, 13)
If Syubetu = “外人” Then
Hosei = Hosei + 10
End If
Case Else
Hosei = Sheets(“設定表”).Cells(30, 14)
If Syubetu = “外人” Then
Hosei = Hosei + 60
End If
End Select
Case Is <= 85
Get_SeityoType = “晩成”
Select Case i
Case 0
Hosei = Sheets(“設定表”).Cells(30, 15)
If Syubetu = “外人” Then
Hosei = Hosei + 30
End If
Case 1
Hosei = Sheets(“設定表”).Cells(30, 16)
If Syubetu = “外人” Then
Hosei = Hosei + 10
End If
Case Else
Hosei = Sheets(“設定表”).Cells(30, 17)
If Syubetu = “外人” Then
Hosei = Hosei + 60
End If
End Select
Case Is <= 95
Get_SeityoType = “安定”
Select Case i
Case 0
Hosei = Sheets(“設定表”).Cells(30, 18)
If Syubetu = “外人” Then
Hosei = Hosei + 30
End If
Case 1
Hosei = Sheets(“設定表”).Cells(30, 19)
If Syubetu = “外人” Then
Hosei = Hosei + 10
End If
Case Else
Hosei = Sheets(“設定表”).Cells(30, 20)
If Syubetu = “外人” Then
Hosei = Hosei + 60
End If
End Select
Case Else
Get_SeityoType = “持続”
Select Case i
Case 0
Hosei = Sheets(“設定表”).Cells(30, 21)
If Syubetu = “外人” Then
Hosei = Hosei + 30
End If
Case 1
Hosei = Sheets(“設定表”).Cells(30, 22)
If Syubetu = “外人” Then
Hosei = Hosei + 10
End If
Case Else
Hosei = Sheets(“設定表”).Cells(30, 23)
If Syubetu = “外人” Then
Hosei = Hosei + 60
End If
End Select
End Select
End Function
Public Function Get_Nouryoku(Atai As Byte, Optional BytHosei As Byte = 0) As String
If Atai < 240 Then
Atai = Atai + BytHosei
End If
Select Case Atai
Case Is >= Sheets(“設定表”).Range(“B19”)
Get_Nouryoku = Sheets(“設定表”).Range(“E19”)
Case Is >= Sheets(“設定表”).Range(“B20”)
Get_Nouryoku = Sheets(“設定表”).Range(“E20”)
Case Is >= Sheets(“設定表”).Range(“B21”)
Get_Nouryoku = Sheets(“設定表”).Range(“E21”)
Case Is >= Sheets(“設定表”).Range(“B22”)
Get_Nouryoku = Sheets(“設定表”).Range(“E22”)
Case Is >= Sheets(“設定表”).Range(“B23”)
Get_Nouryoku = Sheets(“設定表”).Range(“E23”)
Case Else
Get_Nouryoku = Sheets(“設定表”).Range(“E24”)
End Select
End Function
↑ここまでです。共通ジュールにプログラムを追加しました。
ここでは、選手の成長タイプや能力指数を書き込んでます。
プログラム を 動かして 確認する。
これで 初期の野手選手(成長前)のデータが出来上がりました。
開発画面、一番下のイミティエイト ウィンドウ に
野手作成(”T_野手”)
と打ち込んで ENTER キーを打ち込めば
各パラメータの入ったシートが出来上がります。
【野手シート】
名前の行…ベスプレで実際に使う各パラメータ
名前の下の行…このツール内での各能力指数(前回の設定表を参照して、ベスプレで実際に使う各パラメータを割り出す為の指数)
さらにその下の行…その選手独自の各能力の成長補正値です。(能力Upのみ確率に加算します。)
成長確率が、
9で9-5=4%アップします。ダウン確率が5-9=4%ダウンします。
1で1-5=4%ダウンします。ダウン確率が5-1=4%アップします。
ベストプレープロ野球を知りたい方は
ベストプレープロ野球 ソフトのお求めは⇓の画像から(Win,GBA,PS2)