주말과 남은시간을 모두 사용해서 게임개발을 하였습니다
step1
포인터를 이용해 함수 바깥 변수 값을 변경하는 방법을 연습했다
setPotion(int count, int* p_HPPotion, int* p_MPPotion) 함수를 만들어 HP 포션과 MP 포션 개수를 한 번에 설정했다.
- &변수는 주소를 뜻한다.
- *포인터는 해당 주소가 가리키는 실제 값이다.
- 함수 밖 변수 값을 바꾸려면 포인터나 참조를 사용해야 한다.
step2
이번 단계에서는 Player 클래스에 레벨, 경험치, 최대 경험치 개념을 추가했다.
exp, maxExp, level을 관리하도록 만들고, 전투 승리 시 경험치를 획득하도록 구현했다.
경험치가 최대 경험치 이상이 되면 레벨업이 발생하고, 레벨업 시 HP, MP, 공격력이 증가하도록 연결했다.
step3
이번 단계에서는 오버라이딩을 활용해 직업마다 다른 공격 방식을 구현했다.
기존 attack() 함수를 virtual void attack(Monster* monster) = 0; 형태로 바꾸고,
전사 / 마법사 / 궁수 / 도적이 각각 자기 방식대로 공격하도록 재정의했다.
직업별 공격 방식:
- 전사: 공격력 - 방어력, 1회 공격
- 마법사: 공격력 - 방어력, 1회 공격
- 궁수: (공격력 - 방어력) / 3 데미지를 3번 적용
- 도적: (공격력 - 방어력) / 5 데미지를 5번 적용
step4
이번 단계에서는 전투 중 플레이어가 공격 또는 아이템 사용을 선택할 수 있도록 시스템을 확장했다.
플레이어 턴에 메뉴를 출력하고:
- 공격
- 아이템 사용
중 하나를 선택하게 만들었다.
아이템 사용을 고르면 인벤토리를 보여주고, 선택한 포션에 따라 HP 또는 MP를 회복시켰다.
회복량은 50으로 설정했고, min()을 사용해 최대치를 넘지 않게 처리했다.
예시:
- HP 포션 사용 → player->setHP(min(player->getHP() + 50, 100));
- MP 포션 사용 → player->setMP(min(player->getMP() + 50, 100));
step5
이번 단계에서는 vector<Item> 대신 직접 만든 템플릿 인벤토리 클래스를 구현했다.
template<typename T> 형태로 Inventory<T>를 만들고, 내부에:
- T* pItems
- int capacity_
- int size_
를 두었다.
생성자에서 new T[capacity_]로 메모리를 할당하고,
소멸자에서 delete[] pItems를 호출해 메모리를 정리했다.
추가한 주요 함수:
- AddItem
- RemoveLastItem
- RemoveAt
- PrintAllItems
- GetSize
- GetCapacity
- GetItem
또한 복사 생성자를 구현해서 깊은 복사를 적용했다.
step6
이번 단계에서는 인벤토리가 꽉 찼을 때 자동으로 늘어나는 Resize 기능과, 가격순 정렬 기능을 추가했다.
Resize(int newCapacity)를 구현해:
- 새 배열 생성
- 기존 데이터 복사
- 기존 배열 해제
- 새 배열 연결
순서로 처리했다.
그리고 AddItem()에서 공간이 부족하면 자동으로 Resize(capacity_ * 2)를 호출하도록 만들었다.
정렬 기능은 compareByPrice(const Item& a, const Item& b) 비교 함수를 만들고,
SortItems()에서 std::sort(pItems, pItems + size_, compareByPrice)를 사용해 구현했다.
step7
이번 단계에서는 map<string, int>를 이용해 포션 재고 시스템을 구현했다.
포션 이름을 key, 재고 수량을 value로 저장했다.
step8
이번 단계에서는 단순 1회 전투가 아니라, 여러 방을 순서대로 클리어한 뒤 보스방이 열리는 구조를 만들었다.
DungeonRoom 구조체를 만들어 각 방의 정보를 저장했다.
구조체에 포함한 정보:
- 몬스터 이름
- HP
- 공격력
- 방어력
- 드랍 아이템 이름
- 드랍 아이템 가격
- 경험치 보상
이후 vector<DungeonRoom>로 일반 방 3개를 만들고,
for문으로 순서대로 클리어하도록 했다.
'본캠프' 카테고리의 다른 글
| 5/7 (코드카타) (0) | 2026.05.07 |
|---|---|
| 텍스트던전rpg 분석 (0) | 2026.05.06 |
| 4/30(코드카타) (0) | 2026.04.30 |
| 던전탈출rpg과제 총정리+학습 (0) | 2026.04.29 |
| 4/29(코드카타,과제2 step8) (0) | 2026.04.29 |