Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
1

Текстовая стратегия в консоли. Нанесение урона персонажам

17.04.2018, 06:14. Просмотров 2513. Ответов 15
Метки нет (Все метки)


Доброе время суток! Ребята подскажите как можно написать бой между 2 персонажами... Т.е. Есть к примеру классы орк и человек как написать нанесение им урона друг от друга с уменьшением параметра их здоровья..
Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2018, 06:14
Ответы с готовыми решениями:

Нанесение урона
Есть скрипт Gun с методом shoot и скрипт EnemyController с методом hurt. Как сделать так, чтоб...

Нанесение урона кораблю
TSpaceObject = class Image:TImage; procedure Process; virtual; constructor create(x, y,...

Текстовая RPG в консоли по правилам D&D
Доброго времени суток! Решил попробовать себя на новой, так сказать, стезе. Буду рад любой помощи в...

Перемещение с нанесением урона
у меня имеется мой персонаж, и персонаж который привязан к моему, и постоянно следует за ним с...

15
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
17.04.2018, 06:19 2
Куча вариантов на самом деле. Вариант который лежит на поверхности - реализовать метод, принимающий в качестве параметра числовое значение полученного урона. В теле метода, от текущего уровня здоровья, отнимать полученный урон.
C#
1
2
3
4
5
6
7
8
9
...
public int Health { get; set; }
 
public void GetDamage(int damage)
{
    Health -= damage;
    Console.WriteLine($"Получен урон: {damage}");
}
...
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
17.04.2018, 06:23  [ТС] 3
Bespridelschic, это надо делигировать урон противника и хп героя?

Добавлено через 2 минуты
Bespridelschic, большое спасибо за подсказку, попробую написать
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
17.04.2018, 06:24 4
Esso11, в данном случае, можно просто вызывать метод каждого объекта, для фиксирования урона персонажу.
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
17.04.2018, 06:26  [ТС] 5
Bespridelschic, простите за глупый вопрос), а это как?
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
17.04.2018, 06:54 6
Цитата Сообщение от Esso11 Посмотреть сообщение
простите за глупый вопрос
Глупо не спрашивать, когда есть такая возможность. Так что не за что вам извиняться

Накидал примерный код одного из вариантов, как это может выглядеть.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
internal class Program
    {
        public static void Main(string[] args)
        {
            Man man = new Man();
            Orc orc = new Orc();
 
            Console.WriteLine("Нанесение урона человеку");
            orc.SetDamage(man, 50);
 
            Console.WriteLine("Нанесение урона орку");
            man.SetDamage(orc, 100);
 
            Console.ReadKey();
        }
    }
 
    public abstract class Character
    {
        public int Health { get; private set; }
 
        public Character()
        {
            Health = 100;
        }
 
        public virtual void GetDamage(int damage)
        {
            Health -= damage;
            if (Health < 1)
            {
                Console.WriteLine("Персонаж погиб");
            }
        }
 
        public void SetDamage(Character character, int damage)
        {
            character.GetDamage(damage);
        }
    }
 
    public class Man : Character
    {
        public override void GetDamage(int damage)
        {
            Console.WriteLine($"Человек получил урон: {damage}");
            base.GetDamage(damage);
        }
    }
 
    public class Orc : Character
    {
        public override void GetDamage(int damage)
        {
            Console.WriteLine($"Орк получил урон: {damage}");
            base.GetDamage(damage);
        }
    }
1
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
17.04.2018, 07:15  [ТС] 7
Bespridelschic, спасибо вам большое
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
20.04.2018, 09:23  [ТС] 8
C#
1
2
3
* * * * public int Health { get; private set; }
*
* * * *
Bespridelschic, эта строчка для чего нужна?
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
20.04.2018, 09:27 9
Это авто свойство, которое содержит текущее значение уровня здоровья персонажа. Без него, можно было бы задать поле и методы-аксессоры к нему:

C#
1
2
3
4
5
6
7
8
9
10
11
private int health;
 
public void SetHealth(int health)
{
    this.health = health;
}
 
public int GetHealth()
{
    return health;
}
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
20.04.2018, 09:55  [ТС] 10
Bespridelschic, может ты подскажешь, как я могу дописать метод рандом для передачи значения урона что бы не указывать его руками в главной функции. Т.е. Идея такая что выбираешь удар в голову врага срабатывает рандом и ыводится на экран вы нанесли .... Урона

Добавлено через 2 минуты
Bespridelschic, я попробовал вставить рандом в твой код а именно в метод public void setdamage()... Изменив тип метода на инт... Но у меня появилось куча ошибок
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
20.04.2018, 10:02 11
Вариантов, как Вы понимаете, много. Как вариант, можно устанавливать урон из метода Main:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
        public static void Main(string[] args)
        {
            Man man = new Man();
            Orc orc = new Orc();
 
            Random rand = new Random();
 
            while(true)
            {
                Console.WriteLine("Нанесение урона человеку");
                orc.SetDamage(man, rand.Next(1, 100));
                if (man.Health <= 0)
                {
                    break;
                }
 
                Console.WriteLine($"Текущий уровень здоровья человека: {man.Health}");
                Console.WriteLine();
 
                System.Threading.Thread.Sleep(1000); // Остановить поток выполнения на 1 секунду
 
                Console.WriteLine("Нанесение урона орку");
                man.SetDamage(orc, rand.Next(1, 100));
                if (orc.Health <= 0)
                {
                    break;
                }
 
                Console.WriteLine($"Текущий уровень здоровья орка: {orc.Health}");
                Console.WriteLine();
 
                System.Threading.Thread.Sleep(1000); // Остановить поток выполнения на 1 секунду
            }
            
 
            Console.ReadKey();
        }
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
20.04.2018, 11:11  [ТС] 12
Bespridelschic, т.е. Урон будет наносится до победы одного из участников? Или я сам контролирую сколько ударов нанести
??

Добавлено через 9 минут
Bespridelschic, ага я понял, т.е. Вместо конкретного числа урона мы прописываем рандом метод, так?

Добавлено через 1 минуту
Ага понял, т.е. Вместо числа конкретного подставляем метод рандом
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
20.04.2018, 11:20 13
Цитата Сообщение от Esso11 Посмотреть сообщение
Вместо числа конкретного подставляем метод рандом
Совершенно верно
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
20.04.2018, 19:16  [ТС] 14
Bespridelschic, а не подскажешь в таком вопросе почему у меня не может сконвертироваться строка
C#
1
2
3
4
5
6
7
8
9
10
11
            Console.WriteLine("\t\t\tWelcome to Fight- Club!!!");
            Console.WriteLine();
            Console.WriteLine("Выберите себе Фракцию: ");
            String s;
            int i;
            do
            {
                s = Convert.ToInt32(Console.WriteLine("#1 - Trols \n#2 - Orcs \n#3 - Humans "));
            } while (!Int32.TryParse(s, out i));
            
            int Fraction = Convert.ToInt32(Console.ReadLine());
пишет не удается неявно преобразовать тип войд в стринг
0
Wanna be serious
576 / 466 / 183
Регистрация: 31.07.2013
Сообщений: 1,679
21.04.2018, 03:03 15
Console.WriteLine возвращает void. Чтобы прочитать строку, используйте Console.ReadLine, который возвращает string.
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
21.04.2018, 08:25  [ТС] 16
Bespridelschic, спасибо большое, вчера наслушался уже в свой адрес коментарии по поводу бреда написаного в 8 строке))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2018, 08:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Вместо нанесения урона сразу убивает
Здравствуйте, у меня проблемка небольшая. У меня есть 2 скрипта: 1. Это Enemy(враг) 2. Это...

Не увеличивается значение урона с повышением уровня
Описал пулеметную башенку: ее уровень, урон в минуту. Также описал получение опыта при нанесении...

Возникает баг после получения урона C# Unity
Создаю 2D игру. Есть ГГ и противники. Противников можно убить прыгнув на их головы. Если получить...

Помогите!Как сделать программу для расчета урона??
Всем привет.Помогите мне пожалуйста сделать программу для расчета урона или хотя бы объясните как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.