Ultra960 Ответов: 1

Как сделать так, чтобы мой код генерировал только одного случайного монстра?


Random random = new Random();
		int character = 15;
		int mobhp = 100;
		bool d = false;
		Console.WriteLine("You are an adventuurer.");
		Console.WriteLine("you are walking across the forest when suddenly you encounter a");
		string monsters = "d";
		
		string [] monster = {"imp", "goblin", "hobgoblin",};
		monsters = (monster[(random.Next(0, 3))]);
		Console.WriteLine(monsters);
			
			
			
			
			
		
		switch (monsters){
			case "goblin":
			mobhp = 11;
			d = true;
			break;
				
			case "imp":
			mobhp = 8;
			d = true;
			break;
				
			case "hobgoblin":
			mobhp = 15;
			d = true;
			break;
		}
		
		string hit = "attack";
		string regenerate = "heal";
		string escape = "run";
		
		while(character > 0){
		string entry = Console.ReadLine();
		switch (entry){
			case "hit":
			mobhp = mobhp - 4;
			Console.WriteLine("You attacked it!");
			Console.WriteLine("now its the monster's turn");
		Console.WriteLine("the monster attacked you");
		character = character - 4;
		Console.WriteLine("you have");
		Console.WriteLine(character);
		Console.WriteLine("hp left");	
			break;
			case "regenerate":
			character = character + 2; 
		    Console.WriteLine("you heald 2 hp");
				Console.WriteLine("now its the monster's turn");
		Console.WriteLine("the monster attacked you");
		character = character - 4;
		Console.WriteLine("you have");
		Console.WriteLine(character);
		Console.WriteLine("hp left");
			break;
			case "escape":
			Console.WriteLine("you cant run away!");
				Console.WriteLine("now its the monster's turn");
		Console.WriteLine("the monster attacked you");
		character = character - 4;
		Console.WriteLine("you have");
		Console.WriteLine(character);
		Console.WriteLine("hp left");
			break;
		}
	   if (mobhp < 1){
		Console.WriteLine ("you killed the monster and you went on your way.");
	    System.Environment.Exit(1);
	   }
		}
	}}


Что я уже пробовал:

я пробовал использовать цикл while и цикл for. ни один из них не работает.

CHill60

Вы создаете монстра вне вашего цикла while (цикл атаки), поэтому вы создаете только одного. Более того, вы фактически выходите из своей программы после убийства монстра. Так в чем же собственно проблема?

CHill60

Кроме того ... вместо того, чтобы

Console.WriteLine("you have");
Console.WriteLine(character);
Console.WriteLine("hp left");
используйте составное форматирование
Console.WriteLine("You have {0} hp left.", character);
или интерполяция строк
Console.WriteLine($"You have  {character} hp left.");
Это сделает ваш код намного аккуратнее и проще для чтения
Вот ссылки на них:
Составное форматирование | Microsoft Docs[^]
$ - строковая интерполяция - Справочник по C# | Microsoft Docs[^]

Ultra960

всякий раз, когда я говорю свое действие, оно создает другого случайного монстра и заменяет старого монстра.

1 Ответов

Рейтинг:
8

OriginalGriff

Вместо того чтобы создавать массив строк, а затем выбирать из него одну и сравнивать ее с фиксированными строками для выделения точек попадания, создайте класс Monster и установите его там:

public class Monster
    {
    public string MonsterType { get; set; }
    public int Health { get; set; }
    public int HitsWith { get; set; }
    public bool IsDead { get { return Health <= 0; } }
    public Monster(string name, int health, int hitsWith)
        {
        MonsterType = name;
        Health = health;
        HitsWith = hitsWith;
        }
    public Monster(Monster m)
        {
        MonsterType = m.MonsterType;
        Health = m.Health;
        HitsWith = m.HitsWith;
        }
    public override string ToString()
        {
        return MonsterType;
        }
    }
Теперь вы можете создать целый массив монстров:
private Monster[] monsters = new Monster[] {new Monster("imp", 8, 1),
                             new Monster("goblin", 11, 4),
                             new Monster("hobgoblin", 15, 7) };
И тебе больше не нужно беспокоиться.
Когда вы хотите, чтобы ваш персонаж встретил монстра, с ним легко справиться:
Monster monsterType = monsters[random.Next(monsters.Length)];
Monster monster = new Monster(monsterType);
Затем ударить по вашему персонажу:
heroHealth -= monster.HitsWith;
И ударить монстра:
monster.Health -= 4;
if (monster.IsDead)
   {
   ...
Ваш код становится проще, легче для чтения и гораздо более гибким - вы можете добавить Дракона, просто изменив код. monsters список:
private Monster[] monsters = new Monster[] {new Monster("imp", 8, 1),
                                            new Monster("goblin", 11, 4),
                                            new Monster("hobgoblin", 15, 7),
                                            new Monster("Black Dragon", 666, 120)};
И весь ваш другой код будет работать с новым существом без изменений.

Попробуйте - это действительно не сложно!