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

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

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

Студворк — интернет-сервис помощи студентам
Для практики на 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.03.2019, 12:14
Ответы с готовыми решениями:

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

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

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

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

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

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

Не по теме:


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

0
Just Do It!
 Аватар для XLAT
4206 / 2663 / 655
Регистрация: 23.09.2014
Сообщений: 9,061
Записей в блоге: 3
28.03.2019, 13: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
///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
 Аватар для dreamer_108
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 13:11
Цитата Сообщение от XLAT Посмотреть сообщение
в данном случае эти методы не являются замещением конструкторов, а предназначена для многократных(!) вызовов, чтобы вешать на персонажа разные аптечки
Не согласен - это создание инвентаря на основании листа аптечек. Чтобы вешать аптечки на персонажа, надо получать из него инвентарь, из которого элемент инвентаря (в данном случае - список аптечек), к которому добавить еще одну аптечку.
А этот метод заменяет ссылку, то есть выкидывает старый лист и заменяет его новым.
Я бы изначально создал инвентарь пустым и вызывал бы у него метод для добавления или удаления аптечки
0
Just Do It!
 Аватар для XLAT
4206 / 2663 / 655
Регистрация: 23.09.2014
Сообщений: 9,061
Записей в блоге: 3
28.03.2019, 13:35
Цитата Сообщение от 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
 Аватар для dreamer_108
75 / 55 / 21
Регистрация: 10.07.2018
Сообщений: 214
28.03.2019, 13:38
Цитата Сообщение от XLAT Посмотреть сообщение
а значит, что инициализация указателя аптечки ЛИСТОМ на этапе создания объекта инвентаря
просто не имеет смысла
Так и не за чем инициализировать ее листом - при добавлении новой аптечки, если такого листа нет, он должен сам создаться (на или, может быть, какое-то подобное решение исходя из логики)
0
Just Do It!
 Аватар для XLAT
4206 / 2663 / 655
Регистрация: 23.09.2014
Сообщений: 9,061
Записей в блоге: 3
28.03.2019, 13:50
Цитата Сообщение от dreamer_108 Посмотреть сообщение
он должен сам создаться
очевидно аптечки разбросаны по миру и инвентарь их сам никак создать не может.

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

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

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

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

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

Не по теме:

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

0
Just Do It!
 Аватар для XLAT
4206 / 2663 / 655
Регистрация: 23.09.2014
Сообщений: 9,061
Записей в блоге: 3
28.03.2019, 14:35
Цитата Сообщение от dreamer_108 Посмотреть сообщение
Ну и по поводу стараются избегать - я не глядел и исходники движков, но не думаю, что прямо таки все стараются...
ага. а прикол тут в том,
что были созданы новые языки,
с тем чтобы иначе, чем с OOП писать код было никак нельзя.

А то видите ли, кресты дают слишком много свободы, а это и есть самый большой крестонедостаток)))
0
1 / 1 / 0
Регистрация: 25.02.2019
Сообщений: 26
28.03.2019, 16:29  [ТС]
Ещё не прочитал и ничего не попробовал из того, что предложили. Но если это внесёт какую-то ясность в ваши споры, то инвертарь должен был работать так.
Вот есть класс инвертарь, в котором в последующем должны быть несколько списков. Допустим список на оружие, которое имеет персонаж, список на медикаменты, список на элементы брони, которые персонаж может носить на себе.
У врагов тоже по идее в будущем должен был генерироваться инвертарь, чтобы с них выпадала какая-нибудь лабуда.
Взаимодействие с инвертарём должно было осуществляться тип использованием (тобиш удалением) зелий во время драки с врагами.
И подскажите, как обозначать, что текст "не по теме"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2019, 16:29
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru