C ++/C++ 게임
221215 상점 게임 만들기
무면허 개발자
2022. 12. 16. 00:29
- 템플릿을 이용한 더블링크리스트 만들기
- 완성된 더블링크드 리스트를 이용하여 상점과 인벤토리 구현
- 상점 데이터 테이블에 아이템 정보 작성해서 로그하기, 로드한 정보를 상점에서 판매
구현 :
플레이어는 100골드를 가지고 시작하여 상점에 가서 무작위 아이템을 살수 있음
메뉴에서 하루를 보내면 상점의 아이템들이 하루단위로 무작위로 가격이 변함
플레이어는 산아이템으로 아이템을 더 비싸게 팔아 이득을 보도록 구현
코드는 다 되었으나 컴파일하면 링커 에러로 구동되지 않아서 오타 및 정의되지 않은 변수나 함수 사용한지 확인해보는중
↓ 인벤토리 내부 구현 함수
template<typename T>
inline Inventory<T>::Inventory()
{
gold = 100;
}
template<typename T>
inline Inventory<T>::~Inventory()
{
}
template<typename T>
inline void Inventory<T>::AddItem(T itemname, int quantity, int curprice, int boughtprice)
{
Item<T>* newItem = new Item<T>(itemname, quantity, boughtprice);
if (head == nullptr) // 첫 insert
{
head = newItem;
}
else
{
tail->next = newItem;
newItem->prev = tail;
}
tail = newItem;
invensize++;
}
template<typename T>
inline void Inventory<T>::Buy(T itemname, int quantity, int boutghtprice)
{
Item<T>* newItem = new Item<T>(itemname, quantity, boutghtprice);
if (head == nullptr) // 첫 insert
{
head = newItem;
}
else
{
tail->next = newItem;
newItem->prev = tail;
}
tail = newItem;
if (gold < quantity * boutghtprice)
{
cout << "골드가 부족합니다." << endl;
Sleep(1000);
return;
}
gold -= quantity * boutghtprice;
invensize++;
}
template<typename T>
inline void Inventory<T>::Sell(T itemname, int quantity, int sellprice)
{
Item<T>* selectitem = head;
int count = 0;
for (int i = 0; i < invensize; i++)
{
if (itemname == selectitem->itemname)
{
break;
}
if (i == invensize - 1)
{
cout << "판매하려는 아이템이 없습니다." << endl;
Sleep(1000);
return;
}
selectitem = selectitem->next;
}
selectitem->quantity -= quantity;
gold += quantity * (sellprice - selectitem->boughtprice);
}
template<typename T>
inline Item<T>* Inventory<T>::Find(int index)
{
Item<T>* selectitem = head;
for (int i = 0; i < index - 1; i++)
{
selectitem = selectitem->next;
}
return selectitem;
}
template<typename T>
inline void Inventory<T>::PrintInven()
{
if (head == nullptr)
{
cout << "인벤토리가 비어있습니다." << endl;
Sleep(1000);
return;
}
cout << "현재 골드 : " << gold << "G" << endl;
int count = 0;
for (Item<T>* item = head; item != nullptr; item = item->next)
{
cout << ++count << "번째 아이템 : " << item->itemname << endl;
cout << "수량 : " << item->quantity << " 구매했던 가격 : " << item->boughtprice << endl;
}
}