Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 25.02.2019
Сообщений: 26
1

Работа с классами

28.03.2019, 12:14. Показов 2880. Ответов 25

Author24 — интернет-сервис помощи студентам
Для практики на c++, делаю небольшую игрушку. Возникла проблема с присваиванием класса.
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
// RPG___ForCyberForum.cpp: определяет точку входа для консольного приложения.
//
 
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
 
using namespace std;
 
void String()
{
    cout << "---------------------------------------------------------------------------------------------" << endl;
}
 
class Heal//Лечебное зелье
{
private:
    string name;
    int restored_health;
public:
    void CreateHeal(string name, int restored_health)
    {
        this->name = name;
        this->restored_health = restored_health;
    }
    string ShowNameMedicine()
    {
        return name;
    }
};
 
class ElementHealBox//"Слот" под зелье
{
public:
    class Heal Medicine;
    ElementHealBox *pNext;
    int number_medicine = 1;
};
 
class ListHealBox//Односвязный список "слотов" с зельями
{
private:
    ElementHealBox *pHead;
    int size = 0;
public:
    ListHealBox() { pHead = nullptr; }
    void Show()
    {
        ElementHealBox *temp = pHead;
        while (temp != NULL)
        {
            cout << temp->Medicine.ShowNameMedicine() << " Количество склянок: " << temp->number_medicine << endl;
            temp = temp->pNext;
        }
        String();
    }
    int Add(Heal AddHeal)
    {
        if (size == 10)
        {
            cout << "Сумка с зельями полна" << endl;
            return 0;
        }
        if (pHead == NULL)//Если список пуст
        {
            ElementHealBox *temp = new ElementHealBox;
            temp->Medicine = AddHeal;
            temp->pNext = pHead;
            pHead = temp;
            size++;
        }
        else if (AddHeal.ShowNameMedicine() != pHead->Medicine.ShowNameMedicine() && pHead->pNext == nullptr)//Если один элемент в списке и не совпадает с добавляемым зельем
        {
            ElementHealBox *temp = new ElementHealBox;
            pHead->pNext = temp;
            temp->Medicine = AddHeal;
            temp->number_medicine = 1;
            temp->pNext = nullptr;
            size++;
        }
        else if (AddHeal.ShowNameMedicine() == pHead->Medicine.ShowNameMedicine() && pHead->pNext == nullptr)//Если один элемент в списке и совпадает с добавляемым зельем 
            pHead->number_medicine++;
        else
        {
            ElementHealBox *current = pHead->pNext;
            while (AddHeal.ShowNameMedicine() != current->Medicine.ShowNameMedicine() && current->pNext != nullptr) //Не один элемент в списке. идём по списку пока не встретим совпадение
                current = current->pNext;
            if (AddHeal.ShowNameMedicine() == current->Medicine.ShowNameMedicine())//Если встретили добавляем 1 зелье
            {
                current->number_medicine++;
            }
            else//если достигли конца, делаем новый слот с добавляемым зельем
            {
                ElementHealBox *temp = new ElementHealBox;
                current->pNext = temp;
                temp->Medicine = AddHeal;
                temp->number_medicine = 1;
                temp->pNext = nullptr;
                size++;
            }
        }
        Show();
        return 0;
    };
    int Delete(Heal DeleteHeal)
    {
        if (pHead->Medicine.ShowNameMedicine() == DeleteHeal.ShowNameMedicine())
        {
            if (pHead->number_medicine > 1)
                pHead->number_medicine--;
            else if (pHead->number_medicine == 1)
            {
                if (pHead->pNext == nullptr)
                {
                    delete pHead;
                    size--;
                }
                else if (pHead->pNext != nullptr)
                {
                    ElementHealBox *current = pHead->pNext;
                    delete pHead;
                    pHead = current;
                    size--;
                }
            }
        }
        else
        {
            ElementHealBox *current = this->pHead;
            while (current->pNext->Medicine.ShowNameMedicine() != DeleteHeal.ShowNameMedicine())
                current = current->pNext;
            if (current->pNext->number_medicine > 1)
                current->pNext->number_medicine--;
            else if (current->pNext->number_medicine == 1 && current->pNext->pNext == nullptr)
            {
                delete current->pNext;
                current->pNext = nullptr;
                size--;
            }
            else if (current->pNext->number_medicine == 1 && current->pNext != nullptr)
            {
                ElementHealBox *current_1 = current;
                current = current->pNext;
                current_1->pNext = current->pNext;
                delete current;
                size--;
            }
        }
        return 0;
    }
    ElementHealBox* operator [](const int number)
    {
        int number_current = 1;
        ElementHealBox *current = pHead;
        while (current != nullptr)
        {
            if (number_current == number)
                return current;
            current = current->pNext;
            number_current++;
        }
    }
 
    ~ListHealBox()
    {
        while (pHead != NULL)
        {
            ElementHealBox *temp = pHead->pNext;
            delete pHead;
            pHead = temp;
        }
    };
 
};
 
class Invertory//Инвертарь
{
public:
    class ListHealBox *MedicineBag;//"Сумка" с зельями
    void CreateInvertory(ListHealBox MedicineBag)
    {
        this->MedicineBag = &MedicineBag;
    }
};
 
class Hero
{
private:
    string name;
    int health = 50;
public:
    class Invertory *InvertoryOfHero;//Инвертарь героя
    void CreateGG(string name, Invertory InvertoryOfHero)
    {
        this->name = name;
        this->InvertoryOfHero = &InvertoryOfHero;
    }
    void SetHealth(int health)
    {
        this->health = health;
    }
    int GetHealth()
    {
        return health;
    }
};
 
void main()
{
    setlocale(LC_ALL, "ru");
    srand(time(0));
    cout << "Доброго времени суток, вы запустили игру *Название*" << endl;
    ///////////////////////////////////////////////////////////////////////////////////////
    Heal SmalHealingPotion, AverageHealingPotion, GreatHealingPotion;
    SmalHealingPotion.CreateHeal("SmalHealingPotion - Малое лечебное зелье", 10);
    AverageHealingPotion.CreateHeal("AverageHealingPotion - Среднее лечебное зелье", 25);
    GreatHealingPotion.CreateHeal("GreatHealingPotion - Большое лечебное зелье", 50);
    ////////////////////////////////////////////////////////////////////////////////////////
    class ListHealBox List;
    List.Add(SmalHealingPotion);
    List.Add(SmalHealingPotion);
    List.Add(AverageHealingPotion);
    List.Add(AverageHealingPotion);
    List.Add(AverageHealingPotion);
    List.Add(GreatHealingPotion);
    List.Show();
    List.Delete(AverageHealingPotion);
    List.Delete(GreatHealingPotion);
    List.Delete(SmalHealingPotion);
    List.Show();
    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    class Invertory InvertoryOfGG;
    InvertoryOfGG.CreateInvertory(List);
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    Hero MyHero;
    cout << "Введите имя вашего героя: ";
 
    string s;
    cin >> s;
    MyHero.CreateGG(s, InvertoryOfGG);
    String();
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    system("pause");
}
По плану у класса человек есть класс инвертарь, который состоит из односвязных списков. Сейчас там представлен один список. Это список с лечебными зельями. В список зелья добавляются-удаляются, всё происходит нормально.
Всё происходит нормально до строки 237 .
После прохождения этой строки(она означает присваивание классу инвертарь класс-список лечебных зелий) сам список меняется. то есть некоторые данные остаётся в нормальном виде, а в некоторых данных и указателях появляется какой-то мусор.
Может кто-нибудь объяснить, как это реализовать правильно или что исправить, чтобы было правильно и как это работает?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2019, 12:14
Ответы с готовыми решениями:

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

Работа с классами
Помогите плз Определите значение переменных а, х, с после выполнения следующих команд: class...

работа с классами
помогите пожалуйста написать программу на C++: Создать класс Complex для работы с комплексными...

Работа с классами
Задача:найти сумму всех отрицательных элементов матрицы и записать в вектор. For (i=0;i&lt;=N;i++)...

25
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 12:32 2
Не залезая глубоко, вижу, что Вы создаете ListHealBox List (кстати, не нужно перед этим указывать слово class) на стеке, а после указатель на него записываете в класс. В данный момент проблема, скорее всего, не в этом, но как только вы выйдете из области видимости функции, создающей инвентарь, он будет уничтожен, а инвентарь указывает именно на него (то есть, на уже уничтоженные данные).
Чтобы это обойти, либо копируйте этот список в инвентарь, либо создавайте его в куче с помощью new, либо, что намного лучше, создайте его прямо внутри инвентаря, ведь он инвентарю принадлежит

Добавлено через 1 минуту
Кроме того, рекомендую избавиться от методов CreateInventory, CreateGG и тому подобных - используйте конструкторы, зачем они Вам даны?)

Добавлено через 6 минут

Не по теме:


Средний, в данном случае, лучше назвать middle, кажется

0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,070
Записей в блоге: 3
28.03.2019, 13:02 3
Андрей Холодов, ок
пытаюсь свести ваши проблему в минимальный код:

Копия локальной аптечки(как у вас):
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
///ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
/// Сводим проблему в минимальный код!
///ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
 
#include <iostream>
 
class cListHealBox//Односвязный список "слотов" с зельями
{
public:
    int test;
};
 
 
class cInvertory//Инвертарь
{
public:
    cListHealBox* MedicineBag;//"Сумка" с зельями
    void CreateInvertory(cListHealBox MedicineBag)
    {
        /// ДА! Указатель на копию ListHealBox: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        this->MedicineBag = &MedicineBag;
    }
};
 
int main()
{   setlocale(0, "");
    cListHealBox ListHealBox;
    ListHealBox.test = 2019;
 
    ///------------------------------------------------------------------------|
    cInvertory Invertory;
    Invertory.CreateInvertory   (ListHealBox);
 
    std::cout << "|---> \n";
    std::cout << Invertory.MedicineBag->test << "\n";
    ListHealBox.test = 8888;
    std::cout << Invertory.MedicineBag->test << "\n\n";
 
    std::cout << "Изменить код, если проблема не была выявлена!\n";
 
    _getch();
    return 0;
}
А вот здесь указатель на внешнюю аптечку!
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
///ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
/// Сводим проблему в минимальный код!
///ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
 
#include <iostream>
 
class cListHealBox//Односвязный список "слотов" с зельями
{
public:
    int test;
};
 
 
class cInvertory//Инвертарь
{
public:
    cListHealBox* MedicineBag;//"Сумка" с зельями
    void CreateInvertory(cListHealBox* MedicineBag)
    {
        /// ДА! А вот здесь указатель на внешнюю аптечку!----------------------!
        this->MedicineBag = MedicineBag;
    }
};
 
int main()
{   setlocale(0, "");
    cListHealBox ListHealBox;
    ListHealBox.test = 2019;
 
    ///------------------------------------------------------------------------|
    cInvertory Invertory;
    Invertory.CreateInvertory   (&ListHealBox);
 
    std::cout << "|---> \n";
    std::cout << Invertory.MedicineBag->test << "\n";
    ListHealBox.test = 8888;
    std::cout << Invertory.MedicineBag->test << "\n\n";
 
    std::cout << "Изменить код, если проблема не была выявлена!\n";
 
    _getch();
    return 0;
}
Цитата Сообщение от dreamer_108 Посмотреть сообщение
рекомендую избавиться от методов CreateInventory
в данном случае эти методы не являются замещением конструкторов, а предназначена для многократных(!) вызовов, чтобы вешать на персонажа разные аптечки.
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 13:11 4
Цитата Сообщение от XLAT Посмотреть сообщение
в данном случае эти методы не являются замещением конструкторов, а предназначена для многократных(!) вызовов, чтобы вешать на персонажа разные аптечки
Не согласен - это создание инвентаря на основании листа аптечек. Чтобы вешать аптечки на персонажа, надо получать из него инвентарь, из которого элемент инвентаря (в данном случае - список аптечек), к которому добавить еще одну аптечку.
А этот метод заменяет ссылку, то есть выкидывает старый лист и заменяет его новым.
Я бы изначально создал инвентарь пустым и вызывал бы у него метод для добавления или удаления аптечки
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,070
Записей в блоге: 3
28.03.2019, 13:35 5
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Не согласен
согласитесь, что у перса может и НЕ БЫТЬ никакой аптечки.
а значит, что инициализация указателя аптечки ЛИСТОМ на этапе создания объекта инвентаря
просто не имеет смысла.

Но все же отсутствие конструктора в классе инвентаря на самом деле есть баг!

как минимум, нужно что-то типа такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class cInvertory//Инвертарь
{
public:
    cInvertory() : cListHealBox(NULL){}
 
    cListHealBox* MedicineBag;//"Сумка" с зельями
    void CreateInvertory(cListHealBox* MedicineBag)
    {
        /// ДА! А вот здесь указатель на внешнюю аптечку!----------------------!
        this->MedicineBag = MedicineBag;
    }
};
название конеш CreateInvertory cбивает с толку))
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 13:38 6
Цитата Сообщение от XLAT Посмотреть сообщение
а значит, что инициализация указателя аптечки ЛИСТОМ на этапе создания объекта инвентаря
просто не имеет смысла
Так и не за чем инициализировать ее листом - при добавлении новой аптечки, если такого листа нет, он должен сам создаться (на или, может быть, какое-то подобное решение исходя из логики)
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,070
Записей в блоге: 3
28.03.2019, 13:50 7
Цитата Сообщение от dreamer_108 Посмотреть сообщение
он должен сам создаться
очевидно аптечки разбросаны по миру и инвентарь их сам никак создать не может.

но, исходя из логики РПГ, по мере брожения перса по миру, аптечки с разным содержанием будут линковаться на указатель(аптечки) из инвентаря.
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 13:53 8
Цитата Сообщение от XLAT Посмотреть сообщение
очевидно аптечки разбросаны по миру и инвентарь их сам никак создать не может
Инвернарь будет создавать не аптечки, а контейнер для их хранения при подборе
Хотя я бы проектировал так:
Инвентарь при создании создает вектор пустых контейнеров, которые хранят указатели на базовый класс хранимого предмета. При подборе предмета проверяется, если уже такие в инвентаре, и если есть, то добавляются в тот же контейнер, иначе добавляются в пустой. Если при этом пустых нет, то предмет подобрать невозможно.
2
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
28.03.2019, 13:58 9
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Так и не за чем инициализировать ее листом - при добавлении новой аптечки, если такого листа нет, он должен сам создаться
Цитата Сообщение от XLAT Посмотреть сообщение
очевидно аптечки разбросаны по миру и инвентарь их сам никак создать не может
Очевидно что нету смысла делать деления на отдельные слоты под зелья, оружие, доспехи, мусор и прочее, прочее.
Что будем на каждый тип того что может хранится создавать отдельне слоты именно под них?
Нет, конечно, слоты могут быть как общее кол-во того сколько в инвентаре чего может местится (т.е. его размер).
Зелья могут занимать один такой слот, оружие 2-3-4 и т.д.
И в любую таку ячейку (слот) пользовать должен иметь возможность положить что угодно, а не только зелья.

Цитата Сообщение от XLAT Посмотреть сообщение
очевидно аптечки разбросаны по миру
Исходя из текущего решения ТС, его архитектура выдохнется намного быстрее чем появится такая штука как "мир" в его "игре", вообще. И начнутся костыли и плохой код ))
2
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,070
Записей в блоге: 3
28.03.2019, 14:08 10
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Хотя я бы проектировал так
этап проектирования,
довольно часто встречаю людей, которые очень глубоко шарят в тонкостях языкового стандартов,
но слыхом не слышали о таком "путешествии".

даже, если посмотреть много ли книг написано по этой теме?
даже, если они и есть, то кто и где их рекомендует?

Добавлено через 2 минуты
Цитата Сообщение от Azazel-San Посмотреть сообщение
Исходя из текущего решения ТС, его архитектура выдохнется намного быстрее чем появится такая штука как "мир" в его "игре"
и почему вы такой жестокий?!
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 14:10 11
Цитата Сообщение от Azazel-San Посмотреть сообщение
Очевидно что нету смысла делать деления на отдельные слоты под зелья, оружие, доспехи, мусор и прочее, прочее
Цитата Сообщение от Azazel-San Посмотреть сообщение
И в любую таку ячейку (слот) пользовать должен иметь возможность положить что угодно, а не только зелья
В общем-то, это я и подразумевал - для того и предложил использовать вектор, хранящий некие контейнеры, которые содержат указатели на базовый класс предмета - таким образом сразу решается вопрос того, как добавлять новые предметы в инвентарь
Цитата Сообщение от Azazel-San Посмотреть сообщение
Исходя из текущего решения ТС, его архитектура выдохнется намного быстрее чем появится такая штука как "мир" в его "игре", вообще. И начнутся костыли и плохой код
Это неизбежно, но это не страшно - ТС написал, что делает это для обучения) Такая архитектура не позволит сделать крутую игру с открытым миром, но опыту наберется)

Добавлено через 2 минуты
Цитата Сообщение от XLAT Посмотреть сообщение
этап проектирования
Да, он в той или иной мере необходим
Цитата Сообщение от XLAT Посмотреть сообщение
довольно часто встречаю людей, которые очень глубоко шарят в тонкостях языкового стандартов,
но слыхом не слышали о таком "путешествии"
О каком путешествии?
Цитата Сообщение от XLAT Посмотреть сообщение
много ли книг написано по этой теме?
Вообще, много - как примеры, приемы объектно-ориентированного проектирования от "банды четырех" и Совершенный код
Цитата Сообщение от XLAT Посмотреть сообщение
кто и где их рекомендует?
Вот эти две рекомендуют многие и везде)
0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,070
Записей в блоге: 3
28.03.2019, 14:11 12
Цитата Сообщение от Azazel-San Посмотреть сообщение
И начнутся костыли и плохой код ))
возможно это курсовик и все что нужно автору, так это решить текущие проблемы
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 14:12 13
Цитата Сообщение от XLAT Посмотреть сообщение
возможно это курсовик и все что нужно автору, так это решить текущие проблемы
Возможно) И как я уже сказал, костыли неизбежны пока ты учишься и в этом нет ничего страшного - ТС не задается задачей написать движок (пока), а при решении этих проблем он наверняка увидит ошибки проектирования и что можно было сделать лучше
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
28.03.2019, 14:16 14
Цитата Сообщение от XLAT Посмотреть сообщение
и почему вы такой жестокий?!
Ну, правда же. Просто мне кажется вот прям каждый должен сделать свою игру, ну иначе никак.
Цитата Сообщение от dreamer_108 Посмотреть сообщение
В общем-то, это я и подразумевал - для того и предложил использовать вектор, хранящий некие контейнеры, которые содержат указатели на базовый класс предмета - таким образом сразу решается вопрос того, как добавлять новые предметы в инвентарь
Когда я писал свое сообщение, вашего еще не было)
Цитата Сообщение от dreamer_108 Посмотреть сообщение
что делает это для обучения
Смотря чего он хочет научится?
Писать ООП код?
Тогда он весьма будет разочарован узнав что в играх наоборот пытаются избегать ООП.
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 14:19 15
Заранее извиняюсь за форматирование - пишу с тапка))
Да, он может на этом научиться писать ООП код, и неважно где и чего стараются избегать - главное, поставить интересную задачу, это не код для продакшн)
Ну и по поводу стараются избегать - я не глядел и исходники движков, но не думаю, что прямо таки все стараются...
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
28.03.2019, 14:23 16
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Да, он может на этом научиться писать ООП код
Тогда я бы ставил более ООП-ориентированные задачи, наверное, если ставка именно на ООП.
Цитата Сообщение от dreamer_108 Посмотреть сообщение
и неважно
Ну, это с какой стороны смотреть)
Цитата Сообщение от dreamer_108 Посмотреть сообщение
это не код для продакшн
Похоже, это главная отмазка для всех (уже не впервые вижу такие утверждения), что бы не писать хороший код ))
0
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 14:26 17
Это совершенно не отмазка чтобы не писать хороший код) Но когда ты только начал учиться, он во всех отношениях хорошим не выйдет - потому я и написал, что то, что у него пойдут костыли неизбежно и не страшно - он на этом обучится и следующий проект будет лучше и чище
И чтобы костылей было меньше, я написал как можно сделать лучше и буду рад за автора, если он примет к сведению Советы и поправки и будет изучать, как сделать лучше
0
Azazel-San
28.03.2019, 14:26
  #18

Не по теме:

Цитата Сообщение от dreamer_108 Посмотреть сообщение
я не глядел и исходники движков
Ну, офк большинство (это почти все) не опен-соурс.
Цитата Сообщение от dreamer_108 Посмотреть сообщение
но не думаю, что прямо таки все стараются
Ну, если Вы хотите что бы ваша игра радовала пользователя, а не лагала, как некоторые игры.
И хотите принимать только хорошие отзывы от юзеров, а не комментарии что готовы убить вас и вашу семью из-за того что ваша игра даже на самом мощном железе лагает и вызывает говерние в 5 точке, то да - избегают.

0
Just Do It!
3841 / 2286 / 636
Регистрация: 23.09.2014
Сообщений: 7,070
Записей в блоге: 3
28.03.2019, 14:35 19
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Ну и по поводу стараются избегать - я не глядел и исходники движков, но не думаю, что прямо таки все стараются...
ага. а прикол тут в том,
что были созданы новые языки,
с тем чтобы иначе, чем с OOП писать код было никак нельзя.

А то видите ли, кресты дают слишком много свободы, а это и есть самый большой крестонедостаток)))
0
1 / 1 / 0
Регистрация: 25.02.2019
Сообщений: 26
28.03.2019, 16:29  [ТС] 20
Ещё не прочитал и ничего не попробовал из того, что предложили. Но если это внесёт какую-то ясность в ваши споры, то инвертарь должен был работать так.
Вот есть класс инвертарь, в котором в последующем должны быть несколько списков. Допустим список на оружие, которое имеет персонаж, список на медикаменты, список на элементы брони, которые персонаж может носить на себе.
У врагов тоже по идее в будущем должен был генерироваться инвертарь, чтобы с них выпадала какая-нибудь лабуда.
Взаимодействие с инвертарём должно было осуществляться тип использованием (тобиш удалением) зелий во время драки с врагами.
И подскажите, как обозначать, что текст "не по теме"?
0
28.03.2019, 16:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2019, 16:29
Помогаю со студенческими работами здесь

Работа с классами
Добрый день, помогите написать программу которая создаёт класс Bool – логические переменные....

Работа с классами в С++
Доброго всем дня.У меня возникла проблема с освоением языка C++ , сейчас пишу курсовую на этом...

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

Работа с классами
Привет всем!!!!! Пацаны помогите написать программу плиз, на завтро нужно!!!!! Тема: Классы...


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

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