Beispiel #1
0
        /// <summary>
        /// 車両開発
        /// </summary>
        /// <param name="name"></param>
        /// <param name="bestSpeed"></param>
        /// <param name="power"></param>
        /// <param name="gauge"></param>
        /// <param name="seat"></param>
        /// <param name="tilt"></param>
        public void DevelopVehicle(string name, int bestSpeed, PowerEnum power, CarGaugeEnum gauge, SeatEnum seat, CarTiltEnum tilt)
        {
            (bool can, _) = CheckCreateVehicle(name, bestSpeed, power, gauge, seat, tilt);

            if (!can)
            {
                throw new InvalidOperationException("車両を開発可能な技術が揃っていません");
            }

            SpendMoney(CalcDevelopVehicleCost(bestSpeed, power, gauge, seat, tilt));

            vehicles.Add(new Car
            {
                Name      = name,
                bestSpeed = bestSpeed,
                power     = power,
                gauge     = gauge,
                seat      = seat,
                carTilt   = tilt,
                type      = power == PowerEnum.LinearMotor ? RailTypeEnum.LinearMotor : RailTypeEnum.Iron,
                money     = CalcPurchaseVehicleCost(bestSpeed, power, gauge, seat, tilt),
            });
        }
Beispiel #2
0
        /// <summary>
        /// 指定の車両が開発可能か
        /// </summary>
        /// <returns>開発可否 メッセージ</returns>
        public (bool CanCreateVehicle, string msg) CheckCreateVehicle(string Name, int BestSpeed, PowerEnum Power, CarGaugeEnum Gauge, SeatEnum Seat, CarTiltEnum tilt)
        {
            if (string.IsNullOrWhiteSpace(Name))
            {
                return(false, "名無しの権兵衛です");
            }

            if (Power == PowerEnum.LinearMotor)
            {
                if (genkaiLinear == 0)
                {
                    return(false, "リニアは作れません");
                }
                else if (BestSpeed > genkaiLinear)
                {
                    return(false, "速すぎます");
                }
            }

            if (Gauge == CarGaugeEnum.FreeGauge && !isDevelopedFreeGauge)
            {
                return(false, "フリーゲージは作れません");
            }

            if (Power == PowerEnum.Steam)
            {
                if (!IsSteamAvailable())
                {
                    return(false, "時代遅れです");
                }
                if (BestSpeed > genkaiJoki)
                {
                    return(false, "速すぎます");
                }
            }

            if (Power == PowerEnum.Electricity)
            {
                if (genkaiDenki == 0)
                {
                    return(false, "電車は作れません");
                }
                else if (BestSpeed > genkaiDenki)
                {
                    return(false, "速すぎます");
                }
            }

            if (Power == PowerEnum.Diesel)
            {
                if (genkaiKidosha == 0)
                {
                    return(false, "ディーゼルは作れません");
                }
                else if (BestSpeed > genkaiKidosha)
                {
                    return(false, "速すぎます");
                }
            }

            if (Seat == SeatEnum.Dual && !isDevelopedDualSeat)
            {
                return(false, "デュアル不可");
            }
            if (Seat == SeatEnum.Convertible && !isDevelopedConvertibleCross)
            {
                return(false, "転換式クロス不可");
            }
            if (Seat == SeatEnum.RetructableLong && !isDevelopedRetructableLong)
            {
                return(false, "収納式ロング不可");
            }
            if (Seat == SeatEnum.Rich && !isDevelopedRichCross)
            {
                return(false, "豪華クロス不可");
            }
            if (Seat == SeatEnum.DoubleDeckerRich && !isDevelopedRichCross)
            {
                return(false, "豪華クロス不可");
            }

            switch (tilt)
            {
            case CarTiltEnum.Pendulum:
                if (!isDevelopedCarTiltPendulum)
                {
                    return(false, "振り子式車体傾斜装置は未開発");
                }
                break;

            case CarTiltEnum.SimpleMecha:
            case CarTiltEnum.HighMecha:
                if (!isDevelopedMachineTilt)
                {
                    return(false, "機械式式車体傾斜装置は未開発");
                }
                break;
            }

            return(true, "");
        }
Beispiel #3
0
        /// <summary>
        /// 車両購入コスト計算
        /// </summary>
        /// <param name="bestSpeed"></param>
        /// <param name="power"></param>
        /// <param name="gauge"></param>
        /// <param name="seat"></param>
        /// <param name="tilt"></param>
        /// <param name="genkaiLinear"></param>
        /// <param name="genkaiJoki"></param>
        /// <param name="genkaiDenki"></param>
        /// <param name="genkaiKidosha"></param>
        /// <returns></returns>
        public static int CalcPurchaseCarCost(int bestSpeed, PowerEnum power, CarGaugeEnum gauge, SeatEnum seat, CarTiltEnum tilt,
                                              int genkaiLinear, int genkaiJoki, int genkaiDenki, int genkaiKidosha)
        {
            // 8*速度^2
            int cost = 8 * bestSpeed * bestSpeed;

            if (power == PowerEnum.LinearMotor)
            {
                cost = cost * 6 / 5 / genkaiLinear;
            }                                                                                       //リニア
            else
            {
                if (gauge == CarGaugeEnum.Regular || gauge == CarGaugeEnum.FreeGauge)
                {
                    cost = cost * 3 / 2;
                }                                                                                                              //標準軌orフリーゲージ
                if (power == PowerEnum.Steam)
                {
                    cost = cost * 6 / 5 / genkaiJoki;
                }                                                                                   //蒸気
                if (power == PowerEnum.Electricity)
                {
                    cost /= genkaiDenki;
                }                                                                            //電車
                if (power == PowerEnum.Diesel)
                {
                    cost /= genkaiKidosha;
                }                                                                         //ディーゼル
            }
            switch (tilt)
            {
            case CarTiltEnum.Pendulum:
                cost = cost * 6 / 5;
                break;

            case CarTiltEnum.SimpleMecha:
                cost = cost * 11 / 10;
                break;

            case CarTiltEnum.HighMecha:
                cost = cost * 6 / 5;
                break;
            }
            cost += 500;

            //シート別
            switch (seat)
            {
            case SeatEnum.None:
            case SeatEnum.Dual:
                cost += 100;
                break;

            case SeatEnum.RetructableLong:
                cost += 50;
                break;

            case SeatEnum.Long:
            case SeatEnum.Semi:
            case SeatEnum.Convertible:
                cost += 150;
                break;

            case SeatEnum.DoubleDeckerRotatable:
            case SeatEnum.DoubleDeckerRich:
                cost = cost * 4 / 3;
                break;
            }

            return(cost);
        }