Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.46 KB | None | 0 0
  1.  class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             //Переменные статов (Возраст = age , Сила = Strength , Ловкость = agility , Интеллект = intelligence) Points = количество очков.
  6.             int age = 0, strength = 0, agility = 0, intelligence = 0, points = 25;
  7.             //Визуальная составляющая статов (Сила = [_______]) стадия пустоты.
  8.             string strengthVisual = string.Empty, agilityVisual = string.Empty, intelligenceVisual = string.Empty;
  9.  
  10.             //Приветствующий(инфо) текст.
  11.             Console.WriteLine("Добро пожаловать в меню выбора создания персонажа!");
  12.             Console.WriteLine("У вас есть 25 очков, которые вы можете распределить по умениям");
  13.             Console.WriteLine("Нажмите любую клавишу чтобы продолжить...");
  14.             Console.ReadKey();
  15.  
  16.             //Начало цикла заполнения очков(points) зависящую от выражения points > 0 (пока points не будет 0 цикл будет продолжаться)
  17.             while (points > 0)
  18.             {
  19.                 //Вызов функций visualbar для показа баров (в параметры входят характеристики и бары характеристик)
  20.                 visualbar (age, strength, agility, intelligence, points, strengthVisual, agilityVisual, intelligenceVisual);
  21.  
  22.                 //запрашиваем желаемую характеристику
  23.                 Console.WriteLine("Какую характеристику вы хотите изменить?");
  24.                 //введённое помещаем в переменную subject которая будет ссылать на нужную часть оператора
  25.                 string subject = Console.ReadLine();
  26.                 //запрашиваем выбрать операцию (+/-)
  27.                 Console.WriteLine(@"Что вы хотите сделать? +\-");
  28.                 //введённое помещаем в переменную operation которая будет ссылать на нужный условный оператор
  29.                 string operation = Console.ReadLine();
  30.                 //Предлагаем ввести нужное количество поинтов в зависимости от выбора операций если '+' то "прибавить" если '-' то "отнять"
  31.                 Console.WriteLine(@"Количество поинтов которые следует {0}", operation == "+" ? "прибавить" : "отнять");
  32.                 //Создаем строковую переменную operandPointsRaw которая будет принимать число
  33.                 string operandPointsRaw = string.Empty;
  34.                 //operandPoints переменная которая примет число которое пользователь хочет внести в характеристику
  35.                 int operandPoints = 0;
  36.                 //цикл в котором мы просим внести число для характеристики и ограничения на количество используемых поинтов
  37.                 do
  38.                 {
  39.                     do
  40.                     {
  41.                         //просим ввести
  42.                         operandPointsRaw = Console.ReadLine();
  43.                     }//Преобразуем введённое число с типо "string" в тип "int"
  44.                     while (!int.TryParse(operandPointsRaw, out operandPoints));
  45.                     Console.WriteLine("У вас нету столько очков.\nКоличество очков: " + points + "\nВведите еще раз");
  46.                 } while //если внесённое число превышает число points то просим внести корректное число
  47.                 (operandPoints > points);
  48.  
  49.                 //Оператор проверяет какой кейс выбрал в переменной subject потом переносит
  50.                 switch (subject.ToLower())
  51.                 {
  52.                     case "сила":
  53.                         //вызываем функцию changepoints которая будет принимать в параметры нужную характеристику (которую будем изменять) сейчас (strength = сила)
  54.                         //принимаем желаемое число которое хотим внести в характеристику(повысить или понизить) operandPoints
  55.                         //принимаем количество поинтов у нас всего points
  56.                         //принимаем операцию (-/+) operation
  57.                         //возвращаем данные в 2 переменные points и нужная характеристика сейчас (strength)
  58.                         (points, strength) = changepoints(operandPoints, strength, points, operation);
  59.                         break;
  60.                     case "ловкость":
  61.                         (points, agility) = changepoints(operandPoints, agility, points, operation);
  62.                         break;
  63.                     case "интелект":
  64.                         (points, intelligence) = changepoints(operandPoints, intelligence, points, operation);
  65.                         break;
  66.                 }
  67.             }
  68.  
  69.             //Вызов фукнций visualbar для показа баров (в параметры входят характеристики и бары характеристик)
  70.             //Вызываем ее чтоб обновить визуальную часть так как после выхода из цикла while (points > 0) визуалка не обновится и последнее изменение не применяться
  71.             visualbar(age, strength, agility, intelligence, points, strengthVisual, agilityVisual, intelligenceVisual);
  72.  
  73.             //просил ввести возраст
  74.             Console.WriteLine("Вы распределили все очки. Введите возраст персонажа:");
  75.             //стринговая переменная которая примит введенное число
  76.             string ageRaw = string.Empty;
  77.             do
  78.             {
  79.                 ageRaw = Console.ReadLine();
  80.             } //спарсит число в string ageraw и передаст в переменную age
  81.             while (!int.TryParse(ageRaw, out age));
  82.             //Вызов функций visualbar для показа баров (в параметры входят характеристики и бары характеристик)
  83.             //Вызываем ее чтоб обновить визуальную часть
  84.             visualbar(age, strength, agility, intelligence, points, strengthVisual, agilityVisual, intelligenceVisual);
  85.         }
  86.  
  87.  
  88.         //Функция visualbar принимает значения (Возраст = age , Сила = Strength , Ловкость = agility , Интеллект = intelligence , Визуальный бар силы = strengthVisual,
  89.         //Визуальный бар ловкости , Визуальный бар интеллекта
  90.         static void visualbar (int age, int strength, int agility, int intelligence, int points, string strengthVisual, string agilityVisual,
  91.             string intelligenceVisual)
  92.         {
  93.             //Чистим консоль
  94.             Console.Clear();
  95.             //Создаем пустоту в барах
  96.             strengthVisual = string.Empty;
  97.             agilityVisual = string.Empty;
  98.             intelligenceVisual = string.Empty;
  99.             //заполняем пустоту символами ('_' = как пустота),('#' = единица поинта) максимальное количество = 10.
  100.             strengthVisual = strengthVisual.PadLeft(strength, '#').PadRight(10, '_');
  101.             agilityVisual = agilityVisual.PadLeft(agility, '#').PadRight(10, '_');
  102.             intelligenceVisual = intelligenceVisual.PadLeft(intelligence, '#').PadRight(10, '_');
  103.  
  104.             //выводим визуальную составляющую
  105.             Console.WriteLine("Поинтов - {0}", points);
  106.             Console.WriteLine("Возраст - {0}\nСила - [{1}]\nЛовкость - [{2}]\nИнтелект - [{3}]", age, strengthVisual, agilityVisual, intelligenceVisual);
  107.         }
  108.  
  109.         //функция changepoints которая будет принимать в параметры нужную характеристику (которую будем изменять) characteristic
  110.         //принимаем желаемое число которое хотим внести в характеристику(повысить или понизить) operandPoints
  111.         //принимаем количество поинтов у нас всего points
  112.         //принимаем операцию (-/+) operation
  113.         static Tuple<int, int> changepoints(int operandPoints, int characteristic, int points, string operation)
  114.         {
  115.             //условный оператор который перенесёт в зависимости от выбора в переменной opertaion (+/-)
  116.             if (operation == "+")
  117.             {
  118.                 //переменная overhead которая не даёт превысить границы
  119.                 int overhead = operandPoints - (10 - characteristic);
  120.                 //если overhead меньше 0 то overhead = 0 если overhead больше 0 то overhead = overhead избавляемся от -число
  121.                 overhead = overhead < 0 ? 0 : overhead;
  122.                 //отнимает введенное желаемое число на максимальные границы
  123.                 operandPoints -= overhead;
  124.             }
  125.             else
  126.             {
  127.                 int overhead = characteristic - operandPoints;
  128.                 overhead = overhead < 0 ? overhead : 0;
  129.                 operandPoints += overhead;
  130.             }
  131.  
  132.             // characteristic = если operation + то складываем с числом которое ввели (operandPoints) если - то отнимаем
  133.             characteristic = operation == "+" ? characteristic + operandPoints : characteristic - operandPoints;
  134.             //points = если + то общее количество поинтов отнимается от поинтов которые мы хотим внести если - то складываем
  135.             points = operation == "+" ? points - operandPoints : points + operandPoints;
  136.             //чтоб points не уходило в -число
  137.             points = points < 0 ? points = 0 : points = points;
  138.             //возвращаем остаток points и новое значение characteristic
  139.             return Tuple.Create(points, characteristic);
  140.  
  141.  
  142.         }
  143.     }
  144.  
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement