C++

C++[텍스트 RPG에서 상점 만들기(2. 구매, 판매)]

jeongchanhyo 2025. 1. 13. 21:12

아이템 구매

  1. 상점에서 구매가능한 아이템을 보여주고 선택지를 준다.
  2. 입력받는다.
  3. 선택한 번호 확인
  4. 아이템 살 돈이있는지 확인한다.
  5. 아이템 가져갈 무게가 있는지 확인한다.
  6. 통과되면 골드를 뺀고 아이템을 유저 인벤토리에 추가시켜준다.

1.상점에서 구매가능한 아이템을 보여주고 선택지를 준다.

 cout << "구매 가능한 아이템 : " << endl;
 for (size_t i = 0; i < items_for_sale.size(); i++)
 {
     cout << i + 1 << "." << items_for_sale[i].GetName()
         << ": 가격 " << items_for_sale[i].GetPrice()
         << ", 무게 " << items_for_sale[i].GetWeight() << endl;
 }

 cout << "4.뒤로가기" << endl;
 cout << "구매할 아이템을 선택하세요 : " << endl;
 int choice;
 cin >> choice;

우선 for문을 보겠다.

size_t 이거는 unsigned int와 같은 음수가 되지않는 타입이다. 배열의 경우 0보다 낮은곳을 가리키게되면 쓰레기값이 나가거나 치명적 오류가 생길 수 있기 때문에 안정성을 위해 넣어줬다. 그 후 4. 뒤로가기로 해줬다. 확장성을 위해서라면 items_for_sale.size() + 1 로 해도 되지만 나는 뒤로가기 번호가 자꾸 바뀌면 불편할거같아서 4로 고정했다.

 

2. 입력받는다

int choice;
cin >> choice;

 

이건... 이제 넘어가겠습니다

 

3.선택한 번호 확인

 if (choice == 4) return;

 Item selected_item = items_for_sale[choice - 1];

4는 바로 리턴 안녕히계세요..

입력받은 아이템은 시작이 0이지만 유저에게는 입력 숫자를 1부터 해달라고 했기 때문에 -1을 해줍니다.

 

4.아이템 살 돈이있는지 확인한다

if (character.GetGold() < selected_item.GetPrice()) 
{
    cout << "골드가 부족합니다. 보유 골드 : " << character.GetGold() << endl;
    return;
}

 

5.아이템 가져갈 무게가 있는지 확인한다.

if (character.inventoryweight + selected_item.GetWeight() > character.maxinventoryweight)
{
    cout << "인벤토리 최대치를 초과합니다. 현재 무게 : "
        << character.inventoryweight << " "
        << selected_item.GetName() << " 무게 : "
        << selected_item.GetWeight() << endl;
    return;
}

 

6.통과되면 골드를 뺀고 아이템을 유저 인벤토리에 추가시켜준다.

 character.SetGold = character.GetGold - selected_item.GetPrice();
 character.add_to_inventory(selected_item);
 items_for_sale.erase(items_for_sale.begin() + (choice - 1));
 cout << "구매 성공! 남은 골드 : " << character.GetGold() << endl;

 

아이템 판매

  1. 보유중인 아이템을 체크한다.
  2. 보유중인 아이템의 이름과 가격을 띄운다.
  3. 아이템을 삭제하고 돈을 준다