Belmont135431

Refactoring

Feb 19th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.08 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace RefactorIMJunior
  7. {
  8.     struct Skill
  9.     {
  10.         public string name;
  11.         public int skillValue;
  12.         public string skillVisual;
  13.  
  14.         public Skill(string _name, int _skillValue, string _skillVisual)
  15.         {
  16.             name = _name;
  17.             skillValue = _skillValue;
  18.             skillVisual = _skillVisual;
  19.         }
  20.     }
  21.  
  22.     class Program
  23.     {
  24.         static void Main(string[] args)
  25.         {
  26.             int age = 0,
  27.                 points = 25;
  28.  
  29.             List<Skill> skills = new List<Skill>();
  30.             skills.Add(new Skill("Сила", 0, string.Empty));
  31.             skills.Add(new Skill("Ловкость", 0, string.Empty));
  32.             skills.Add(new Skill("Интелект", 0, string.Empty));
  33.  
  34.             int maxCharacteristicPoints = 10;
  35.  
  36.             PrintWelcome();
  37.  
  38.             while (points > 0)
  39.             {
  40.                 Console.Clear();
  41.  
  42.                 RenderAllSkills(skills, maxCharacteristicPoints);
  43.  
  44.                 Console.WriteLine("Поинтов - {0}", points);
  45.  
  46.                 PrintDistributedSkills(skills, age);
  47.  
  48.                 Console.WriteLine("Какую характеристику вы хотите изменить?");
  49.                 string subject = Console.ReadLine();
  50.  
  51.                 Console.WriteLine(@"Что вы хотите сделать? +\-");
  52.                 string operation = Console.ReadLine();
  53.  
  54.                 Console.WriteLine(@"Колличество поинтов которые следует {0}", operation == "+" ? "прибавить" : "отнять");
  55.  
  56.                 int operandPoints = 0;
  57.                 TryParseIntFromConsole(out operandPoints);
  58.  
  59.                 CharacteristicsCounting(skills, subject.ToLower(), operandPoints, ref points, operation, maxCharacteristicPoints);
  60.             }
  61.  
  62.             Console.WriteLine("Вы распределили все очки. Введите возраст персонажа:");
  63.             TryParseIntFromConsole(out age);
  64.  
  65.             Console.Clear();
  66.  
  67.             RenderAllSkills(skills, maxCharacteristicPoints);
  68.  
  69.             PrintDistributedSkills(skills, age);
  70.  
  71.             Console.ReadKey();
  72.         }
  73.  
  74.         private static void PrintWelcome()
  75.         {
  76.             Console.WriteLine("Добро пожаловать в меню выбора создания персонажа!");
  77.             Console.WriteLine("У вас есть 25 очков, которые вы можете распределить по умениям");
  78.             Console.WriteLine("Нажмите любую клавишу чтобы продолжить...");
  79.             Console.ReadKey();
  80.         }
  81.  
  82.         private static void RenderAllSkills(List<Skill> skills, int maxCharacteristicPoints)
  83.         {
  84.             for (int i = 0; i < skills.Count; i++)
  85.             {
  86.                 string str = VisualiseSkills(skills[i].skillVisual, skills[i].skillValue, maxCharacteristicPoints);
  87.                 skills[i] = new Skill(skills[i].name, skills[i].skillValue, str);                
  88.             }
  89.         }
  90.  
  91.         static string VisualiseSkills(string _characteristic, int _strengthLeft, int _maxCount)
  92.         {
  93.             _characteristic = string.Empty;
  94.             _characteristic = _characteristic.PadLeft(_strengthLeft, '#').PadRight(_maxCount, '_'); ;
  95.  
  96.             return _characteristic;
  97.         }
  98.  
  99.         private static void PrintDistributedSkills(List<Skill> list, int age)
  100.         {
  101.             Console.WriteLine("Возраст - " + age);
  102.            
  103.             foreach (var item in list)
  104.             {
  105.                 Console.WriteLine(item.name + " -  [" + item.skillVisual + "]");
  106.             }
  107.         }
  108.  
  109.         static void TryParseIntFromConsole(out int parseResult)
  110.         {
  111.             string tempStr = string.Empty;
  112.             do
  113.             {
  114.                 tempStr = Console.ReadLine();
  115.             } while (!int.TryParse(tempStr, out parseResult));
  116.         }
  117.  
  118.         static void CharacteristicsCounting(List<Skill> list, string subject, int tempOperandPoints, ref int tempPoints, string _operation, int _maxCount)
  119.         {
  120.             int index = list.IndexOf(list.Find((x) => x.name.ToLower() == subject));
  121.  
  122.             int newSkillValue =  ChangeCharacteristicValue(list[index].skillValue, tempOperandPoints, _maxCount, _operation == "+" ? 1 : -1);
  123.  
  124.             list[index] = new Skill(list[index].name, newSkillValue, list[index].skillVisual);
  125.             tempPoints = ChangeCharacteristicValue(tempPoints, tempOperandPoints, 25, _operation == "+" ? -1 : 1);
  126.         }
  127.  
  128.         static int ChangeCharacteristicValue(int _characteristic, int _operandPoints, int _maxCount, int direction = 1)
  129.         {
  130.             int newValue = Clamp(_characteristic + _operandPoints * direction, 0, _maxCount);
  131.             return newValue;
  132.         }
  133.  
  134.         public static int Clamp(int value, int min, int max)
  135.         {
  136.             return (value < min) ? min : (value > max) ? max : value;
  137.         }
  138.     }
  139. }
Advertisement
Add Comment
Please, Sign In to add comment