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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ SetConsoleTextAttribute | Как выставить свой цвет http://www.cyberforum.ru/cpp-beginners/thread1521693.html
Доброго времени суток! Хотелось бы узнать возможно выставлять свой цвет в SetConsoleTextAttribute? Заранее спасибо!
C++ Как узнать марку процессора методами WinApi? Доброго времени суток! Как можно узнать модель и фирму процессора через WinApi? Заранее спасибо! http://www.cyberforum.ru/cpp-beginners/thread1521689.html
Интерактивное хранилище данных C++
help) Задание переписываем текстом в сообщение. Правила форума 5.18. Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Найти остаток от деления числа N на число M используя только побитовые операции C++
Помогите найти остаток от деления произвольного числа N на произвольное число M, где N, M - натуральные числа, используя только эти три побитовые операции: &, |, ^. Сложение и вычитание использовтать можно, но не желательно. Операции сдвига, отрицания деления и умножения использовать запрещено. Да и циклы нежелательно. Что-то я запутался. Вот так будет остаток от деления произвольного числа N...
C++ Какие существуют способы выделения памяти для переменных? http://www.cyberforum.ru/cpp-beginners/thread1521649.html
А какие существуют способы выделять память для переменных?
C++ Класс HugeInt Создайте класс HugeInt, который хранит в 1000-элементном массиве цифр целые числа разрядностью до 1000 знаков. Предусмотреть функцию возведения в степень, сложение и умножение. Сложение и умножение написал, а с возведением в степень жесткие траблы. подробнее

Показать сообщение отдельно
maks242
46 / 20 / 7
Регистрация: 01.11.2013
Сообщений: 237
Завершенные тесты: 2

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

29.08.2015, 18:31. Просмотров 382. Ответов 5
Метки (Все метки)

В общем, перенёс я код,который писал на движке, в 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 ответов в теме. Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru