private void CheckIfAfforable(PayBackPlanner condition)
        {
            Console.WriteLine("返済する金額を入力してください。");
            while (!IfAfforable)
            {
                var payback = int.TryParse(Console.ReadLine(), out var num) ? num : 0;
                if (payback <= 0)
                {
                    Console.WriteLine("返済金額の入力ミス");
                    IfAfforable = false;
                    continue;
                }

                if (payback > condition.Cash || condition.Cash <= 0)
                {
                    Console.WriteLine("現金が足りません。");
                    IfAfforable = false;
                    continue;
                }

                if (payback > condition.DebtToPay)
                {
                    Console.WriteLine("債務金額より大きい金額での返済はできません。");
                    continue;
                }
                IfAfforable   = true;
                PayBackAmount = payback;
            }
        }
 public void ShowLatestCondition(PayBackPlanner condition)
 {
     AdjustShownItems(condition);
     Console.WriteLine("============================");
     Console.WriteLine("現時点の返済進捗状況");
     Console.WriteLine($"手元の現金:{condition.Cash}円\r\n" +
                       $"残りの返済金額:{condition.DebtToPay}円\r\n" +
                       $"返済期限日まではあと:{condition.DaysToDeadline }日 {condition.HoursLeft} 時間");
     Console.WriteLine("============================");
 }
        private void AskIfPayback(PayBackPlanner condition)
        {
            if (condition.Cash <= 0)
            {
                return;
            }

            Console.WriteLine("手元にある現金から返済しますか?");

            IfPayBack = YesNoOptions.GetYesOrNo();
        }
        private void AdjustShownItems(PayBackPlanner condition)
        {
            if (condition.DaysToDeadline == 30)
            {
                condition.HoursLeft = 0;
                return;
            }
            if (condition.Cash < 0)
            {
                condition.DebtToPay -= condition.Cash;
                condition.Cash       = 0;
            }

            if (condition.HoursLeft < 0)
            {
                condition.HoursLeft      += 24;
                condition.DaysToDeadline -= 1;
            }
        }
Beispiel #5
0
        public static void Main(string[] args)
        {
            Console.WriteLine(AppConst.Instruction);

            const int debt         = 1000000;
            const int cash         = 100000;
            const int dayLeft      = 30;
            const int escapeBudget = 100000;

            try
            {
                var condition = new PayBackPlanner(debt, cash, dayLeft);
                condition.ShowLatestCondition(condition);

                while (condition.DaysToDeadline != 0 && condition.DebtToPay != 0)
                {
                    var action = AbstractAction.ChooseAction();
                    action.TakeAction(condition);
                }

                if (condition.DaysToDeadline == 0 && condition.DebtToPay > 0)
                {
                    Console.WriteLine("期限内で返済をできませんでした。");
                    if (condition.Cash >= escapeBudget)
                    {
                        Console.WriteLine($"残りの{condition.Cash}円を使っちゃって、海外へ逃亡しよう!");
                        return;
                    }

                    Console.WriteLine("Game Over");
                }
                else if (condition.DaysToDeadline > 0 && condition.DebtToPay == 0)
                {
                    Console.WriteLine("期限内で返済することができました。。おめでとうございます!");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw;
            }
        }
        public void PayBack(PayBackPlanner condition)
        {
            AskIfPayback(condition);
            if (!IfPayBack)
            {
                return;
            }
            CheckIfAfforable(condition);
            if (!IfAfforable)
            {
                return;
            }

            condition.Cash           -= PayBackAmount;
            condition.DebtToPay      -= PayBackAmount;
            condition.DaysToDeadline -= 1;

            Console.WriteLine($"{PayBackAmount}円を返済しました。");
            ShowLatestCondition(condition);
        }