Пример #1
0
 /// <summary>
 /// ストライクか
 /// </summary>
 /// <param name="course"></param>
 /// <returns></returns>
 public static bool IsStrike(PitchingCourse course)
 {
     return course == PitchingCourse.Center ||
            course == PitchingCourse.Sweet ||
            course == PitchingCourse.Severe ||
            course == PitchingCourse.Corner;
 }
Пример #2
0
 /// <summary>
 /// ウエストまたは暴投か
 /// </summary>
 /// <param name="cource"></param>
 /// <returns></returns>
 public static bool IsPitchOutOrWildPitch(PitchingCourse cource)
 {
     return cource == PitchingCourse.WildPitchBoll || cource == PitchingCourse.PitchOut;
 }
Пример #3
0
        /// <summary>
        /// 投球コースを他の能力値と同様のスケールの能力数値に変換する
        /// </summary>
        /// <param name="course">コース</param>
        /// <param name="controlValue"></param>
        /// <param name="noMistake"></param>
        /// <returns>コースの良さを表す値</returns>
        private static double ConvertCourseToAbilityValue(PitchingCourse course, double controlValue, bool noMistake)
        {
            // コースの良さ=コース種別による変換(最大7/10) + 制球による補正(最大4/10)
            // 補正値:一定以上の制球力の場合のみプラス補正する
            // 値が1.1の理由:失投時は補正がなくなるため、能力15の時の期待値が1.0になるようにしている

            // 投球コースごとの変換で基礎値を決定
            double couceValue;
            switch (course)
            {
                case PitchingCourse.Center:
                    // 値:0
                    couceValue = Constants.MaxAbilityValue * 0;
                    break;
                case PitchingCourse.Sweet:
                    // 値:6(UI表示での1)
                    couceValue = Constants.MaxAbilityValue * 0.3;
                    break;
                case PitchingCourse.Severe:
                case PitchingCourse.Corner:
                    // 値:14(UI表示での9)
                    // (コーナーいっぱいはランダム性が高くバランス調整が面倒なので厳しいコースと同じにする)
                    couceValue = Constants.MaxAbilityValue * 0.7;
                    break;
                case PitchingCourse.ScantBall:
                case PitchingCourse.NormalBoll:
                    // 失投でボールになった球が打ちにくいと失投が弱くならないためボール球はコーナーいっぱいと同じとする
                    // (失投でないボール球は芯に当たってもファウルになりやすい補正が別途ある)
                    couceValue = Constants.MaxAbilityValue * 0.7;
                    // ちなみに以前はScantBollが値16、NormalBollが値20
                    //couceValue = Constants.MaxAbilityValue * 0.8;
                    //couceValue = Constants.MaxAbilityValue * 1.0;
                    break;
                default:
                    // それ以外のボール球(暴投、ウエスト)はスクイズかエンドランのみスイングする
                    // 値:30
                    couceValue = Constants.MaxAbilityValue * 1.5;
                    break;
            }

            // 失投でない場合は制球能力で追加補正
            double offsetValue = 0;
            if (noMistake)
            {
                // 一定以上の能力値の場合のみ追加補正
                offsetValue = GameMemberAbility.GetHigherValueOverBaseline(controlValue, Constants.MaxAbilityValue * 4 / 10);
            }

            // 基礎値と補正値を足した値をコース値とする
            return couceValue + offsetValue;
        }
Пример #4
0
        /// <summary>
        /// 失投した結果のコースを取得
        /// </summary>
        /// <param name="requestCourse">要求するコース</param>
        /// <param name="mistakeLevel">失投レベル</param>
        /// <param name="inOrOut"></param>
        /// <returns>失投結果のコース</returns>
        private static PitchingCourse MistakeControl(PitchingCourse requestCourse, int mistakeLevel, bool inOrOut)
        {
            PitchingCourse result;

            // コーナーを指定した場合、2段階失投する
            // (そうでないと厳しいコースを指定するより圧倒的に特になってしまうため)
            if (requestCourse == PitchingCourse.Corner)
            {
                mistakeLevel++;
            }

            // 失投する方向は引数より決定
            if (inOrOut)
            {
                // 真ん中方向に失投
                int resultInt = (int)requestCourse;
                do
                {
                    resultInt--;
                    // 失投レベルでコーナーをカウントしない
                    if (resultInt == (int)PitchingCourse.Corner)
                    {
                        resultInt--;
                    }
                    resultInt = Math.Max(resultInt, (int)PitchingCourse.Center);
                    result = (PitchingCourse)resultInt;
                    mistakeLevel--;
                }
                while (mistakeLevel > 0);
            }
            else
            {
                // ボール方向に失投
                int resultInt = (int)requestCourse;
                do
                {
                    resultInt++;
                    // 失投レベルでコーナーをカウントしない
                    if (resultInt == (int)PitchingCourse.Corner)
                    {
                        resultInt++;
                    }
                    resultInt = Math.Min(resultInt, (int)PitchingCourse.WildPitchBoll);
                    result = (PitchingCourse)resultInt;
                    mistakeLevel--;
                }
                while (mistakeLevel > 0);
            }

            return result;
        }
Пример #5
0
 /// <summary>
 /// ユーザが要求する投球データを設定する
 /// </summary>
 /// <param name="fastBoll"></param>
 /// <param name="course"></param>
 public void SetRequestPitchingBollData(bool fastBoll, PitchingCourse course)
 {
     GameData.RequestedPitchingBallData = new PitchingBallData(){IsFastBall = fastBoll, PitchingCourse = course};
 }