Advertisement
_LINKI

C# Monkey-Refactory (without OOP)

Sep 1st, 2019
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.33 KB | None | 0 0
  1. using System;
  2. class Program
  3. {
  4.     #region Fields
  5.     private static int age,
  6.         strength,
  7.         agility,
  8.         intelligence,
  9.         points = 25;
  10.     #endregion
  11.  
  12.     #region General methods
  13.     private static void Main(string[] args)
  14.     {
  15.         Intro();
  16.         DistributePointsLoop();
  17.         Outro();
  18.     }
  19.     private static void Intro()
  20.     {
  21.         PrintLines(
  22.             "Добро пожаловать в меню выбора создания персонажа!",
  23.             "У вас есть 25 очков, которые вы можете распределить по умениям"
  24.         );
  25.         ReadKey("Нажмите любую клавишу чтобы продолжить...");
  26.     }
  27.     private static void DistributePointsLoop()
  28.     {
  29.         while (points > 0)
  30.             DistributePoints();
  31.     }
  32.     private static void DistributePoints()
  33.     {
  34.         ClearConsole();
  35.         PrintLines(
  36.             "Поинтов - " + points,
  37.             "Возраст - " + age,
  38.             "Сила - " + GetProgressBar(strength),
  39.             "Ловкость - " + GetProgressBar(agility),
  40.             "Интеллект - " + GetProgressBar(intelligence)
  41.         );
  42.         string subject = ReadLine("Какую характеристику вы хотите изменить?");
  43.         string operation = ReadLine("Что вы хотите сделать? +\\-");
  44.         int operandPoints = ReadInt("Колличество поинтов которые следует " + (operation == "+" ? "прибавить" : "отнять"));
  45.  
  46.         if (operation == "-") operandPoints *= -1;
  47.         else if (operation != "+") operandPoints = 0;
  48.  
  49.         switch (subject.ToLower())
  50.         {
  51.             case "сила": points += strength - (strength = GetCorrectProgress(strength, operandPoints, points)); break;
  52.             case "ловкость": points += agility - (agility = GetCorrectProgress(agility, operandPoints, points)); break;
  53.             case "интелект": points += intelligence - (intelligence = GetCorrectProgress(intelligence, operandPoints, points)); break;
  54.         }
  55.     }
  56.     private static void Outro()
  57.     {
  58.         age = ReadInt("Вы распределили все очки. Введите возраст персонажа:");
  59.         ClearConsole();
  60.         PrintAllСharacteristics();
  61.         ReadKey();
  62.     }
  63.     #endregion
  64.  
  65.     #region Local utility
  66.     private static void PrintAllСharacteristics()
  67.     {
  68.         PrintLines(
  69.             "Поинтов - " + points,
  70.             "Возраст - " + age,
  71.             "Сила - " + GetProgressBar(strength),
  72.             "Ловкость - " + GetProgressBar(agility),
  73.             "Интеллект - " + GetProgressBar(intelligence)
  74.         );
  75.     }
  76.     private static int GetCorrectProgress(int progress, int shift, int points, int max = 10)
  77.     {
  78.         int shiftedProgress = progress + shift;
  79.         if (shiftedProgress < 0 || shiftedProgress > max || shift > points)
  80.             return progress;
  81.         else return shiftedProgress;
  82.     }
  83.     private static string GetProgressBar(int progress, int max = 10)
  84.     {
  85.         return "[" + new string('#', progress) + new string('_', max - progress) + "]";
  86.     }
  87.     #endregion
  88.  
  89.     #region Console I/O
  90.     private static int ReadInt(string msg)
  91.     {
  92.         Print(msg);
  93.         return ReadInt();
  94.     }
  95.     private static int ReadInt()
  96.     {
  97.         int result;
  98.         //4.0, "out int result" - exception :)
  99.         while (!int.TryParse(ReadLine(), out result)) { }
  100.         return result;
  101.     }
  102.     private static string ReadLine(string msg)
  103.     {
  104.         Print(msg);
  105.         return ReadLine();
  106.     }
  107.     private static string ReadLine()
  108.     {
  109.         return Console.ReadLine();
  110.     }
  111.     private static void ReadKey(string msg)
  112.     {
  113.         Print(msg);
  114.         ReadKey();
  115.     }
  116.     private static void ReadKey()
  117.     {
  118.         Console.ReadKey(true);
  119.     }
  120.     private static void PrintLines(params string[] lines)
  121.     {
  122.         Print(string.Join<string>("\n", lines));
  123.     }
  124.     private static void Print(string msg, bool newLine = true)
  125.     {
  126.         if (newLine) msg += '\n';
  127.         Console.Write(msg);
  128.     }
  129.     private static void ClearConsole()
  130.     {
  131.         Console.Clear();
  132.     }
  133.     #endregion
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement