
int main(void)
{
int status[5] = { 0, 0, 0, 0, 1 };
status 배열의 마지막 배열이 0이 아니라 1로 초기화 한 이유는 레벨은 0부터 시작하는 것이 아닌 1부터 시작하기 때문에 1로 초기화 했다.

//입력검사
while (status[0] <= 50)
{
cout << "다시 입력해주세요." << endl << "HP 입력 : ";
cin >> status[0];
}
cout << "MP 입력: ";
cin >> status[1];
while (status[1] <= 50)
{
cout << "다시 입력해주세요." << endl << "MP 입력 : ";
cin >> status[1];
}
cout << "공격력 입력: ";
cin >> status[2];
while (status[2] <= 0)
{
cout << "다시 입력해주세요." << endl << "공격력 입력 : ";
cin >> status[2];
}
cout << "방어력 입력: ";
cin >> status[3];
while (status[3] <= 0)
{
cout << "다시 입력해주세요." << endl << "방어력 입력 : ";
cin >> status[3];
}
들어온 값이 HP와 MP는 50 이하, 공격력과 방어력은 0 이하 일시 While문을 통해 다시 입력하라는 문구를 띄우게 만들었다.

//메뉴판 무한 루프
do
{
cout << endl;
cout << endl;
cout << "--------------------------------------------------------------------------------------" << endl;
cout << "1.HP UP / 2.MP UP / 3.공격력 UP / 4.방어력 UP / 5.현재 능력치 / 6.Level Up / 0.나가기" << endl;
cout << "숫자를 선택해주십시오 : ";
cin >> choice;
switch (choice)
{
case 1:
if (hpPotion > 0)
{
status[0] += 10;
hpPotion--;
cout << endl;
cout << " HP UP! " << endl;
cout << endl;
cout << "현재 HP: " << status[0] << endl;
cout << "남은 HP 포션개수: " << hpPotion << endl;
break;
}
else
{
cout << endl;
cout << "HP포션이 부족합니다." << endl;
break;
}
case 2:
if (mpPotion > 0)
{
status[1] += 10;
mpPotion--;
cout << endl;
cout << " MP UP! " << endl;
cout << endl;
cout << "현재 MP: " << status[1] << endl;
cout << "남은 MP 포션개수: " << mpPotion << endl;
break;
}
else
{
cout << endl;
cout << "MP포션이 부족합니다." << endl;
break;
}
case 3:
status[2] = status[2]*2;
cout << endl;
cout << " 공격력 UP! " << endl;
cout << endl;
cout << "현재 공격력: " << status[2] << endl;
break;
case 4:
status[3] = status[3]*2;
cout << endl;
cout << " 방어력 UP! " << endl;
cout << endl;
cout << "현재 방어력: " << status[3] << endl;
break;
case 5:
cout << endl;
cout << "현재 HP: " << status[0] << endl;
cout << "현재 MP: " << status[1] << endl;
cout << "현재 공격력: " << status[2] << endl;
cout << "현재 방어력: " << status[3] << endl;
cout << endl;
cout << "현재 포션 개수" << endl;
cout << "HP 포션: " << hpPotion << endl;
cout << "MP 포션: " << mpPotion << endl;
break;
case 6:
status[4] += 1;
hpPotion++;
mpPotion++;
cout << endl;
cout << " LEVEL UP! " << endl;
cout << endl;
cout << "현재 레벨: " << status[4] << endl;
cout << endl;
cout << "현재 포션 개수" << endl;
cout << "HP 포션: " << hpPotion << endl;
cout << "MP 포션: " << mpPotion << endl;
break;
case 0:
{
break;
}
default:
cout << endl;
cout << "잘못 입력하셨습니다. 다시 선택해주세요." << endl;
break;
}
}
while (choice != 0);
{
cout << "종료되었습니다." << endl;
}
return 0;
}
do-while 문으로 choice로 받은 입력 값이 0이 아닐시 루프를 돌게 하였고 안에 Case문을 써서 다양한 상호작용이 가능하게 하였다.
Case문을 쓰다보니 0을 적었을때도 디폴트 값이 출력이 되어 0도 Case를 지정하여 따로 빼주었다.
여러가지 방법이 있겠지만 내 실력으로는 이게 최선이였다.

void setPotion(int count, int* p_HPPotion, int* p_MPPotion)
{
*p_HPPotion = count;
*p_MPPotion = count;
}
setPotion 이라는 함수를 만들어 정수형 포인터 p_HPPotion, p_MPPotion 이 가르키는 주소에 count를 대입해주고
//포션 지급 함수
setPotion(5, &hpPotion, &mpPotion);
count에 5를 추가하고 정수형 변수 hpPotion, mpPotion을 만들어 둘의 주소값을 정수형 포인터 p_HPPotion, p_MPPotion에 넣으면
결론은
*p_HPPotion = 5;
*p_MPPotion = 5;
요런 말이 된다.
포인터를 쓴 이유는 포인터를 안쓰면 함수가 끝날시 원래 hpPotion, mpPotion값이 그대로가 되기 때문에
포인터를 써서 직접 사본대신 원본을 바꾸었다고 보면된다.
전체 코드
#include<iostream>
using namespace std;
void setPotion(int count, int* p_HPPotion, int* p_MPPotion);
void setMoney(int MoneyCount, int* Money);
int main(void)
{
int status[5] = { 0, 0, 0, 0, 1 };
int choice = 0;
int hpPotion;
int mpPotion;
int Gold;
// 캐릭터 스탯 상자 만들기
cout << "HP 입력: ";
cin >> status[0];
//입력검사
while (status[0] <= 50)
{
cout << "다시 입력해주세요." << endl << "HP 입력 : ";
cin >> status[0];
}
cout << "MP 입력: ";
cin >> status[1];
while (status[1] <= 50)
{
cout << "다시 입력해주세요." << endl << "MP 입력 : ";
cin >> status[1];
}
cout << "공격력 입력: ";
cin >> status[2];
while (status[2] <= 0)
{
cout << "다시 입력해주세요." << endl << "공격력 입력 : ";
cin >> status[2];
}
cout << "방어력 입력: ";
cin >> status[3];
while (status[3] <= 0)
{
cout << "다시 입력해주세요." << endl << "방어력 입력 : ";
cin >> status[3];
}
setPotion(5, &hpPotion, &mpPotion);
setMoney(200, &Gold);
cout << "* 포션이 지급되었습니다. (HP, MP 포션 각 5개)" << endl;
cout << "* 기본금이 지급되었습니다. 현재 골드: " << Gold << endl;
//메뉴판 무한 루프
do
{
cout << endl;
cout << endl;
cout << "--------------------------------------------------------------------------------------" << endl;
cout << "1.HP UP / 2.MP UP / 3.공격력 UP / 4.방어력 UP / 5.현재 능력치 / 6.Level Up / 7. 포션 충전 / 8. 일 하기 / 0.나가기" << endl;
cout << "숫자를 선택해주십시오 : ";
cin >> choice;
switch (choice)
{
case 1:
if (hpPotion > 0)
{
status[0] += 10;
hpPotion--;
cout << endl;
cout << " HP UP! " << endl;
cout << endl;
cout << "현재 HP: " << status[0] << endl;
cout << "남은 HP 포션개수: " << hpPotion << endl;
break;
}
else
{
cout << endl;
cout << "HP포션이 부족합니다." << endl;
break;
}
case 2:
if (mpPotion > 0)
{
status[1] += 10;
mpPotion--;
cout << endl;
cout << " MP UP! " << endl;
cout << endl;
cout << "현재 MP: " << status[1] << endl;
cout << "남은 MP 포션개수: " << mpPotion << endl;
break;
}
else
{
cout << endl;
cout << "MP포션이 부족합니다." << endl;
break;
}
case 3:
status[2] = status[2]*2;
cout << endl;
cout << " 공격력 UP! " << endl;
cout << endl;
cout << "현재 공격력: " << status[2] << endl;
break;
case 4:
status[3] = status[3]*2;
cout << endl;
cout << " 방어력 UP! " << endl;
cout << endl;
cout << "현재 방어력: " << status[3] << endl;
break;
case 5:
cout << endl;
cout << "현재 레벨: " << status[4] << endl;
cout << "현재 HP: " << status[0] << endl;
cout << "현재 MP: " << status[1] << endl;
cout << "현재 공격력: " << status[2] << endl;
cout << "현재 방어력: " << status[3] << endl;
cout << endl;
cout << "현재 골드: " << Gold << endl;
cout << endl;
cout << "현재 포션 개수" << endl;
cout << "HP 포션: " << hpPotion << endl;
cout << "MP 포션: " << mpPotion << endl;
break;
case 6:
status[4] += 1;
hpPotion++;
mpPotion++;
cout << endl;
cout << " LEVEL UP! " << endl;
cout << endl;
cout << "현재 레벨: " << status[4] << endl;
cout << endl;
cout << "현재 포션 개수" << endl;
cout << "HP 포션: " << hpPotion << endl;
cout << "MP 포션: " << mpPotion << endl;
break;
case 7:
if (Gold >= 300)
{
hpPotion++;
mpPotion++;
Gold = Gold - 300;
cout << endl;
cout << "포션이 충전되었습니다!" << endl;
cout << "현재 포션 개수" << endl;
cout << "HP 포션: " << hpPotion << endl;
cout << "MP 포션: " << mpPotion << endl;
cout << endl;
cout << "현재 골드: " << Gold << endl;
break;
}
else
{
cout << "골드가 부족합니다." << endl;
cout << endl;
cout << "현재 골드: " << Gold << endl;
break;
}
break;
case 8:
Gold = Gold + 100;
cout << endl;
cout << "현재 골드: " << Gold << endl;
cout << endl;
break;
case 0:
{
break;
}
default:
cout << endl;
cout << "잘못 입력하셨습니다. 다시 선택해주세요." << endl;
break;
}
}
while (choice != 0);
{
cout << "종료되었습니다." << endl;
}
return 0;
}
void setPotion(int count, int* p_HPPotion, int* p_MPPotion)
{
*p_HPPotion = count;
*p_MPPotion = count;
}
//포션을 그냥 공짜로 사면 안되기 때문에
// 돈 시스템을 추가하여 일하여 번돈으로 포션을 사게 했습니다.
void setMoney(int MoneyCount, int* money)
{
*money = MoneyCount;
}
'C++' 카테고리의 다른 글
| 기본 생성자와 오버로딩 (0) | 2026.03.12 |
|---|---|
| 생성자와 소멸자 (0) | 2026.03.12 |
| C++로 전직 시스템과 전투 시스템 구현해보기 (0) | 2026.03.10 |
| Class (0) | 2026.03.09 |
| 포인터 (0) | 2026.03.05 |