2026. 3. 4. 22:05ㆍTIL
C++로 게임 내에 있는 상태창을 간단히 구현해보겠다.
필수 구현 기능
캐릭터 스탯 상자 만들기
- [ ] int형 배열을 사용하여 HP, MP, 공격력, 방어력을 int형 배열로 선언하고, 0으로 초기화 합니다.
- 예시) 배열 이름이 status라면 status[0]은 HP, status[1]은 MP, status[3]은 방어력
깐깐한 입력 검사
- [ ] 입력 순서 : HP/MP 입력 후 → 공격력/방어력 입력
- [ ] HP와 MP : 하나라도 50 이하를 입력하면 안됩니다.
- [ ] 이 경우 다시 입력하라는 안내를 출력합니다.
- [ ] 다시 입력받을 수 있게 합니다.
- [ ] 공격력과 방어력 : 하나라도 0 이하를 입력하면 안됩니다.
- [ ] 이 경우 다시 입력하라는 안내를 출력합니다.
- [ ] 다시 입력받을 수 있게 합니다
스탯 관리 시스템 1 : 메뉴판 무한 루프
- [ ] 0번(종료)을 누르기 전까지는 아래 선택지가 계속 나와야 합니다.
- 1.HP UP / 2.MP UP / 3.공격력 UP / 4.방어력 UP / 5.현재 능력치 / 6.Level Up / 0.나가기
- 순서 : 선택지를 출력 → 유저로부터 int형 정수(번호) 하나를 입력 받기 → 선택지를 실행
스탯 관리 시스템 2 : 포션 시스템
- [ ] setPotion 함수를 만듭니다.
- [ ] HP/MP 포션을 각각 5개씩 기본 지급합니다. (포션 개수로 5 저장)
- [ ] 함수는 아래와 같이 정의합니다.
void setPotion(int count, int* p_HPPotion, int* p_MPPotion) - [ ] 각 선택지에 따라 다음과 같은 기능이 실행됩니다.
- [ ] 1번 : 포션을 써서 MP를 20 올리고, 포션 개수를 1개 줄입니다.
- [ ] 2번 : 포션을 써서 HP를 20 올리고, 포션 개수를 1개 줄입니다.
- 주의! 포션이 0개면 사용할 수 없습니다.
- [ ] 3번 : 공격력을 2배로 만듭니다.
- [ ] 4번 : 방어력을 2배로 만듭니다.
- 2배로 만드는 연산에는 두 가지 방법이 있어요. 잘 생각해보시고 사용해보세요!
- [ ] 5번 : 현재 HP, MP, 공격력, 방어력을 출력해줍니다
- [ ] 6번 : 레벨 업! 포션을 1개씩 다시 더해줍니다.
- [ ] 0번 : 프로그램을 종료합니다.
먼저 완성한 코드다.




조건 1
먼저 첫번째 캐릭터 스탯 상자를 만들기 위해
int형 배열 Status를 크기가 4인 배열로 만들었다
조건 2

입력 순서인 HP,MP > 공격/방어력을 순서대로 입력받는다.
HP와 MP를 50이하로 입력받지 않았는지
if (status[0] <= 50 || status[1] <= 50)
{
cout << "다시 입력하세요." << endl;
}
if문을 통해 작성했다. 공격력/방어력 부분도 같다.
조건 3

스탯 관리 시스템이다.
0을 누르기 전까지 >> while문이 바로 떠올라 while문을 인용했다.
if (choose == 0)
{
cout << "프로그램 종료" << endl;
break;
}
while문에 if문을 섞어 0을 입력받으면 탈출하도록 했다.
숫자의 입력을 받는 부분은 Case로 변수 choose에 입력받는 변수에 따라 다른 선택지를 진행할 수 있도록 한다.
switch (choose)
{
case 1:
if (HPPotion < 1)
{
cout << "주의! 포션이 0개면 사용할 수 없습니다." << endl;
continue;
}
--HPPotion;
++status[0];
break;
case 2:
if (MPPotion < 1)
{
cout << "주의! 포션이 0개면 사용할 수 없습니다." << endl;
continue;
}
--MPPotion;
++status[1];
break;
조건 4
스탯 관리 시스템 2 : 포션 시스템
- [ ] setPotion 함수를 만듭니다.
- [ ] HP/MP 포션을 각각 5개씩 기본 지급합니다. (포션 개수로 5 저장)
- [ ] 함수는 아래와 같이 정의합니다.
void setPotion(int count, int* p_HPPotion, int* p_MPPotion) - [ ] 각 선택지에 따라 다음과 같은 기능이 실행됩니다.
- [ ] 1번 : 포션을 써서 MP를 20 올리고, 포션 개수를 1개 줄입니다.
- [ ] 2번 : 포션을 써서 HP를 20 올리고, 포션 개수를 1개 줄입니다.
- 주의! 포션이 0개면 사용할 수 없습니다.
- [ ] 3번 : 공격력을 2배로 만듭니다.
- [ ] 4번 : 방어력을 2배로 만듭니다.
- 2배로 만드는 연산에는 두 가지 방법이 있어요. 잘 생각해보시고 사용해보세요!
- [ ] 5번 : 현재 HP, MP, 공격력, 방어력을 출력해줍니다
- [ ] 6번 : 레벨 업! 포션을 1개씩 다시 더해줍니다.
- [ ] 0번 : 프로그램을 종료합니다.
먼저 setPotion은 조건에 맞게 사용할 수 있도록 main함수에서 변수를 선언해 그 변수의 주소를 함수에 대입한다.
함수를 선언할 때 count에 5를 입력하면 기본 5개 지급 부분도 완료이다.
void setPotion(int count, int* p_HPPotion, int* p_MPPotion)
{
*p_HPPotion = count;
*p_MPPotion = count;
}
.
.
.
setPotion(5, &HPPotion, &MPPotion);
아래 조건은 case문에 각 위치에 맞게 코드를 작성해주면 끝이다.
이제 실행해보면

HP와 MP가 50 이하일 때는 다시 입력하라는 문구가 나왔고, 전부 조건에 맞게 입력하면 아래 문구도 나오게 된다.

1, 2, 3, 4, 5를 순서대로 입력하니 HP와 MP는 +1씩 증가하도록 작성한 로직이 그대로 입력됐고,
공격력과 방어력은 두배로 증가하도록 작성한 로직이 들어갔다.
공격력 방어력 부분에서 처음에
case 3:
status[2] *2;
break;
이렇게 작성했는데, 저장하는 변수가 없어 제대로 출력되지 않는 실수를 했었다.
변수는 꼭 추가해서 값을 저장할 수 있도록 해줘야한다.
작성하면서 오류를 발견했는데,
Att = status[2] * 2;
이렇게 하면 기본 status의 값이 계속 두배가 되기 때문에 몇 번을 하든 지금은 60이 나올 것이다.
int Att = status[2];
int Def = status[3];
처음에 변수 선언을 공격력 방어력값을 넣어뒀기 때문에
case 3:
Att *= 2;
break;
이렇게 작성하면 정상적으로 출력될 것이다.
이렇게 하면 필수적인 구현은 전부 끝이 났다. 내일은 코드의 가시성과 출력값의 가시성을 조금 다듬고 다른 부분을 작성해보며 게임 로직의 기초를 익혀보려 한다.
'TIL' 카테고리의 다른 글
| C++ < Class 개념 > (0) | 2026.03.05 |
|---|---|
| 프로그래머스 C문제 풀이 (입문) (0) | 2026.03.05 |
| C언어 챕터1 : 환경 설정 < 1-7 : 리터럴, 1-8 : 자료형 > (0) | 2026.02.24 |
| C언어 챕터1 : 환경 설정 < 1-5 : main() 함수와 printf() 함수, 1-6 : 서식지정자 > (0) | 2026.02.24 |
| C언어 챕터1 : 환경 설정 < 1-3 Compiler, 1-4 프로젝트와 소스코드 생성 > (0) | 2026.02.24 |