5/6 (개인프로젝트,과제2도전step8)

2026. 5. 6. 17:35·본캠프

주말과 남은시간을 모두 사용해서 게임개발을 하였습니다

https://youtu.be/_Tymr6o0sO8

 

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

이번 단계에서는 전투 중 플레이어가 공격 또는 아이템 사용을 선택할 수 있도록 시스템을 확장했다.

플레이어 턴에 메뉴를 출력하고:

  1. 공격
  2. 아이템 사용

중 하나를 선택하게 만들었다.
아이템 사용을 고르면 인벤토리를 보여주고, 선택한 포션에 따라 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)를 구현해:

  1. 새 배열 생성
  2. 기존 데이터 복사
  3. 기존 배열 해제
  4. 새 배열 연결

순서로 처리했다.

그리고 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
'본캠프' 카테고리의 다른 글
  • 5/7 (코드카타)
  • 텍스트던전rpg 분석
  • 4/30(코드카타)
  • 던전탈출rpg과제 총정리+학습
백구
백구
게임개발 공부블로그 입니다.
  • 백구
    백구 게임개발 스터디
    백구
  • 전체
    오늘
    어제
    • 분류 전체보기 (20) N
      • 사전캠프 (5)
      • 본캠프 (15) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
백구
5/6 (개인프로젝트,과제2도전step8)
상단으로

티스토리툴바