/// <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; }
/// <summary> /// ウエストまたは暴投か /// </summary> /// <param name="cource"></param> /// <returns></returns> public static bool IsPitchOutOrWildPitch(PitchingCourse cource) { return cource == PitchingCourse.WildPitchBoll || cource == PitchingCourse.PitchOut; }
/// <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; }
/// <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; }
/// <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}; }