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

Работа с классами для RPG игры

25.04.2018, 18:01. Показов 10873. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброе время суток о великие гении программирования. Возникла интересная мысль написать консольную рпг и в данной рпг хотелось бы реализовать такую идею: есть классы вещей которые выпадают с различных монстров они определенны под разные классы и так же в описании вещей присутствуют поля которые увеличивают параметры героя.
Хотелось бы услышать ваши идеи как можно реализовать привязку конкретных вещей к классу персонажа что бы он мог одевать только вещи своего класса и как реализовать апгрейд параметров героя таких как (например: атака, крит. удар, уклонение) Самому мне приходит на ум только подключение паттерна декоратор который будет принимать "апгрейд" в виде вещи надетой на персонажа
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2018, 18:01
Ответы с готовыми решениями:

Классы для RPG игры. 3 Части
Ребят помогите решить задачку) Часть 1 Создать класс «персонаж ролевой игры». Включить в описание класса следующие поля: -...

Создание простого контроллера от третьего лица ( для RPG игры)
Всем привет, недавно появилось желания написать небольшую РПГ игру, точнее базу для нее ( лишь скрипты и механизм взаимодействия без...

Посоветуйте хороший 3Д игровой движок для создания игры с элементами RPG
Здравствуйте! Какой хороший игровой движок можете посоветовать. То есть движок, на котором реально можно создать игру типа RPG. ...

11
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
25.04.2018, 18:32
Esso11, используйте паттерн Visitor
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
25.04.2018, 18:34  [ТС]
woldemas, он поможет реализовать обе идеи ? А в чем его суть?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
25.04.2018, 18:38
Esso11, наверное, трудно сказать заранее
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
25.04.2018, 18:41  [ТС]
woldemas, спасибо за совет разберусь с этим паттерном и попробую применить
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
25.04.2018, 18:58
Цитата Сообщение от 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
// Базовый класс для героя
abstract class Hero {
    // Принять выпавшую из монстра вещь
    public abstract void Accept (IThingFromMonster tfm);
}
 
// Подтип героя - герой с деньгами
class HeroWithMoney : Hero {
    public int Money = 0;
    public override void Accept (IThingFromMonster tfm){
        tfm.AddToHeroWithMoney (this);
    }
}
 
// Еще один подтип героя - герой с алкоголем
class HeroWithAlcohol : Hero {
    public int Alcohol = 0;
    public override void Accept (IThingFromMonster tfm){
        tfm.AddToHeroWithAlcohol (this);
    }
}
 
// Интерфейс (можно базовый класс) для "выпавшей из монстра вещи"
interface IThingFromMonster {
    // Применить к герою типа 1
    void AddToHeroWithMoney(HeroWithMoney hero);
    // Применить к герою типа 2
    void AddToHeroWithAlcohol(HeroWithAlcohol hero);
}
 
// Из монстра выпали деньги
class Money : IThingFromMonster {   
    public void AddToHeroWithMoney(HeroWithMoney hero)  {
        hero.Money += 1; // Добавим денег
    }
 
    public void AddToHeroWithAlcohol(HeroWithAlcohol hero) {
        // Ничего не делаем
    }
}
 
// Из монстра выпала бутылка с водкой
class Bottle : IThingFromMonster {  
    public void AddToHeroWithMoney(HeroWithMoney hero)  {
        // ничего не делаем
    }
    public void AddToHeroWithAlcohol(HeroWithAlcohol hero) {
        hero.Alcohol += 500; // Добавим 500 г
    }
}
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
25.04.2018, 19:05  [ТС]
woldemas, ага значит надо для начала задать итоговые параметры герою в виде стартовой атаки уклонения и крита, правильно?!
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
25.04.2018, 19:08
Цитата Сообщение от Esso11 Посмотреть сообщение
итоговые параметры герою в виде стартовой атаки уклонения и крита, правильно?!
ну это уж я не знаю, я только про двойную диспетчеризацию
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
25.04.2018, 19:57
про деление по классам
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
 
namespace ConsoleApp2
{
    public enum HeroClass
    {
        Archer,
        Mage,
        Healer,
        Warrior
    }
    class Hero
    {
        public string Name { get; private set; }
    }
    class Archer : Hero
    {
        public int CritChance { get; private set; }
        public int RangeDamage { get; private set; }
        public HeroClass heroClass { get; private set; }
        public Archer()
        {
            heroClass = HeroClass.Archer;
        }
    }
    class Bow
    {
        public int CritChance { get; private set; }
        public int RangeDamage { get; private set; }
        public HeroClass heroClass { get; private set; }
        public Bow()
        {
            heroClass = HeroClass.Archer;
        }
    }
    class Program1
    {
        static void Main(string[] args)
        {
            Archer myChar = new Archer();
            Bow dragonBow = new Bow();
            var canUse = myChar.heroClass == dragonBow.heroClass;
            Console.WriteLine(canUse);
        }
    }
}
надеюсь идею донес
про статы - делай в классе героя поля - оружие, броня и теде
туда же пихай проверку на класс, проходит? - записывай в это поле предмет
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
26.04.2018, 14:07  [ТС]
Diamante, если не сложно можно прокомментировать
ваш код?

Добавлено через 3 минуты
Diamante, это мы создаем перечисление типов героев, класс героев для чегл нужен?

Добавлено через 11 часов 1 минуту
Diamante, вопрос такой есть у меня созданы классы в таком виде:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public class TrolRogue : AllAttack
        {
            public TrolRogue()
            {
                watck = new Rogueattack();
                mAtck = new NoFightMagicAttack();
            }
            public override void display()
            {
                Console.WriteLine("Я Троль Рог: jodi se yon bel jou!(Сегодня прекрасный день для убийства!)");
            }
        }
Хотел вашего совета нужно ли мне создавать повторно класс для каждого персонажа, или же вашу структуру можно записать в этот класс


Добавлено через 28 минут
Diamante, Идею со шмотом я понял, а как вы предлагаете увеличить навыки(атаку, крит удал, уклонение) если шмотка одета...?! этот момент я не понял
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
26.04.2018, 19:02
типа этого
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
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Media;
 
namespace ConsoleApp2
{
    class Weapon
    {
        public int Damage { get; private set; } = 50;
    }
    class Armor
    {
        public int Defence { get; private set; } = 50;
    }
    class Warrior
    {
        int ownDamage = 50;
        int ownDefence = 100;
        int ownEvasion = 10;
        public int Damage { get => ownDamage + (weapon == null? 0 : weapon.Damage); }
        public int Defence { get => ownDefence + (armor == null ? 0 : armor.Defence); }
        public Weapon weapon;
        public Armor armor;
    }
    class Program1
    {
        static void Main(string[] args)
        {
            Weapon sword = new Weapon();
            Armor armor = new Armor();
            Warrior warrior = new Warrior();
            Console.WriteLine("att = " + warrior.Damage + " def = " + warrior.Defence);
            warrior.weapon = sword;
            Console.WriteLine("att = " + warrior.Damage + " def = " + warrior.Defence);
            warrior.armor = armor;
            Console.WriteLine("att = " + warrior.Damage + " def = " + warrior.Defence);
        }
    }
}
0
5 / 5 / 0
Регистрация: 20.08.2017
Сообщений: 685
27.04.2018, 17:34  [ТС]
Diamante, подскажите пожалуйста почему в такой структуре не выводиться на консоль содержимого поляWeapon
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
class Rogue : Hero
    {
        public int CritChance { get; private set; }
        public int RangeDamage { get; private set; }
        public HeroClass heroClass { get; private set; }
        public Rogue()
        {
            heroClass = HeroClass.Rogue;
        }
    }
class Daggers
    {
        public string Weapon { get; private set; } = ("Становится персональным при получении\nПредмет для правой руки\n64 - 108 Урон\n(33,08 ед. урона в секунду)\n+9 к ловкости\n+19 к выносливости\n+8 к критическому удару\nКлассы: Разбойник");
        public int CritChance { get; private set; }
        public int RangeDamage { get; private set; }
        public HeroClass heroClass { get; private set; }
        public Daggers()
        {
            heroClass = HeroClass.Rogue;
        }
    }
class Program1
    {
        static void Main(string[] args)
        {
            Rogue rogue = new Rogue();
            Daggers dragondagger = new Daggers();
            
              
            var canUse = rogue.heroClass == dragondagger.heroClass;
      
 
            Console.WriteLine("вы одели : ",(dragondagger.Weapon));
        }
    }
Добавлено через 1 час 22 минуты
вопрос снят забыл кавычки, простите)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2018, 17:34
Помогаю со студенческими работами здесь

Лучшие Action-RPG игры
Привет всем! Вот перерыл и-нет в поисках норм Action RPG 3d person игр! Может посоветуете игру типа Two Worlds, Dungeon Lords, Oblivion,...

Как можно описать классы "ячейка" и "предмет" для игры типа RPG
Помогите представить то, как можно написать инвентарь и предмет. Допустим я делаю что то вроде тестовой рпг (для себя). И вот у меня...

Работа с классами: сделать метод Sum для вычисления суммы 2 матриц
Доброго времени суток, форумчане. Помогите пожалуйста решить проблему. У меня имеется задание: сделать метод Sum для вычисления суммы 2...

ООП для создания игры с классами "карта", "игрок", "враги"
Тут такой вопрос, я пишу игру. В игре есть карта,игрок,враги, отлавливание нажатий клавиш, для всего этого надо создавать свой класс или...

AS программист для браузерной RPG
Доброго времени суток. Для написания клиентской части браузерной RPG в Фентези стиле ищется ActionScript программист с достаточным...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru