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

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

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

Студворк — интернет-сервис помощи студентам
Есть игра в которой есть оружие. Например у него есть УРОН, ВРЕМЯ ПЕРЕЗАРЯДКИ, КОЛ-ВО ПАТРОНОВ В МАГАЗИНЕ и ВЕС оружия. Не могу концептуально врубиться как реализовать чтобы каждый параметр имел, например, 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.02.2016, 12:06
Ответы с готовыми решениями:

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

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

Реализация боя в игре
var hp, dmg, enhp, endmg: real; var yes: string; begin hp:=30; dmg:=5; enhp:=40; endmg:=2; writeln ('На вас напала крыса!...

2
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.02.2016, 12:33
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
 Аватар для zxmaster
0 / 0 / 1
Регистрация: 10.08.2015
Сообщений: 54
27.02.2016, 12:52  [ТС]
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.02.2016, 12:52
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru