C ++/C++ 게임

221215 상점 게임 만들기

무면허 개발자 2022. 12. 16. 00:29
  1. 템플릿을 이용한 더블링크리스트 만들기
  2. 완성된 더블링크드 리스트를 이용하여 상점과 인벤토리 구현
  3. 상점 데이터 테이블에 아이템 정보 작성해서 로그하기, 로드한 정보를 상점에서 판매

구현 :

플레이어는 100골드를 가지고 시작하여 상점에 가서 무작위 아이템을 살수 있음

메뉴에서 하루를 보내면 상점의 아이템들이 하루단위로 무작위로 가격이 변함

플레이어는 산아이템으로 아이템을 더 비싸게 팔아 이득을 보도록 구현

 

코드는 다 되었으나 컴파일하면 링커 에러로 구동되지 않아서 오타 및 정의되지 않은 변수나 함수 사용한지 확인해보는중

221215 상점게임.zip
0.84MB

↓ 인벤토리 내부 구현 함수

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;
	}
}