#include <stdio.h>
int main() {
/*
==================================================
RPG 캐릭터 모험
포인터 기초 프로젝트
==================================================
[프로젝트 목표]
포인터를 이용하여 캐릭터의 능력치를 변경하고
몬스터를 쓰러뜨리는 RPG 게임을 완성하세요.
[게임 규칙]
1. 플레이어의 초기 체력은 100입니다.
2. 플레이어의 초기 공격력은 20입니다.
3. 몬스터의 초기 체력은 100입니다.
4. 회복약 사용 : 체력 +20
5. 무기 강화 : 공격력 +10
6. 몬스터 공격 : 공격력만큼 몬스터 체력 감소
7. 상태 확인 : 현재 능력치 출력
8. 몬스터 체력이 0 이하가 되면 승리합니다.
[필수 조건]
- 포인터 3개를 선언합니다.
- 포인터에 각 변수의 주소를 저장합니다.
- 능력치 변경은 반드시 포인터를 사용합니다.
- 함수와 배열은 사용하지 않습니다.
*/
// ==================================================
// 1. 캐릭터 및 몬스터 정보
// ==================================================
int hp = 100;
int attack = 20;
int monsterHp = 100;
int menu;
/*
[작성1] 포인터 선언하기
아래 조건에 맞게 정수형 포인터 3개를 선언하세요.
1. ptrHp는 hp의 주소를 저장합니다.
2. ptrAttack은 attack의 주소를 저장합니다.
3. ptrMonster는 monsterHp의 주소를 저장합니다.
[힌트]
int *포인터이름 = &변수이름;
*/
// [작성1] 코드 작성
int *ptrHp=&hp;
int *ptrAttack=&attack;
int *ptrMonster=&monsterHp;
// ==================================================
// 2. 게임 시작
// ==================================================
printf("===== RPG 캐릭터 모험 =====\n");
printf("몬스터를 쓰러뜨리세요!\n");
while (1) {
printf("\n--------------------------\n");
printf("1. 회복약 사용\n");
printf("2. 무기 강화\n");
printf("3. 몬스터 공격\n");
printf("4. 상태 확인\n");
printf("5. 게임 종료\n");
printf("--------------------------\n");
printf("행동 선택 : ");
if (scanf("%d", &menu) != 1) {
printf("숫자를 입력해주세요.\n");
break;
}
// ==============================================
// 3. 회복약 사용
// ==============================================
if (menu == 1) {
/*
[작성2] 체력 회복하기
ptrHp를 이용하여
플레이어의 체력을 20 증가시키세요.
변경된 체력을 출력하세요.
[실행 결과 예시]
회복약을 사용했습니다!
현재 체력 : 120
[조건]
1. hp에 직접 값을 더하지 않습니다.
2. ptrHp를 역참조하여 값을 변경합니다.
*/
// [작성2] 코드 작성
*ptrHp+=20;
printf("회복약을 사용했습니다!\n");
printf("현재 체력 : %d\n", *ptrHp);
}
// ==============================================
// 4. 무기 강화
// ==============================================
else if (menu == 2) {
/*
[작성3] 공격력 강화하기
ptrAttack을 이용하여
플레이어의 공격력을 10 증가시키세요.
변경된 공격력을 출력하세요.
[실행 결과 예시]
무기를 강화했습니다!
현재 공격력 : 30
[조건]
1. attack에 직접 값을 더하지 않습니다.
2. ptrAttack을 역참조하여 값을 변경합니다.
*/
// [작성3] 코드 작성
*ptrAttack+=10;
printf("무기를 강화했습니다!\n");
printf("현재 공격력 : %d\n", *ptrAttack);
}
// ==============================================
// 5. 몬스터 공격
// ==============================================
else if (menu == 3) {
/*
[작성4] 몬스터 공격하기
ptrMonster를 이용하여
몬스터의 체력을 감소시키세요.
감소하는 체력은
ptrAttack이 가리키는 공격력과 같습니다.
[실행 결과 예시]
몬스터를 공격했습니다!
몬스터 남은 체력 : 80
[조건]
1. monsterHp에 직접 값을 빼지 않습니다.
2. ptrMonster를 역참조하여 값을 변경합니다.
3. 공격력도 ptrAttack을 역참조하여 사용합니다.
4. 몬스터 체력이 0 이하라면
0으로 출력합니다.
*/
// [작성4] 코드 작성
*ptrMonster-=*ptrAttack;
printf("몬스터를 공격했습니다!\n");
if (*ptrMonster>0){
printf("몬스터 남은 체력 : %d\n", *ptrMonster);
}
else{
printf("몬스터 남은 체력 : 0\n");
}
// 승리 조건 확인
if (monsterHp <= 0) {
printf("\n몬스터를 쓰러뜨렸습니다!\n");
printf("게임 승리!\n");
break;
}
}
// ==============================================
// 6. 상태 확인
// ==============================================
else if (menu == 4) {
printf("\n[현재 상태]\n");
printf("플레이어 체력 : %d\n", hp);
printf("플레이어 공격력 : %d\n", attack);
printf("몬스터 체력 : %d\n", monsterHp);
}
// ==============================================
// 7. 게임 종료
// ==============================================
else if (menu == 5) {
printf("게임을 종료합니다.\n");
break;
}
else {
printf("잘못된 메뉴입니다.\n");
}
}
return 0;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: