Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 10.08.2015
Сообщений: 54
1

Концептуальная реализация апгрейда оружия в игре

27.02.2016, 12:06. Показов 1267. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть игра в которой есть оружие. Например у него есть УРОН, ВРЕМЯ ПЕРЕЗАРЯДКИ, КОЛ-ВО ПАТРОНОВ В МАГАЗИНЕ и ВЕС оружия. Не могу концептуально врубиться как реализовать чтобы каждый параметр имел, например, 4 стадии улучшения, соответственно для каждой стадии своя цена (рассчитывается динамически в зависимости от стоимости пушки и некоего коэффициента для данного параметра). Все это дело сохранялось потом каким-то образом, грубо говоря "что сереализовать?" При этом чтобы можно было добавляя новое оружие в игру автоматически присваивать возможность улучшения.

Еще вдогонку вопрос как нормальные люди реализуют такую схему когда у каждой стадии есть имя и описание:
Может создать класс с константами улучшений и описания?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name[0] = "УРОН";
desc[0,0] = "пули из серебра";
desc[0,1] = "улучшенные механизмы";
name[1] = "КОЛ-ВО ПАТРОНОВ";
desc[1,0] = "увеличение обоймы";
desc[1,1] = "двойной магазин";
 
for(int i =0; i < updates; i++) {
Modding newMod = new Modding();
newMod.name = name[i];
for(int k =0; k < desc.GetLength(2); k++) {
newMod.desc = desc[k];
//рисуем кнопку с описанием 
}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2016, 12:06
Ответы с готовыми решениями:

Реализация курсора в игре на консоли
Привет всем! У меня есть игра на консоли, нужно двигать стрелочками клавиатуры одну фигурку, если...

Концептуальная реализация инвентаря
Не получается сообразить как реализовать инвентарь таким образом, чтобы игрок мог экипировать...

Реализация боя в игре
var hp, dmg, enhp, endmg: real; var yes: string; begin hp:=30; dmg:=5; enhp:=40; endmg:=2;...

Реализация радара в игре
Начал делать круглый радар в игре. Суть такова: 1) Отрисовую бело-черную маску радара 2) Рисую...

2
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.02.2016, 12:33 2
zxmaster, Во-первых неплохо было бы привести хоть какой-то код. Тот, что вы привели - совершенно не показателен.
Во-вторых, в играх есть куча всевозможных решений. И очень разных. Я не знаю какое решение используется у вас (и есть ли оно вообще). Но вот приблизительное решение в случае компонентной модели игровых объектов:
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
    [Serializable]
    public class Weapon : List<IGameComponent>
    {
    }
 
    [Serializable]
    public class Damage : IGameComponent
    {
        private float[] prices = {2f, 3.5f, 4f, 5.5f};
        private string[] names = { "Стандарт", "Стандарт +", "Профи", "Супер" };
 
        public int UpgradeLevel { get; set; }
 
        public float PriceKoeff
        {
            get { return prices[UpgradeLevel]; }
        }
 
        public string Name
        {
            get { return names[UpgradeLevel]; }
        }
    }
 
    public interface IGameComponent
    {
        int UpgradeLevel { get; set; }
        float PriceKoeff { get; }
        string Name { get; }
    }
Класс Weapon содержит список компонентов (туда могут входить некие компоненты оружия - урон, магазин, вес и т.д.). Все комопненты реализуют интерфейс IGameComponent, который позволяет получать текущий уровень апгрейда компонента, его имя (в зависимости от уровня апгрейда) и коэфф цены. Соответственно ваш класс weapon может посчитать свою текущую стоимость как сумму стоимостей всех своих компонентов (возможно умноженных на некий свой коэффициент). Также, можно увеличить уровень апгрейда какого-либо компонента, и получить соотв цену и наименование.
1
0 / 0 / 1
Регистрация: 10.08.2015
Сообщений: 54
27.02.2016, 12:52  [ТС] 3
Storm23, на данный момент есть массив bool который хранит в себе куплено оружие или нет. Вообще немного криво реализовано. То есть массив всего primary(основного) оружия и такой же массив bool. Теперь надо еще увязать как-то с этим оружием улучшения. Сами оружия не сереализуются, а только этот bool массив. Куплено оружие или нет.

P.S. игра уже вышла на ios называется Craziest Duck. это я хочу выпустить патч.

Пока то что есть:
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
59
60
61
62
63
64
public class ItemUpdates
{
    public string[,] description = new string[4,4];
 
    void SetInfo ()
    {
        //damage/accuracy
        description[0, 0] = "Adding Angled Grip";
        description[0, 1] = "";
        description[0, 2] = "";
        description[0, 3] = "";
 
        //magazine size
        description[1, 0] = "";
        description[1, 1] = "";
        description[1, 2] = "";
        description[1, 3] = "";
 
        //reloading time
        description[2, 0] = "";
        description[2, 1] = "";
        description[2, 2] = "";
        description[2, 3] = "";
 
        //weight
        description[3, 0] = "";
        description[3, 1] = "";
        description[3, 2] = "";
        description[3, 3] = "";
    }
}
 
public class ModdingInformation {
    public int stage { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public int price(int itemPrice) {
 
        int price = 0;
        price = itemPrice / 2 * stage ^ 2 + itemPrice / 2 * stage + itemPrice / 2;
        Debug.Log(string.Format("Stage={0} Price={1}",stage,price));
        return price;
    }
    public float damageBonus()
    {
        float damageBonus = 0;
        return damageBonus;
    }
 
    public float reloadTimeBonus() { float reloadTimeBonus = 0; return reloadTimeBonus; }
    public int magazineSizeBonus() { int magazineSizeBonus = 0; return magazineSizeBonus; }
    public float weightBonus() { float weightBonus = 0; return weightBonus; }
}
 
interface iModdable {
    int stage { get; set; }
    string name { get; set; }
    string description { get; set; }
    int price();
    float damageBonus();
    float reloadTimeBonus();
    int magazineSizeBonus();
    float weightBonus();
}
0
27.02.2016, 12:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2016, 12:52
Помогаю со студенческими работами здесь

Реализация компьютера в игре
Здравствуйте. При разработке игры возникла нужда реализовать компьютер и рабочий стол в игре....

Реализация потоков в игре Арканоид
Здравствуйте, участники форума. Написал одну из реализаций игры арканоид. Движение каждого...

Реализация сцен в игре (С++ и OpenGL)
Я новичок в с++ и OpenGl. Но уже создал три простеньких игрушки. Суть такая: сначала создаю окно (с...

Реализация текста и музыки в игре
Здравствуйте, уважаемые посетители форума. Вопрос скорее теоретический. Если приходилось кому то...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru