RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作 Meisyo

[Meisyo]スタミナ減少による球速低下が酷過ぎる件について

投稿日:

最近SQLばっかり書いているRです。早く適正なSQLを書きたいものです…。
とはいえ、ネットで書かれているようなことは一通り理解してできるようになりました。やったぜ。

今回は、タイトルの通り・・・

スタミナの減り方に比べて球速低下がヤバいよ!!

という切実な悩みです。というか、私も問題だと思ってました。

速球上げる → スタミナがないので球速が即死する → 打たれる
スタミナ上げる → 球速があまり無い → 打たれる

八方ふさがりじゃん!!ふぁっく!!1

最近やっと速球の地位向上を行えたのに、これでは速球投手の出番がない。

育成失敗例:

「やってみた。打たれたので後悔した。」うち(お馬高専)の元エースが死にました。
139km/h(速球60(C))、体力46(そんなに低くない)

防御率 13.35
WHIP 2.71

決して個人的にこの選手を使いたい訳ではない。決して。

というわけで、
下記3つのゲーム設定を確認してみようと思う。

1・速球設定
2・投手スタミナ設定
3・スタミナ低下による投手弱体化

それを見てから、実際の高校球児の速度減少を動画等で確認して、調整しよう!

1・速球設定

    function _disp_sp($st_sp, $cond, $disp = 0, $max = 0)
    {
        $rand = mt_rand(0, 200)/100 - 1;
        if($max)
        {
            $rand = 1;
        }
        $num = floor(0.8576 * $st_sp + 0.08 * $cond + 3.24 * $rand + 76.5);

        if(!$disp)
        {
            return $num;
        }
        else
        {
            return "<font style='font-size:14px;' title='{$st_sp}'>{$num}km/h</font>";
        }
    }

1. rand に「0~200の乱数 / 100 – 1」の値、平均0(範囲:-1~+1)が入る。

(max=1になるのは球速表示の時だけ)

2. 下記数式の計算が行われる

num(kmph) = floor(0.8576 * stsp + 0.08 * cond + 3.24 * rand + 76.5)
stsp:ステータスの速球
cond:調子(平均50)
rand:ランダム要素(範囲-1~+1)

例1:
速球60(C)の調子50投手
132.0~138.4 km/hくらいで投球できる

例2:
速球60(C)の調子80投手
134.4~140.8 km/hくらいで投球できる

例3:
速球45(D)の調子50投手
123.4~129.8 km/hくらいで投球できる

例4:
速球75(B)の調子50投手
140.6~147.0 km/hくらいで投球できる

実際投手として使えそうなのは・・・速球60(C)以上でしょうかね。
見た感じね。

2・投手スタミナ設定

    // HP出力
    function _game_pc_hpp($st, $hp = 0, $num = 0)
    {
        // HP計算
        $hp = $st * $hp / 100 * $this->_game_base_hpp();
        $hp_max = $st * $this->_game_base_hpp();
        if($hp < 0){ $hp = 0; }

        // HPパーセント取得
        $hp_per = ($hp - $num)/ $hp_max * 100;
        if($hp_per < 0){ $hp_per = 0; }

        return $hp_per;
    }

1. 各ステータスの代入

st:ステータス(体力)
hp:試合開始前の残りhp(最大100)
num:投球数

2. 現在の残りHPの導出

hpmax = st * 3
_game_base_hppは現在3です。
stは最大100なので、hpmaxの最大は300です。

(hpmax * hp / 100 - num) / hpmax
日本語にすると、残りhp割合(0.XX)* hpmax から投球数を引いて、hpmaxで割る。

「stが100でhpが100(疲労0)なら、最大300球投げたらhpがちょうど0になる」ってことですね。

一般的な体力40(E)で行くと、120球くらい投げたら体力0です。

3・スタミナ低下による投手弱体化

// HP補正値計算
if($G['pc_hp_per'] >= 30)
{
    $G['pc_hp_cor'] = $G['pc_hp_per'] / 700 + 6 / 7;
}
else
{
    $G['pc_hp_cor'] = $G['pc_hp_per'] * 0.03;
}
if($G['pc_hp_cor'] < 0){ $G['pc_hp_cor'] = 0; }

// 補正実行
$G['pc_hp_ar'] = ['S_p_sp', 'S_p_co', 'S_p_bb1n', 'S_p_bb2n', 'S_p_bb3n', 'p_bb0k', 'p_bb1k', 'p_bb2k', 'p_bb3k'];
foreach($G['pc_hp_ar'] as $str)
{
    $G['pc'][$str] = $G['pc'][$str] * $G['pc_hp_cor'];
}

解説

ステータスへ直接掛け算される係数があります。

その係数は、hp30までは最低でも6/7(0.86)、 補正値が+0.04(hp30)~0.14(hp100)あります。
つまり、、90%~100%は保証されています。

hp30以下は0(hp0)~0.9(hp30)と急低下します。

ただ、よく考えてみよう。

球速の数式、
num(kmph) = floor(0.8576 * stsp + 0.08 * cond + 3.24 * rand + 76.5)
stsp:ステータスの速球
cond:調子(平均50)
rand:ランダム要素(範囲-1~+1)

10%下がったらヤバくね・・・?という疑問。

というわけで、速球60(C)を10%下げて54にしてみましょう。
5.1 km/hくらい下がりますね。

体力40(E)と仮定するなら、最大120球投球可能。
84球投げたらそう(速球10%減少)なります・・・。って普通では?

計算自体は合ってるような気がしますが・・・?

もしかすると、HP計算の繰り越しにバグがあるのかもしれません。

実際に係数を出して、試合を眺めてみます・・・。

・・・?
おかしい。

体力70なのに、たった4回で・・・
球速139→125km/h(14キロ減)

HPは30減少し70へ。
係数は0.958で正常でした。

たぶん、繰り返し計算がおかしい。

ああ・・・ここか。

// 補正実行
$G['pc_hp_ar'] = ['S_p_sp', 'S_p_co', 'S_p_bb1n', 'S_p_bb2n', 'S_p_bb3n', 'p_bb0k', 'p_bb1k', 'p_bb2k', 'p_bb3k'];
foreach($G['pc_hp_ar'] as $str)
{
    $G['pc'][$str] = $G['pc'][$str] * $G['pc_hp_cor'];
}

コレ、1回なら問題ないんですが・・・。
係数を累乗して計算しちゃうんですよね・・・。

つまり、

数値 = 基礎値 * 係数 * 係数 * 係数….(投球回数分)

そりゃ減るわ!

というわけで、問題がわかりました。
この問題点を修正しました。

数値 = 初期値 * 係数
* 初期値をメモリに保持し続けるようにしています。

・・・投手が強くなりすぎるような気がするが、、、大丈夫か?

4・参考動画


伊良部とかが10回でも150キロ投げてた。完投してたすごい。楽しかった。

-Web制作, Meisyo

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[Meisyo]ver0.04へのアップデート

Meisyoがバージョン0.04になりました。 バージョンNo.の基準はありません。(1.00(正式リリース)が遠い) 下記機能が0.04で追加されました。 目的としては、「ユーザがゲームを長く楽しめ …

no image

[PHP]まとめ読みをPSRで改良する(3)

(2)の記事から「PDO」を使い、データの通信をオブジェクト化しました。 password_hashを使い、パスワード処理の暗号化も行いました。 PDOを導入する一番の理由は「mysql_query」 …

[Meisyo]野手起用法設定の導入

野手起用法設定の導入を行いました。 この変更で、 「勝ってる時だけ守備固めを出したい」 「負けてるから投手に代打してチャンスを作りたい」 という要望にお答えしました。 発想は野手起用法設定の導入検討の …

(VPSでつくる) Let’s EncryptでVPS上のWebサイトをSSL(HTTPS)接続にしよう

連載第十五回目です。 いや~この連載、長かったですね。まとめに1か月近くかかりました。 今回は、これまで作ってきたVPS環境のWebサイトをHTTPS接続に切り替えます。 HTTPS接続に切り替えるた …

[Meisyo]模擬戦の追加(テスト)vs 大阪桐蔭2018

模擬戦(NPC勝ち抜き戦)を追加しました! 模擬戦のコンセプトは「甲子園歴代優勝校と戦える場を」です。 経験値高め。もらえるアイテムも多いです。 挑戦には練習試合で7日に1回くらい拾える「試合チケット …