전에 비해 얼마나 코딩실력이 성장이 됐는지 알아보기 위해 그동안 했던 과제들을 처음부터 새로 작성하여 복습해보려 한다.
필수기능
1. HP, MP, 공격력, 방어력을 크기 4의 int형 배열로 선언 및 0으로 초기화합니다.
(배열 이름이 status라면 status[0]은 체력, status[3]은 방어력)
2. HP와 MP를 입력받고, HP나 MP가 하나라도 50 이하의 숫자를 입력받을 경우 다시 입력받습니다.
3. HP와 MP에 값을 입력받은 후 공격력과 방어력을 입력받습니다. 공격력이나 방어력이 하나라도 0 이하의 숫자를 입력받을 경우 다시 입력 받습니다.
4. call by pointer를 사용해봅시다. HP, MP포션은 5개씩 기본 지급되며, HP, MP 포션 개수로 5를 저장합니다. 함수는 다음과 같이 정의합니다. void setPotion(int count, int* p_HPPotion, int* p_MPPotion)
5. 스탯 관리 시스템을 시작합니다. 1. HP 회복 2. MP 회복 3. HP 강화 4. MP 강화 5. 공격 스킬 사용 6. 필살기 사용 선택지를 출력한 후, int형 정수 하나를 입력받아서 해당 선택지를 실행합니다.
6. 1, 2번을 선택시 각각 HP/MP가 20 증가하고, 포션의 개수가 1개씩 차감됩니다. 포션이 0개일 경우 사용할 수 없습니다.
7. 3, 4번을 선택시 각각 HP/ MP가 2배씩 증가합니다.
8. 5번 선택시 MP가 50 차감됩니다
도전기능
1. 6번은 필살기이기 때문에, 현재 MP의 50% 만큼 소모합니다.
2. 7번을 선택하면 프로그램을 종료합니다.
필수기능 구현
1. HP, MP, 공격력, 방어력을 크기 4의 int형 배열로 선언 및 0으로 초기화합니다.
(배열 이름이 status라면 status[0]은 체력, status[3]은 방어력)
int main()
{
int HP = 0;
int MP = 0;
int AD = 0;
int DF = 0;
int HPPotion = 0;
int MPPotion = 0;
int status[4] = { HP,MP,AD,DF };
2. HP와 MP를 입력받고, HP나 MP가 하나라도 50 이하의 숫자를 입력받을 경우 다시 입력받습니다.
while(HP <= 50 || MP <= 50)
{
cout << "HP 입력: ";
cin >> HP;
cout << "MP 입력: ";
cin >> MP;
if (HP <= 50 || MP <= 50)
{
cout << "HP나 MP의 값이 너무 낮습니다. 다시 입력하세요." << endl;
}
}
3. HP와 MP에 값을 입력받은 후 공격력과 방어력을 입력받습니다. 공격력이나 방어력이 하나라도 0 이하의 숫자를 입력받을 경우 다시 입력 받습니다.
while (AD <= 0 || DF <= 0)
{
cout << "공격력 입력: ";
cin >> AD;
cout << "방어력 입력: ";
cin >> DF;
if (AD <= 0 || DF <= 0)
{
cout << "공격력이나 방어력이 너무 낮습니다. 다시 입력하세요." << endl;
}
}
4. call by pointer를 사용해봅시다. HP, MP포션은 5개씩 기본 지급되며, HP, MP 포션 개수로 5를 저장합니다. 함수는 다음과 같이 정의합니다. void setPotion(int count, int* p_HPPotion, int* p_MPPotion)
system("cls")로 콘솔창에서 위 내용을 지웠다.
system("cls"); // 콘솔창 내용 지우기
setPotion(5, &HPPotion, &MPPotion); // setPotion 함수로 HP포션, MP포션 값에 5 대입
cout << "HP포션 " << HPPotion << "개, MP포션: " << MPPotion << "개 지급되었습니다." << endl;
5. 스탯 관리 시스템을 시작합니다. 1. HP 회복 2. MP 회복 3. HP 강화 4. MP 강화 5. 공격 스킬 사용 6. 필살기 사용 선택지를 출력한 후, int형 정수 하나를 입력받아서 해당 선택지를 실행합니다.
int choice = 0;
cout << endl;
while (choice < 7)
{
cout << "스탯 관리 시스템" << endl;
cout << "===============" << endl;
cout << "HP: " << HP << endl;
cout << "MP: " << MP << endl;
cout << "공격력: " << AD << endl;
cout << "방어력: " << DF << endl;
cout << "남은 HP포션: " << HPPotion << endl;
cout << "남은 MP포션: " << MPPotion << endl;
cout << "1.HP회복 2.MP회복 3.HP강화 4.MP강화 5.공격 스킬 사용 6.필살기 사용 7. 나가기" << endl;
cout << "번호 입력: ";
cin >> choice;
6. 1, 2번을 선택시 각각 HP/MP가 20 증가하고, 포션의 개수가 1개씩 차감됩니다. 포션이 0개일 경우 사용할 수 없습니다.
이번에는 switch ~ case 문을 사용해봤다. 그리고 콘솔창이 너무 길어짐을 방지하기 위해 system(pause, cls)로 관리를 했다.
switch (choice)
{
case 1:
if (HPPotion > 0)
{
HP += 20;
cout << "HP가 20 회복됐습니다. HP포션이 1개 차감됩니다." << endl;
--HPPotion;
}
else
{
cout << "HP포션이 없습니다." << endl;
}
system("pause"); // 사용자의 입력 있을때까지 기다리기
system("cls"); // 콘솔창 지우기
break;
case 2:
if (MPPotion > 0)
{
MP += 20;
cout << "MP가 20 회복됐습니다. MP포션이 1개 차감됩니다." << endl;
--MPPotion;
}
else
{
cout << "MP포션이 없습니다." << endl;
}
system("pause");
system("cls");
break;
7. 3, 4번을 선택시 각각 HP/ MP가 2배씩 증가합니다.
case 3:
HP *= 2;
cout << "HP가 2배 강화 됐습니다." << endl;
system("pause");
system("cls");
break;
case 4:
MP *= 2;
cout << "MP가 2배 강화 됐습니다." << endl;
system("pause");
system("cls");
break;
8. 5번 선택시 MP가 50 차감됩니다
case 5:
if (MP >= 50)
{
MP -= 50;
cout << "공격 스킬을 사용했습니다." << endl;
}
else
{
cout << "MP가 부족하여 스킬 사용이 불가합니다." << endl;
}
system("pause");
system("cls");
break;
도전기능 구현
1. 6번은 필살기이기 때문에, 현재 MP의 50% 만큼 소모합니다.
과제는 현재 MP의 50% 소모하는게 끝이지만 필살기인만큼 MP가 최소 100을 사용하도록 구현해봤다.
case 6:
if (MP / 2 >= 100) // MP를 사용시 100이상 소모하도록 설정함.
{
MP /= 2;
cout << "필살기를 사용하여 MP의 50%가 소모됐습니다." << endl;
}
else
{
cout << "MP가 부족합니다." << endl;
}
system("pause");
system("cls");
break;
2. 7번을 선택하면 프로그램을 종료합니다.
case 7:
cout << "시스템 관리 시스템을 종료합니다.";
return 0;
실행 결과 모두 구현한대로 잘 작동이 됐다.
아직 포인터에 대한 개념이 100% 완벽하게 이해가 되지 않아서 필수기능 4번 setPotion 함수를 구현할 때 조금 막힘이 있었지만 그 외 기능을 구현할 때 막힘 없이 잘 풀려서 성장이 됐음을 느끼고 새로 알게된 system("pause", "cls")를 사용하여 콘솔창도 정리가 되면서 출력이 되니 깔끔해보이고 더 잘만든 게임같은 느낌이 나서 기분이 좋았다.
코드 전체
#include <iostream>
using namespace std;
void setPotion(int count, int* p_HPPotion, int* p_MPPotion)
{
*p_HPPotion = count;
*p_MPPotion = count;
}
int main()
{
int HP = 0;
int MP = 0;
int AD = 0;
int DF = 0;
int HPPotion = 0;
int MPPotion = 0;
int status[4] = { HP,MP,AD,DF };
while(HP <= 50 || MP <= 50)
{
cout << "HP 입력: ";
cin >> HP;
cout << "MP 입력: ";
cin >> MP;
if (HP <= 50 || MP <= 50)
{
cout << "HP나 MP의 값이 너무 낮습니다. 다시 입력하세요." << endl;
}
}
while (AD <= 0 || DF <= 0)
{
cout << "공격력 입력: ";
cin >> AD;
cout << "방어력 입력: ";
cin >> DF;
if (AD <= 0 || DF <= 0)
{
cout << "공격력이나 방어력이 너무 낮습니다. 다시 입력하세요." << endl;
}
}
system("cls"); // 콘솔창 내용 지우기
setPotion(5, &HPPotion, &MPPotion); // setPotion 함수로 HP포션, MP포션 값에 5 대입
cout << "HP포션 " << HPPotion << "개, MP포션: " << MPPotion << "개 지급되었습니다." << endl;
int choice = 0;
cout << endl;
while (choice < 7)
{
cout << "스탯 관리 시스템" << endl;
cout << "===============" << endl;
cout << "HP: " << HP << endl;
cout << "MP: " << MP << endl;
cout << "공격력: " << AD << endl;
cout << "방어력: " << DF << endl;
cout << "남은 HP포션: " << HPPotion << endl;
cout << "남은 MP포션: " << MPPotion << endl;
cout << "1.HP회복 2.MP회복 3.HP강화 4.MP강화 5.공격 스킬 사용 6.필살기 사용 7. 나가기" << endl;
cout << "번호 입력: ";
cin >> choice;
switch (choice)
{
case 1:
if (HPPotion > 0)
{
HP += 20;
cout << "HP가 20 회복됐습니다. HP포션이 1개 차감됩니다." << endl;
--HPPotion;
}
else
{
cout << "HP포션이 없습니다." << endl;
}
system("pause");
system("cls");
break;
case 2:
if (MPPotion > 0)
{
MP += 20;
cout << "MP가 20 회복됐습니다. MP포션이 1개 차감됩니다." << endl;
--MPPotion;
}
else
{
cout << "MP포션이 없습니다." << endl;
}
system("pause");
system("cls");
break;
case 3:
HP *= 2;
cout << "HP가 2배 강화 됐습니다." << endl;
system("pause");
system("cls");
break;
case 4:
MP *= 2;
cout << "MP가 2배 강화 됐습니다." << endl;
system("pause");
system("cls");
break;
case 5:
if (MP >= 50)
{
MP -= 50;
cout << "공격 스킬을 사용했습니다." << endl;
}
else
{
cout << "MP가 부족하여 스킬 사용이 불가합니다." << endl;
}
system("pause");
system("cls");
break;
case 6:
if (MP / 2 >= 100) // MP를 사용시 100이상 소모하도록 설정함.
{
MP /= 2;
cout << "필살기를 사용하여 MP의 50%가 소모됐습니다." << endl;
}
else
{
cout << "MP가 부족합니다." << endl;
}
system("pause");
system("cls");
break;
case 7:
cout << "시스템 관리 시스템을 종료합니다.";
return 0;
}
}
}
'숙제' 카테고리의 다른 글
3번 과제 복습(인벤토리 시스템 구현) (1) | 2025.09.01 |
---|---|
2번 과제 복습(전직 시스템과 전투 시스템) (1) | 2025.08.29 |
5번 과제(UE_LOG로 2차원 움직임 출력하기) (2) | 2025.08.28 |
C++ 4번 과제 도전 기능 (3) | 2025.08.27 |
C++ 4번 과제(연금술 공방 관리 시스템 구현) (1) | 2025.08.26 |