Загрузка данных
using System;
namespace EnhancedManGame
{
class Program
{
static void Main(string[] args)
{
string userCommand = "";
bool infinity = true;
Man someMan = null;
Console.WriteLine("=== РАСШИРЕННАЯ ИГРА 'ЧЕЛОВЕК' ===\n");
while (infinity)
{
Console.WriteLine("Пожалуйста, введите команду");
userCommand = Console.ReadLine().ToLower();
switch (userCommand)
{
case "exit":
infinity = false;
Console.WriteLine("Программа завершена.");
break;
case "help":
ShowHelp();
break;
case "create_man":
if (someMan != null)
{
Console.WriteLine($"{someMan.GetName()} уже существует и будет заменен.");
someMan.Kill();
}
Console.WriteLine("Пожалуйста, введите имя создаваемого человека:");
string name = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(name))
{
someMan = new Man(name);
Console.WriteLine($"\nЧеловек по имени {name} успешно создан!");
Console.WriteLine($"Возраст: {someMan.GetAge()}, Здоровье: {someMan.GetHealth()}/100");
Console.WriteLine($"Сила: {someMan.GetStrength()}, Ловкость: {someMan.GetAgility()}");
}
else
{
Console.WriteLine("Имя не может быть пустым!");
}
break;
case "status":
if (someMan != null)
{
someMan.ShowStatus();
}
else
{
Console.WriteLine("Сначала создайте человека командой create_man!");
}
break;
case "talk":
if (someMan != null && someMan.IsAlive())
{
someMan.Talk();
}
else if (someMan != null && !someMan.IsAlive())
{
Console.WriteLine($"{someMan.GetName()} не может говорить, он умер.");
}
else
{
Console.WriteLine("Сначала создайте человека командой create_man!");
}
break;
case "go":
if (someMan != null && someMan.IsAlive())
{
someMan.Go();
}
else if (someMan != null && !someMan.IsAlive())
{
Console.WriteLine($"{someMan.GetName()} не может идти, он умер.");
}
else
{
Console.WriteLine("Сначала создайте человека командой create_man!");
}
break;
case "fight":
if (someMan != null && someMan.IsAlive())
{
someMan.Fight();
}
else if (someMan != null && !someMan.IsAlive())
{
Console.WriteLine($"{someMan.GetName()} не может драться, он умер.");
}
else
{
Console.WriteLine("Сначала создайте человека командой create_man!");
}
break;
case "medkit":
if (someMan != null && someMan.IsAlive())
{
someMan.UseMedKit();
}
else if (someMan != null && !someMan.IsAlive())
{
Console.WriteLine("Аптечка не поможет мертвому!");
}
else
{
Console.WriteLine("Сначала создайте человека командой create_man!");
}
break;
case "kill_man":
if (someMan != null)
{
if (someMan.IsAlive())
{
someMan.Kill();
Console.WriteLine($"{someMan.GetName()} был убит.");
}
else
{
Console.WriteLine($"{someMan.GetName()} уже мертв.");
}
}
else
{
Console.WriteLine("Сначала создайте человека командой create_man!");
}
break;
case "is_alive":
if (someMan != null)
{
if (someMan.IsAlive())
{
Console.WriteLine($"{someMan.GetName()} жив.");
}
else
{
Console.WriteLine($"{someMan.GetName()} мертв.");
}
}
else
{
Console.WriteLine("Человек еще не создан!");
}
break;
default:
Console.WriteLine("Команда не определена. Введите 'help' для списка команд.");
break;
}
Console.WriteLine();
}
}
static void ShowHelp()
{
Console.WriteLine("\n=== СПИСОК КОМАНД ===");
Console.WriteLine("create_man - создать нового человека");
Console.WriteLine("status - показать статус человека");
Console.WriteLine("talk - заставить человека говорить (случайная фраза из 10)");
Console.WriteLine("go - заставить человека идти");
Console.WriteLine("fight - начать драку (5 видов ударов)");
Console.WriteLine("medkit - использовать аптечку");
Console.WriteLine("kill_man - убить человека");
Console.WriteLine("is_alive - проверить, жив ли человек");
Console.WriteLine("help - показать этот список");
Console.WriteLine("exit - выйти из программы");
Console.WriteLine("=====================\n");
}
}
public class Man
{
private string name;
private uint age;
private uint health;
private uint strength;
private uint agility;
private bool isLife;
private uint medKits;
private Random rnd = new Random();
public Man(string _name)
{
name = _name;
isLife = true;
age = (uint)rnd.Next(15, 51);
health = (uint)rnd.Next(50, 101);
strength = (uint)rnd.Next(30, 91);
agility = (uint)rnd.Next(30, 91);
medKits = 1;
}
public string GetName() { return name; }
public uint GetAge() { return age; }
public uint GetHealth() { return health; }
public uint GetStrength() { return strength; }
public uint GetAgility() { return agility; }
public void ShowStatus()
{
Console.WriteLine($"\n=== СТАТУС {name.ToUpper()} ===");
Console.WriteLine($"Состояние: {(isLife ? "ЖИВ" : "МЕРТВ")}");
Console.WriteLine($"Возраст: {age} лет");
Console.WriteLine($"Здоровье: {health}/100");
Console.WriteLine($"Сила: {strength}/100");
Console.WriteLine($"Ловкость: {agility}/100");
Console.WriteLine($"Аптечки: {medKits}");
Console.WriteLine("=====================\n");
}
public void Talk()
{
int randomTalk = rnd.Next(1, 11);
string phrase = "";
switch (randomTalk)
{
case 1:
phrase = "Привет, меня зовут " + name + ", рад познакомиться!";
break;
case 2:
phrase = "Мне " + age + " лет. А тебе сколько?";
break;
case 3:
if (health > 70)
phrase = "Чувствую себя отлично! Здоровье просто супер!";
else if (health > 40)
phrase = "Чувствую себя нормально, но могло быть и лучше.";
else
phrase = "Чувствую себя неважно...";
break;
case 4:
phrase = "Какой прекрасный день сегодня!";
break;
case 5:
phrase = "Я могу поднять " + (strength / 10) + "0 кг!";
break;
case 6:
phrase = "Моя ловкость позволяет мне уворачиваться от ударов!";
break;
case 7:
phrase = "У меня есть " + medKits + " аптечка" + (medKits == 1 ? "" : "ки") + " на случай ранения.";
break;
case 8:
phrase = "Я готов к приключениям!";
break;
case 9:
phrase = "Иногда мне кажется, что я становлюсь старше...";
break;
case 10:
phrase = "Жизнь - это прекрасное приключение!";
break;
}
Console.WriteLine($"{name}: {phrase}");
}
public void Go()
{
if (!isLife)
{
Console.WriteLine($"{name} не может идти, он умер.");
return;
}
if (health > 60)
{
Console.WriteLine($"{name} быстро и уверенно идет по дороге.");
}
else if (health > 30)
{
Console.WriteLine($"{name} медленно идет, чувствуя усталость.");
}
else
{
Console.WriteLine($"{name} еле передвигает ноги, ему нужен отдых.");
health = (uint)Math.Max(0, health - 5);
Console.WriteLine($"Здоровье уменьшилось до {health}");
}
}
public void Fight()
{
if (!isLife)
{
Console.WriteLine($"{name} не может драться, он умер.");
return;
}
Console.WriteLine($"\n=== {name} ВСТУПАЕТ В БОЙ ===");
Console.WriteLine("Выберите тип удара:");
Console.WriteLine("1. Легкий джеб (малый урон, высокая точность)");
Console.WriteLine("2. Прямой удар (средний урон, средняя точность)");
Console.WriteLine("3. Хук (большой урон, низкая точность)");
Console.WriteLine("4. Удар ногой (очень большой урон, очень низкая точность)");
Console.WriteLine("5. Специальный прием (зависит от ловкости)");
Console.WriteLine("0. Отмена боя");
string choice = Console.ReadLine();
int damage = 0;
string attackName = "";
int accuracy = 0;
switch (choice)
{
case "1":
attackName = "Легкий джеб";
damage = rnd.Next(5, 15);
accuracy = 90;
break;
case "2":
attackName = "Прямой удар";
damage = rnd.Next(15, 30);
accuracy = 70;
break;
case "3":
attackName = "Хук";
damage = rnd.Next(25, 45);
accuracy = 50;
break;
case "4":
attackName = "Удар ногой";
damage = rnd.Next(40, 60);
accuracy = 30;
break;
case "5":
attackName = "Специальный прием";
damage = (int)(agility / 2) + rnd.Next(10, 20);
accuracy = 60;
break;
case "0":
Console.WriteLine($"{name} отступил от боя.");
return;
default:
Console.WriteLine("Неверный выбор! Бой пропущен.");
return;
}
int hitChance = rnd.Next(1, 101);
bool isHit = hitChance <= accuracy;
Console.WriteLine($"\n{name} использует: {attackName}");
Console.WriteLine($"Точность атаки: {accuracy}% (выпало: {hitChance})");
if (isHit)
{
int finalDamage = damage + (int)(strength / 20);
Console.WriteLine($"ПОПАДАНИЕ! Нанесено урона: {finalDamage}");
health = (uint)Math.Max(0, health - finalDamage);
Console.WriteLine($"Здоровье {name}: {health}/100");
if (health == 0)
{
Console.WriteLine($"\n{name} ПОТЕРЯЛ СОЗНАНИЕ!");
isLife = false;
}
else if (health < 20)
{
Console.WriteLine($"{name} тяжело ранен и нуждается в медицинской помощи!");
}
else if (health < 50)
{
Console.WriteLine($"{name} получил серьезные повреждения.");
}
}
else
{
Console.WriteLine("ПРОМАХ! Противник увернулся от удара.");
}
Console.WriteLine("=====================\n");
}
public void UseMedKit()
{
if (!isLife)
{
Console.WriteLine("Аптечка не поможет мертвому!");
return;
}
if (medKits > 0)
{
medKits--;
uint healAmount = (uint)rnd.Next(20, 51);
health = Math.Min(100, health + healAmount);
Console.WriteLine($"{name} использует аптечку.");
Console.WriteLine($"Восстановлено здоровья: +{healAmount}");
Console.WriteLine($"Текущее здоровье: {health}/100");
Console.WriteLine($"Осталось аптечек: {medKits}");
if (rnd.Next(1, 6) == 1)
{
Console.WriteLine("Вы нашли еще одну аптечку во время лечения!");
medKits++;
}
}
else
{
Console.WriteLine($"У {name} нет аптечек!");
Console.WriteLine("Аптечки можно найти во время боя или лечения.");
}
}
public void Kill()
{
isLife = false;
}
public bool IsAlive()
{
return isLife;
}
}
}