Форум программистов, компьютерный форум CyberForum.ru

Система инвентаря для игры - C++

Восстановить пароль Регистрация
 
maks242
46 / 20 / 7
Регистрация: 01.11.2013
Сообщений: 233
Завершенные тесты: 2
29.08.2015, 18:31     Система инвентаря для игры #1
В общем, перенёс я код,который писал на движке, в VS и мне нужна помощь. P.S. Ошибки такие же как и в движке.
Inventory.cpp
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
#include "Inventory.h"
 
 
Inventory::Inventory()
{
 
}
void Inventory::TakeItem(Actor* inItem)
{
    //
    bool SameItems;
    //
    int FreeSlot = -1;
    for (int i = 0; i < 20; i++)
    {
        if (bInventory[i].bClass.bIteminfo.bItemName == inItem->bIteminfo.bItemName)
        {
            bInventory[i].bCount++;
            SameItems = false;
            cout << "Было получено: " << bInventory[i].bClass.bIteminfo.bItemName << ". Колличество: " << bInventory[i].bCount << endl;
            system("PAUSE");
        }
    }
    if (SameItems == false)
    {
        for (int i = 0; i < 20; i++)
        {
            if (bInventory[i].bCount == 0)
            {
                FreeSlot = i;
            }
        }
    }
    if (FreeSlot == -1)
    {
        cout << "Нету свободных слотов" << endl;
        system("PAUSE");
    }
    else
    {
        FInventoryStructure NewItem;
        NewItem.bClass.bIteminfo = inItem->bIteminfo;
        bInventory[FreeSlot] = NewItem;
        cout << "Было получено: " << bInventory[FreeSlot].bClass.bIteminfo.bItemName << ". Колличество: " << bInventory[FreeSlot].bCount << endl;
        system("PAUSE");
    }
}
void Inventory::DropItem()
{
    if (bInventory[0].bCount > 0)
    {
        bInventory[0].bCount--;
        cout << "Был выброшен: " << bInventory[0].bClass.bIteminfo.bItemName << ". Осталось: " << bInventory[0].bCount << endl;
        system("PAUSE");
    }
    else
    {
        cout << "Нету в этой ячейке предметов!" << endl;
        system("PAUSE");
    }
 
}
Inventory.h
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
#pragma once
#include "Actor.h"
#include <string>
#include <iostream>
using namespace std;
 
 
struct FInventoryStructure
{
 
public:
    //Колличество предметов
    int bCount;
    //Класс который хранит информацию о предмете
    Actor bClass;
    //Ид
    string bID;
    FInventoryStructure()
    {
        //bClass = ??? Тут я не знаю что делать.
        bCount = -1;
        bID = "";
    }
};
 
class Inventory
{
public:
    Inventory();
 
    //20 слотов в рюкзаке
    FInventoryStructure bInventory[20];
 
    //Поднять предмет
    void TakeItem(Actor* inItem);
 
    //Выбросить предмет
    void DropItem();
 
};
Actor.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "Actor.h"
 
 
Actor::Actor()
{
    bIteminfo.bHotbarPlaceable = false;
    bIteminfo.bItemDescription = "блаблабалбалабла";
    bIteminfo.bItemName = "Неизвестно";
    bIteminfo.bItemStackSize = NULL;
 
}
Actor.h
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
#pragma once
 
#include "Actor.h"
#include <string>
#include <iostream>
using namespace std;
 
struct FItemInfo
{
 
public:
 
    //Имя предмета
        string bItemName;
 
    //Описание предмета
        string bItemDescription;
 
    //Вместимость предмета
        int bItemStackSize;
 
    //Возможность выбросить
        bool bHotbarPlaceable;
 
    //Конструктор
    FItemInfo() {}
 
};
 
 
class Actor
{
public:
    Actor();
 
    FItemInfo bIteminfo;
 
    //Это должна быть сама модель предмета, но...
    //class UStaticMeshComponent* bItemMesh;
 
};
Character.cpp
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
#include "Character.h"
 
 
void Character::TakeItem()
{
    // Сократил, в самом движке написал строку без комментария снизу. Т.е. что-то оно должно дать.
    Actor* UsableItem; // = Cast<Actor>(Hit.GetActor());
    //Вообщем чтобы действительно не было NULL создадим экзепляр и дадим адрес его указателю.
    Actor LaLaLa;
    LaLaLa.bIteminfo.bHotbarPlaceable = true;
    LaLaLa.bIteminfo.bItemDescription = "LaLaLa";
    LaLaLa.bIteminfo.bItemName = "laLala";
    LaLaLa.bIteminfo.bItemStackSize = 5;
    //Чтобы не были пустыми данные
    UsableItem = &LaLaLa;
 
    if (UsableItem != NULL)
    {
        Inventory *Inventory;
        Inventory->TakeItem(UsableItem);
        //Destroy(UsableItem);
    }
 
}
Character.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
 
#include "Actor.h"
#include "Inventory.h"
#include <string>
#include <iostream>
using namespace std;
 
class Character
{
public:
    void TakeItem();
};
Код плохой, если можете и имеете желание помочь, помогите, очень нужно. Не спрашивайте почему я не переместил всё в один файл, всё стоит на своих местах. Собственно говорят, вот какие ошибки выдал мне компилятор:
Кликните здесь для просмотра всего текста
Предупреждение 1 warning C4700: использована неинициализированная локальная переменная "Inventory" visual studio 2013\projects\consoleapplication15\consoleapplication15\character.cpp 15 1 ConsoleApplication15
Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ _main в функции ___tmainCRTStartup visual studio 2013\Projects\ConsoleApplication15\ConsoleApplication15\MSVCRTD.lib(crtexe.obj) ConsoleApplication15
Ошибка 3 error LNK1120: неразрешенных внешних элементов: 1 visual studio 2013\Projects\ConsoleApplication15\Debug\ConsoleApplication15.exe 1 1 ConsoleApplication15

Кроме этого в 15 строке Inventory.h просит в самом движке компилятор сделать из Actor bClass указатель. Помогите. Если готовы помочь, напишет пожалуйста что попробуете. Чтобы я не надеялся в случае 0 ответов в теме. Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
29.08.2015, 21:08     Система инвентаря для игры #2
Предупреждение
Цитата Сообщение от maks242 Посмотреть сообщение
использована неинициализированная локальная переменная "Inventory"
Вы забыли присвоить значение переменной Inventory.
Ошибка
Цитата Сообщение от maks242 Посмотреть сообщение
ссылка на неразрешенный внешний символ _main
main - Точка входа в программу. С этой функции начинается сборка. Где она у Вас?
maks242
46 / 20 / 7
Регистрация: 01.11.2013
Сообщений: 233
Завершенные тесты: 2
29.08.2015, 22:48  [ТС]     Система инвентаря для игры #3
zss, Скажите мне почему компилятор просит переменную в 15 строке сделать указателем? И, "Вы забыли присвоить значение переменной Inventory", мне нужно кастить её, но я не знаю как.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
29.08.2015, 23:18     Система инвентаря для игры #4
В файле Actor.h есть строка
Цитата Сообщение от maks242 Посмотреть сообщение
#include "Actor.h"
Как это понимать?
maks242
46 / 20 / 7
Регистрация: 01.11.2013
Сообщений: 233
Завершенные тесты: 2
29.08.2015, 23:23  [ТС]     Система инвентаря для игры #5
zss, Это видимо я случайно, но не в этом ведь проблема
SherHun
 Аватар для SherHun
29 / 29 / 15
Регистрация: 22.06.2015
Сообщений: 102
30.08.2015, 01:28     Система инвентаря для игры #6
Unreal ?
давайте лучше код из движка как есть.
Yandex
Объявления
30.08.2015, 01:28     Система инвентаря для игры
Ответ Создать тему
Опции темы

Текущее время: 11:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru