#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;
            if (*ptrMonster < 0){
                *ptrMonster = 0;
            }
            printf("몬스터를 공격했습니다!");
            printf("몬스터 남은 체력 : %d\n", *ptrMonster);






            // 승리 조건 확인

            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;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: