[C++] 벡터를 사용해서 인벤토리 생성
2022. 6. 14. 21:18ㆍ코딩 1막 <C++개념편>/코딩 1막 <C++응용편>
728x90
게임을 만들때 필요한 인벤토리는 필수이다.
인벤토리가 가질 수 있는 기능을 생각해보고 어떤 기능을 넣을것 이고 어떻게 만들 것인가를 구체적으로 생각해야한다.
이는 객체지향이라는 특성을 가진 C++에서 매우 중요한 사고이다.
1. 인벤토리 구조체 만들기
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Item
{
string name;
Item()
{
}
Item(string _name)
{
name = _name;
}
};
struct Player
{
vector<Item*> inventory;
void PrintInventory()
{
cout << "----인벤토리 정보 출력----" << endl;
for (int i = 0; i < inventory.size(); i++)
{
cout << i << "번째 아이템 : " << inventory[i]->name << endl;
}
cout << "--------------------------" << endl;
}
void AddItem(Item* item)
{
inventory.push_back(item);
}
};
void main()
{
Player player;
player.AddItem(new Item("반지"));
player.AddItem(new Item("목검"));
player.AddItem(new Item("물약"));
player.AddItem(new Item("빨간물약"));
player.PrintInventory();
}
2. 인벤토리 기능추가(아이템 추가, 사용, 버리기)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Inventory
{
vector<Inventory*> inventory;
string name;
int id;
int itemCount = 0;
Inventory() {}
Inventory(string _name, int _id, int _itemCount)
{
name = _name;
id = _id;
itemCount = _itemCount;
}
void AddItem(string _name, int _id, int _itemCount)
{
inventory.push_back(new Inventory(_name, _id, _itemCount));
}
void UsedItem(int _id)
{
for (int i = 0; i < inventory.size(); i++)
{
if (inventory[i]->itemCount == 1)
{
cout << inventory[i]->name << "을 사용합니다." << endl;
inventory.erase(inventory.begin() + i);
return;
}
else if (inventory[i]->itemCount > 1)
{
cout << inventory[i]->name << "을 사용합니다." << endl;
inventory[i]->itemCount--;
return;
}
}
}
void ThrowItem(int _id)
{
for (int i = 0; i < inventory.size(); i++)
{
if (inventory[i]->id == _id)
{
cout << inventory[i]->name << "을 버립니다.\n" << endl;
inventory.erase(inventory.begin() + i);
}
}
}
void PrintInventory()
{
cout << "-------인벤토리 정보 출력--------" << endl;
for (int i = 0; i < inventory.size(); i++)
{
cout << i + 1 << "번 째 아이템 : " << inventory[i]->name << endl;
}
cout << "---------------------------------" << endl;
}
};
/*
struct Player
{
vector<Inventory*> playerInventory;
Inventory* inventory;
void PrintInventory()
{
cout << "-------인벤토리 정보 출력--------" << endl;
for (int i = 0; i < playerInventory.size(); i++)
{
cout << i + 1 << "번 째 아이템 : " << playerInventory[i]->name << endl;
}
cout << "---------------------------------" << endl;
}
void AddItem(string _name, int _id, int itemCount)
{
playerInventory.push_back(inventory->AddItem(_name, _id, _itemCount));
}
};
*/
void main()
{
/*
Player player;
player.AddItem(new Item("반지"));
player.AddItem(new Item("목검"));
player.AddItem(new Item("물약"));
player.AddItem(new Item("빨간물약"));
player.PrintInventory();
*/
Inventory inventory;
inventory.AddItem("반지", 1, 1);
inventory.AddItem("목검", 2, 1);
inventory.AddItem("물약", 3, 1);
inventory.AddItem("빨간물약", 4, 1);
inventory.PrintInventory();
inventory.UsedItem(3);
inventory.ThrowItem(2);
inventory.PrintInventory();
}
728x90
'코딩 1막 <C++개념편> > 코딩 1막 <C++응용편>' 카테고리의 다른 글
[C++] 움직이는 자동차 시뮬레이션 (구조체, 벡터, 가상함수) (0) | 2022.06.15 |
---|---|
[C++] 운송수단을 객체로 구조체를 짜서 상속 및 벡터와 가상함수, 동적할당 쓰기 (0) | 2022.06.15 |
[C++] 벡터를 사용해서 출석부만들기 (0) | 2022.06.14 |
[C++] 벡터의 기능을 이용해보자 (0) | 2022.06.14 |
[C++] 랜덤한 확률이 조정된 강화를 하는 아이템 생성하기 (0) | 2022.06.14 |