Exemple #1
0
        /// <summary>
        /// 練習ごとの経験値
        /// </summary>
        /// <param name="kind">練習種別</param>
        /// <returns>経験値</returns>
        public int this[PracticeKind kind]
        {
            get
            {
                if (!Exp.ContainsKey(kind))
                {
                    // キーがなければ0を返す
                    return 0;
                }

                return Exp[kind];
            }
            set
            {
                Exp[kind] = value;
            }
        }
Exemple #2
0
 /// <summary>
 /// 投手用の練習か
 /// </summary>
 /// <param name="kind">練習種別</param>
 /// <returns>投手用の練習か</returns>
 public static bool IsPitcherPractice(PracticeKind kind)
 {
     return kind >= PracticeKind.Fastball && kind <= PracticeKind.Stamina;
 }
Exemple #3
0
 /// <summary>
 /// 練習が守備適正変更の練習か
 /// </summary>
 /// <param name="kind">練習種別</param>
 /// <returns>守備変更か</returns>
 private static bool IsChangeDefensePractice(PracticeKind kind)
 {
     return kind >= PracticeKind.ChangeCatcher && kind <= PracticeKind.ChangePitcher;
 }
Exemple #4
0
        /// <summary>
        /// 経験値を加算する
        /// </summary>
        /// <param name="kind">練習種別</param>
        /// <param name="addExp">加算する経験値</param>
        /// <param name="message">レベルアップメッセージ(なければnullを返す)</param>
        /// <returns>レベルアップしたか</returns>
        private bool AddExp(PracticeKind kind, int addExp, out string message)
        {
            // EXPを加算できるか判定
            if (!CanAddExp(kind))
            {
                // 加算できない場合は「おまかせ」に変更
                kind = PracticeKind.Random;
            }

            // 「おまかせ」の場合は種別を変換
            if (kind == PracticeKind.Random)
            {
                kind = GetRandamPraciceKind();
            }

            // 投手練習の場合は、項目が4つしかないため、そのまま加算すると野手能力に比べて成長し過ぎるため
            // 減算の補正をする
            if (PracticeKindHelper.IsPitcherPractice(kind))
            {
                addExp = (int)Math.Round((double)addExp * 8 / 10);
            }

            // 経験値の加算
            PracticeExp[kind] += addExp;

            // 守備位置変更の場合、1ヶ月分のメイン練習でレベルアップする
            if (IsChangeDefensePractice(kind) && PracticeExp[kind] >= EventConstants.MainPracticeExp)
            {
                PracticeExp[kind] = EventConstants.ExpByLevelUp;
            }

            // レベルアップしない場合は終了
            if (PracticeExp[kind] < EventConstants.ExpByLevelUp)
            {
                message = null;
                return false;
            }

            // 以下、レベルアップした場合

            #region 能力アップ
            // 能力をアップ
            int abilityValue = 0;
            switch (kind)
            {
                case PracticeKind.Meet:
                    FielderAbility.Meet++;
                    abilityValue = FielderAbility.Meet;
                    break;
                case PracticeKind.Power:
                    FielderAbility.Power++;
                    abilityValue = FielderAbility.Power;
                    break;
                case PracticeKind.Run:
                    FielderAbility.Run++;
                    abilityValue = FielderAbility.Run;
                    break;
                case PracticeKind.Defense:
                    FielderAbility.Defense++;
                    abilityValue = FielderAbility.Defense;
                    break;
                case PracticeKind.Wisdom:
                    FielderAbility.Wisdom++;
                    abilityValue = FielderAbility.Wisdom;
                    break;
                case PracticeKind.Fastball:
                    PitcherAbility.Fastball++;
                    abilityValue = PitcherAbility.Fastball;
                    break;
                case PracticeKind.Breakingball:
                    PitcherAbility.Breakingball++;
                    abilityValue = PitcherAbility.Breakingball;
                    break;
                case PracticeKind.Control:
                    PitcherAbility.Control++;
                    abilityValue = PitcherAbility.Control;
                    break;
                case PracticeKind.Stamina:
                    PitcherAbility.Stamina++;
                    abilityValue = PitcherAbility.Stamina;
                    break;
                case PracticeKind.ChangeCatcher:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.Catcher;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangeFirst:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.First;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangeSecond:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.Second;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangeThird:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.Third;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangeShort:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.Short;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangeLeft:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.Left;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangeCenter:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.Center;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangeRight:
                    // 守備適正の変更(守備変更時は守備力がダウンする)
                    UpdateSpecialAbilityFromPitcherToFielder();
                    FielderAbility.DefenseType = DefenseType.Right;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    break;
                case PracticeKind.ChangePitcher:
                    // 投手へのコンバート(守備変更時は守備力がダウンする)
                    FielderAbility.DefenseType = DefenseType.Pitcher;
                    if (FielderAbility.Defense > 0) FielderAbility.Defense -= 1;
                    // 野手→投手へのコンバート時は、野手の特殊能力がなくなり、投手の特殊能力を追加する
                    FielderAbility.SpecialFilederAbility = SpecialFilederAbility.Nothing;
                    PitcherAbility.SpecialPitcherAbility = (SpecialPitcherAbility)RandomCreater.GetRandomValue(
                        (int)SpecialPitcherAbility.Nothing + 1,
                        (int)SpecialPitcherAbility.Invalid - 1);
                    break;
                default:
                    throw new Exception("Invalid PracticeKind");
            }

            #endregion

            #region EXP減算

            // EXPを減算
            PracticeExp[kind] -= EventConstants.ExpByLevelUp;
            if (!CanAddExp(kind))
            {
                // 能力最大に達した場合、経験値をマイナスにしておく(ランダム向上時に選定されないようにするため)
                PracticeExp[kind] = -EventConstants.ExpByLevelUp;
            }

            #endregion

            #region メッセージ作成

            // 野手の場合は投手能力がアップしてもメッセージを生成しない(コンバートしない限り表示されない能力のため)
            if (FielderAbility.DefenseType != DefenseType.Pitcher && kind >= PracticeKind.Fastball && kind <= PracticeKind.Stamina)
            {
                message = null;
                return true;
            }

            // 守備変更時のメッセージ文字列
            if (IsChangeDefensePractice(kind))
            {
                message = string.Format("{0} {1} が {2} に変更。守備力が {3} から {4} にダウン!",
                                     GradeString, Name, FielderAbility.DefenseTypeString, FielderAbility.Defense + 1, FielderAbility.Defense);
                return true;
            }

            // 通常練習のメッセージ文字列
            string abilityName = StringEnumAttribute.GetStringValue(kind);
            message = string.Format("{0} {5} {1} の {2} が {3} から {4} にアップ!",
                                 GradeString, Name, abilityName, abilityValue - 1, abilityValue, FielderAbility.DefenseTypeString);
            return true;

            #endregion
        }
Exemple #5
0
        /// <summary>
        /// 練習によりExpを加算できるか(能力が最大に達していないか)
        /// </summary>
        /// <param name="kind"></param>
        /// <returns></returns>
        private bool CanAddExp(PracticeKind kind)
        {
            // 天才とオールGの場合は、能力値に上限がない
            if (InitialAbility == InitialAbility.D || InitialAbility == InitialAbility.G)
            {
                return true;
            }

            // 最大に達していなければtrue、最大に達していればtrueを返す
            switch (kind)
            {
                case PracticeKind.Meet:
                    return FielderAbility.Meet < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Power:
                    return FielderAbility.Power < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Run:
                    return FielderAbility.Run < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Defense:
                    return FielderAbility.Defense < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Wisdom:
                    return FielderAbility.Wisdom < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Fastball:
                    return PitcherAbility.Fastball < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Breakingball:
                    return PitcherAbility.Breakingball < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Control:
                    return PitcherAbility.Control < Constants.MaxDisplayAbilityValueByPractice;
                case PracticeKind.Stamina:
                    return PitcherAbility.Stamina < Constants.MaxDisplayAbilityValueByPractice;
                default:
                    // それ以外の練習は加算可能としてtrueを返す
                    return true;
            }
        }