Exemple #1
0
        /// <summary>
        /// 路線目標の対象の種類に応じて路線を抽出
        /// </summary>
        /// <param name="lineGoalTarget"></param>
        /// <returns></returns>
        private IEnumerable <Line> ExtractLinesByTargetType(LineGoalTargetEnum lineGoalTarget)
        {
            IEnumerable <Line> target = lines;

            switch (lineGoalTarget)
            {
            case LineGoalTargetEnum.MostImportant:
                target = lines.Where(line => line.grade == LineGrade.MostImportant);
                break;

            case LineGoalTargetEnum.MostImportantAndMain:
                target = lines.Where(line => line.grade == LineGrade.MostImportant || line.grade == LineGrade.Main);
                break;

            case LineGoalTargetEnum.All:
                target = lines;
                break;
            }

            return(target);
        }
Exemple #2
0
        /// <summary>
        /// 目標達成状況のチェック
        /// </summary>
        /// <returns>true:目標達成 false:目標未達成</returns>
        /// <exception cref="GameOverException">ゲームオーバー</exception>
        private bool CheckAchievement()
        {
            if ((Year > SelectedMode.MYear) && (SelectedMode.MYear > 0))
            {
                throw new GameOverException("目標の達成に失敗しました。ゲームオーバーです。");
            }

            bool HasGoal = false;

            //路線作成目標
            if (SelectedMode.goalLineMake.HasValue)
            {
                LineGoalTargetEnum lineGoalTarget = SelectedMode.goalLineMake.Value;
                if (!ExtractLinesByTargetType(lineGoalTarget).All(line => line.IsExist))
                {
                    return(false);
                }
                HasGoal = true;
            }

            //技術開発目標
            foreach (var m in SelectedMode.goalTechDevelop)
            {
                switch (m.Key)
                {
                case PowerEnum.Steam:
                    if (m.Value == 0 && genkaiJoki == 0)
                    {
                        return(false);
                    }
                    else if (genkaiJoki < m.Value)
                    {
                        return(false);
                    }
                    break;

                case PowerEnum.Electricity:
                    if (m.Value == 0 && genkaiDenki == 0)
                    {
                        return(false);
                    }
                    else if (genkaiDenki < m.Value)
                    {
                        return(false);
                    }
                    break;

                case PowerEnum.Diesel:
                    if (m.Value == 0 && genkaiKidosha == 0)
                    {
                        return(false);
                    }
                    else if (genkaiKidosha < m.Value)
                    {
                        return(false);
                    }
                    break;

                case PowerEnum.LinearMotor:
                    if (m.Value == 0 && genkaiLinear == 0)
                    {
                        return(false);
                    }
                    else if (genkaiLinear < m.Value)
                    {
                        return(false);
                    }
                    break;
                }
                HasGoal = true;
            }

            //路線速度目標
            if (SelectedMode.goalLineBestSpeed.Item1.HasValue)
            {
                (LineGoalTargetEnum?, int)goalLineBestSpeed = SelectedMode.goalLineBestSpeed;
                LineGoalTargetEnum target = goalLineBestSpeed.Item1.Value;
                if (!ExtractLinesByTargetType(target).All(line =>
                                                          line.TotalNumberTrips(false) > 0 && line.CalcHyokaSpeed() >= goalLineBestSpeed.Item2))
                {
                    return(false);
                }
                HasGoal = true;
            }

            //路線収支目標
            if (SelectedMode.goalLineManage.HasValue)
            {
                LineGoalTargetEnum target = SelectedMode.goalLineManage.Value;
                if (!ExtractLinesByTargetType(target).All(line => line.incomeLastWeek - line.outlayLastWeek > 0))
                {
                    return(false);
                }
                HasGoal = true;
            }

            //所持金目標
            if (SelectedMode.goalMoney.HasValue)
            {
                long goal = SelectedMode.goalMoney.Value;
                if (Money < goal)
                {
                    return(false);
                }
                HasGoal = true;
            }

            //最後まで目標チェックをパスしたとき、目標があれば目標達成、目標が無ければ目標未達成扱い
            return(HasGoal);
        }