본문 바로가기
WinAPI

다시 공부 하는 Win API (11) - UI - Inventory 제작(3)

by Srff5123 2025. 12. 24.
728x90

저번 글에서 상점을 통한 구매 기능을 구현해보았으니

판매 기능을 만들어 보겠습니다.

일단 인벤토리에 있는 아이템을 클릭 했을 경우 이펙트를 주기 위해 HPEN추가 및  bool 변수로 클릭됐는지 여부 확인하고

cpp에서 생성,소멸, 렌더해준 뒤

보이드포인터를 받는 Onclick 함수하나를 선언하여 클릭 이벤트를 정의한다.

다음 이벤트관리에서 기존에 키 밸류로 관리하던 해시맵 이벤트를

밸류를 벡터로 관리해서  이벤트를 여러개 저장할 수 있도록 바꾼다.

 

 

이렇게 하고 실행해보면 스토어에서 아이템을 구매하고 인벤토리에서 구매된 아이템을 클릭하면 선택이 되어지는 것을 볼 수 있다.

하지만 아이템을 선택하였을때, 나오는 테두리가 옆에 있는 아이템의 경계선을 넘어가는 것이 확인이 되는데 이부분을 자연스럽게 만들기 위해 아이템간의 거리를 이격시켜준다. 

Panel.h에서 패딩 간격을 벡터로 선언해주고

cpp의 아이템 생성하는 곳으로 이동하여 간격 * coord를 해주고 확인해보면 잘되는것을 확인할 수 있다.

이제이렇게 선택되어진 아이템을 판매 처리해보자

InventoryPlayer로 이동해 선택된 아이템의 정보를 OnclickItem함수를 선언하여 가져오고 

생성자에서 이벤트를 바인드 해준다.

다음 StorePanel에서도 SellItem에서 Remove를 호출해주고

다시 Player로 이동해서 RemoveItem의 내부 코드를 작성해준다.

아이템 선택 예외 처리와 골드 들어오는 부분 그리고 Item배열에서 제거해주고 실행해보면 잘 되는것을 확인할 수 있다.

 

게임을 예로 들었을 때 보통 소모품(물약) 같은 경우는 구매할때 10개 100개 이런식으로 여러개를 사기 떄문에

인벤토리에 한칸씩 차지하게되면 다른것은 구매할 수 없기 때문에 소모품에 한에서는 카운터를 추가해 개수 증가로 표현을 해주도록 한다.

 

InventoryItem.h에 count 변수와 count를 증가시켜주는 AddCount함수를 추가하고

GetCount를 통해 카운트된 변수를 반환해주는 함수를 추가한다.

Render를 통해 아이템 패널에 카운트를 표기해준다.

다음 가지고 있는 아이템의 정보를 받아 카운트값을 증가시켜주기 위해

InventoryPlayer.h에서  해시맵으로 getItems만들어 키와 밸류값으로 관리를 해주고

AddItem 함수에서 인벤토리에 Potion이 있으면 name(마나,체력)이 같은 포션의 개수를 증가시켜준다.  

그리고 가지고 있는 아이템의 Name데이터를 키값으로 받아 해당 값의 value를 ++ 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

다음 RemoveItem도 이름에 따라 -- 를 해주고 선택된 아이템이 다 팔리면 null로 바꿔준다.

이제 실행해서 확인해보면 상점에서 구매해서 인벤토리에 아이템을 채우는것과 구매한 아이템을 판매하는것 까지 완료하였다

 

 

 

다음 글에서는 장비창 만드는것을 간단하게 만들어보겠다

 

 

 

 

728x90