Esempio n. 1
0
        /// <summary>
        /// 一球投球ハンドラ
        /// </summary>
        /// <param name="obj"></param>
        void GameManager_AfterPitchAndBat(PitchingBollResult obj)
        {
            m_TextBox.Text = obj.ToStringForDebug();

            label15.Text = m_GameManager.GameData.CurrentBatter.Player.Name;

            // 試合データ表示更新
            UpdateGameDataDisplay();
        }
Esempio n. 2
0
        /// <summary>
        /// 一球投球確定後ハンドラ
        /// </summary>
        /// <param name="obj"></param>
        private void m_GameManager_AfterPitchAndBat(PitchingBollResult obj)
        {
            // 高速試合モードか投球アニメ省略モードであれば何もしない
            if (m_GameManager.HighSpeedGameMode || OmitPitchingAnime)
            {
                return;
            }

            // 投球アニメーションの実行
            m_PitchingView.ExecuteAnimation();

            // アニメーションの実行時間を加算
            m_DispatcherTimer.Interval += UIConstants.PitchingBollAnimationSpan;
            if (GameData.LatestPitchingBollResult.PitchingBollResultKind != PitchingBollResultKind.BattingBoll)
            {
                // ミートしなかった場合、カウントコール表示分のアニメのために、少し長めに硬直
                // (現在は便宜的にテキスト表示時間を加算)
                m_DispatcherTimer.Interval += UIConstants.ShowTextAnimationSpan;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 投球を捕逸するか(捕逸する場合は打球データに設定)
        /// </summary>
        /// <param name="actualBall"></param>
        /// <param name="result"></param>
        private void JudgePassBoll(PitchingBallData actualBall, PitchingBollResult result)
        {
            // デバッグでの確率検証中は捕逸しない
            if (Constants.IsDebugValidationMode)
            {
                return;
            }

            // 三振か四死球かランナーがいない場合は捕逸しない
            if (GameData.StrikeCount == 3 || GameData.BallCount == 4 ||
                result.PitchingBollResultKind == PitchingBollResultKind.DeadBoll ||
                GameData.AllRunnerMembers.Count == 0)
            {
                return;
            }

            // ウエスト、ど真ん中、甘いコースは捕逸しない
            if (actualBall.PitchingCourse == PitchingCourse.PitchOut ||
                actualBall.PitchingCourse == PitchingCourse.Center || actualBall.PitchingCourse == PitchingCourse.Sweet)
            {
                return;
            }

            // 捕球成功率
            //   =(固定90%)+(守備力補正10%)-(守備力とコースによる変動25%)
            //   =(固定9/10)+ (守備力1/9)- (守備力とコースによる変動25%)
            //   厳しいコース、わずかにボール:期待値=90%+(2.5~10%)
            //   完全にボール:期待値=90%+(2.5~10%)-(0~9.4%)
            //   暴投        :期待値=90%+(2.5~10%)-(0~18.8%)
            GameMemberAbility memberAbility = GameData.GetDefenseMemberAbility(DefensePosition.Catcher);
            double JudgmentAbilityVallue = Constants.MaxAbilityValue * 9 / 10 + memberAbility.Defense / 10;
            if (actualBall.PitchingCourse == PitchingCourse.NormalBoll)
            {
                // 完全にボールの場合、最小値5で最大値20ならば、実質0%~9.375%の成功率低下
                JudgmentAbilityVallue -= GameMemberAbility.GetLowerValue(memberAbility.Defense, Constants.MaxAbilityValue) / 8;
            }
            if (actualBall.PitchingCourse == PitchingCourse.WildPitchBoll)
            {
                // 暴投の場合、最小値5で最大値20ならば、実質0%~18.75%の成功率低下
                JudgmentAbilityVallue -= GameMemberAbility.GetLowerValue(memberAbility.Defense, Constants.MaxAbilityValue) / 4;
            }

            int failDelta;
            if (!memberAbility.JudgByRandom(JudgmentAbilityVallue, out failDelta))
            {
                // 捕逸する
                // 打球と同じ扱いにするため、打球データを設定する
                // 打球速度は走塁速度と同程度の速度をランダムに設定(捕手が追いつける程度にするため)
                result.BattedBoll = new BattedBoll();
                result.BattedBoll.IsPassBoll = true;
                result.BattedBoll.SideDirection = RandomCreater.GetRandomValue(-190, -170);
                int bollSpeedValue = RandomCreater.GetRandomValue((int)Constants.SpecialAbilityBasicValue, (int)Constants.MaxAbilityValue);
                result.BattedBoll.Speed = bollSpeedValue * Constants.RunSpeedOffSet;

                // 成績更新(わかりやすいようにすべて投手の暴投としてカウントする)
                GameData.AddWildPitch(GameData.CurrentPitcherAbirity.GameMember);
            }
        }