Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Program
- {
- static void Main(string[] args)
- {
- //Переменные статов (Возраст = age , Сила = Strength , Ловкость = agility , Интеллект = intelligence) Points = количество очков.
- int age = 0, strength = 0, agility = 0, intelligence = 0, points = 25;
- //Визуальная составляющая статов (Сила = [_______]) стадия пустоты.
- string strengthVisual = string.Empty, agilityVisual = string.Empty, intelligenceVisual = string.Empty;
- //Приветствующий(инфо) текст.
- Console.WriteLine("Добро пожаловать в меню выбора создания персонажа!");
- Console.WriteLine("У вас есть 25 очков, которые вы можете распределить по умениям");
- Console.WriteLine("Нажмите любую клавишу чтобы продолжить...");
- Console.ReadKey();
- //Начало цикла заполнения очков(points) зависящую от выражения points > 0 (пока points не будет 0 цикл будет продолжаться)
- while (points > 0)
- {
- //Вызов функций visualbar для показа баров (в параметры входят характеристики и бары характеристик)
- visualbar (age, strength, agility, intelligence, points, strengthVisual, agilityVisual, intelligenceVisual);
- //запрашиваем желаемую характеристику
- Console.WriteLine("Какую характеристику вы хотите изменить?");
- //введённое помещаем в переменную subject которая будет ссылать на нужную часть оператора
- string subject = Console.ReadLine();
- //запрашиваем выбрать операцию (+/-)
- Console.WriteLine(@"Что вы хотите сделать? +\-");
- //введённое помещаем в переменную operation которая будет ссылать на нужный условный оператор
- string operation = Console.ReadLine();
- //Предлагаем ввести нужное количество поинтов в зависимости от выбора операций если '+' то "прибавить" если '-' то "отнять"
- Console.WriteLine(@"Количество поинтов которые следует {0}", operation == "+" ? "прибавить" : "отнять");
- //Создаем строковую переменную operandPointsRaw которая будет принимать число
- string operandPointsRaw = string.Empty;
- //operandPoints переменная которая примет число которое пользователь хочет внести в характеристику
- int operandPoints = 0;
- //цикл в котором мы просим внести число для характеристики и ограничения на количество используемых поинтов
- do
- {
- do
- {
- //просим ввести
- operandPointsRaw = Console.ReadLine();
- }//Преобразуем введённое число с типо "string" в тип "int"
- while (!int.TryParse(operandPointsRaw, out operandPoints));
- Console.WriteLine("У вас нету столько очков.\nКоличество очков: " + points + "\nВведите еще раз");
- } while //если внесённое число превышает число points то просим внести корректное число
- (operandPoints > points);
- //Оператор проверяет какой кейс выбрал в переменной subject потом переносит
- switch (subject.ToLower())
- {
- case "сила":
- //вызываем функцию changepoints которая будет принимать в параметры нужную характеристику (которую будем изменять) сейчас (strength = сила)
- //принимаем желаемое число которое хотим внести в характеристику(повысить или понизить) operandPoints
- //принимаем количество поинтов у нас всего points
- //принимаем операцию (-/+) operation
- //возвращаем данные в 2 переменные points и нужная характеристика сейчас (strength)
- (points, strength) = changepoints(operandPoints, strength, points, operation);
- break;
- case "ловкость":
- (points, agility) = changepoints(operandPoints, agility, points, operation);
- break;
- case "интелект":
- (points, intelligence) = changepoints(operandPoints, intelligence, points, operation);
- break;
- }
- }
- //Вызов фукнций visualbar для показа баров (в параметры входят характеристики и бары характеристик)
- //Вызываем ее чтоб обновить визуальную часть так как после выхода из цикла while (points > 0) визуалка не обновится и последнее изменение не применяться
- visualbar(age, strength, agility, intelligence, points, strengthVisual, agilityVisual, intelligenceVisual);
- //просил ввести возраст
- Console.WriteLine("Вы распределили все очки. Введите возраст персонажа:");
- //стринговая переменная которая примит введенное число
- string ageRaw = string.Empty;
- do
- {
- ageRaw = Console.ReadLine();
- } //спарсит число в string ageraw и передаст в переменную age
- while (!int.TryParse(ageRaw, out age));
- //Вызов функций visualbar для показа баров (в параметры входят характеристики и бары характеристик)
- //Вызываем ее чтоб обновить визуальную часть
- visualbar(age, strength, agility, intelligence, points, strengthVisual, agilityVisual, intelligenceVisual);
- }
- //Функция visualbar принимает значения (Возраст = age , Сила = Strength , Ловкость = agility , Интеллект = intelligence , Визуальный бар силы = strengthVisual,
- //Визуальный бар ловкости , Визуальный бар интеллекта
- static void visualbar (int age, int strength, int agility, int intelligence, int points, string strengthVisual, string agilityVisual,
- string intelligenceVisual)
- {
- //Чистим консоль
- Console.Clear();
- //Создаем пустоту в барах
- strengthVisual = string.Empty;
- agilityVisual = string.Empty;
- intelligenceVisual = string.Empty;
- //заполняем пустоту символами ('_' = как пустота),('#' = единица поинта) максимальное количество = 10.
- strengthVisual = strengthVisual.PadLeft(strength, '#').PadRight(10, '_');
- agilityVisual = agilityVisual.PadLeft(agility, '#').PadRight(10, '_');
- intelligenceVisual = intelligenceVisual.PadLeft(intelligence, '#').PadRight(10, '_');
- //выводим визуальную составляющую
- Console.WriteLine("Поинтов - {0}", points);
- Console.WriteLine("Возраст - {0}\nСила - [{1}]\nЛовкость - [{2}]\nИнтелект - [{3}]", age, strengthVisual, agilityVisual, intelligenceVisual);
- }
- //функция changepoints которая будет принимать в параметры нужную характеристику (которую будем изменять) characteristic
- //принимаем желаемое число которое хотим внести в характеристику(повысить или понизить) operandPoints
- //принимаем количество поинтов у нас всего points
- //принимаем операцию (-/+) operation
- static Tuple<int, int> changepoints(int operandPoints, int characteristic, int points, string operation)
- {
- //условный оператор который перенесёт в зависимости от выбора в переменной opertaion (+/-)
- if (operation == "+")
- {
- //переменная overhead которая не даёт превысить границы
- int overhead = operandPoints - (10 - characteristic);
- //если overhead меньше 0 то overhead = 0 если overhead больше 0 то overhead = overhead избавляемся от -число
- overhead = overhead < 0 ? 0 : overhead;
- //отнимает введенное желаемое число на максимальные границы
- operandPoints -= overhead;
- }
- else
- {
- int overhead = characteristic - operandPoints;
- overhead = overhead < 0 ? overhead : 0;
- operandPoints += overhead;
- }
- // characteristic = если operation + то складываем с числом которое ввели (operandPoints) если - то отнимаем
- characteristic = operation == "+" ? characteristic + operandPoints : characteristic - operandPoints;
- //points = если + то общее количество поинтов отнимается от поинтов которые мы хотим внести если - то складываем
- points = operation == "+" ? points - operandPoints : points + operandPoints;
- //чтоб points не уходило в -число
- points = points < 0 ? points = 0 : points = points;
- //возвращаем остаток points и новое значение characteristic
- return Tuple.Create(points, characteristic);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement