Menu
CoddyTech

RPG 캐릭터

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 58번째.

challenge icon

챌린지

쉬움

RPG 캐릭터 전투 시스템을 만들어 봅시다. 구조체, 메서드, 생성자, 객체 간 상호작용을 깔끔하고 모듈화된 설계로 한데 모은 전형적인 예제입니다.

코드를 세 개의 파일로 구성합니다.

  • character.h: 정수 필드 두 개(health와 damage)를 가진 Character 구조체를 정의합니다. 캐릭터 생성, 공격 수행, 캐릭터 생존 여부 확인, 캐릭터 상태 출력 함수의 프로토타입을 선언합니다.
  • character.c: 캐릭터 시스템을 구현합니다.
    • create_character: 초기 체력과 공격력 값을 받아 힙에 Character를 할당하고, 필드를 초기화한 다음 포인터를 반환합니다.
    • attack: Character 포인터 두 개(공격자와 대상)를 받아 공격자의 공격력만큼 대상의 체력을 감소시킵니다.
    • is_alive: const Character 포인터를 받아 체력이 0보다 크면 1을 반환하고, 그렇지 않으면 0을 반환합니다.
    • print_status: const Character 포인터를 받아 Health: X 형식으로 캐릭터의 체력을 출력합니다.
    • free_character: 할당된 메모리를 해제합니다.
  • main.c: 전투 시뮬레이션을 만듭니다! 영웅의 체력, 영웅의 공격력, 적의 체력, 적의 공격력을 나타내는 정수 네 개를 읽습니다. 생성자를 사용해 두 캐릭터를 만듭니다. 그런 다음 전투 라운드를 시뮬레이션합니다. 매 라운드마다 영웅이 먼저 공격하고, 이어서 적이 반격합니다. 영웅의 공격으로 적의 체력이 0 이하가 되면 적은 쓰러지며 해당 라운드에 반격하지 않습니다. 한 캐릭터가 쓰러질 때까지 계속합니다. 매 라운드가 끝나면 두 캐릭터의 상태를 출력합니다(먼저 영웅, 다음으로 적). 전투가 끝나면 살아남은 캐릭터에 따라 Hero wins! 또는 Enemy wins!을 출력합니다. 두 캐릭터 모두 메모리를 해제하는 것도 잊지 마세요.

프로그램은 다음 네 가지 입력을 받습니다.

  1. 영웅의 시작 체력
  2. 영웅의 공격당 공격력
  3. 적의 시작 체력
  4. 적의 공격당 공격력

입력이 50, 20, 30, 15일 때의 출력 예시:

Health: 35
Health: 10
Health: 35
Health: -10
Hero wins!

입력이 20, 5, 100, 25일 때의 출력 예시:

Health: -5
Health: 95
Enemy wins!

헤더 파일에서 인클루드 가드를 사용하는 것을 잊지 마세요. attack 함수는 한 객체가 다른 객체의 내부 상태를 변경하는 방법을 보여 줍니다. 이는 객체 지향 설계의 핵심 개념입니다. 데이터를 읽기만 하는 함수에는 적절하게 const 포인터를 사용하세요.

직접 해보기

#include <stdio.h>
#include "character.h"

int main() {
    // 입력값 읽기
    int hero_health, hero_damage, enemy_health, enemy_damage;
    scanf("%d", &hero_health);
    scanf("%d", &hero_damage);
    scanf("%d", &enemy_health);
    scanf("%d", &enemy_damage);
    
    // TODO: create_character를 사용해 영웅과 적 캐릭터 생성
    
    // TODO: 전투 라운드 시뮬레이션
    // - 영웅이 먼저 공격
    // - 적이 아직 살아 있다면 공격
    // - 매 라운드 후 두 캐릭터의 상태 출력(영웅 먼저, 그다음 적)
    // - 한 캐릭터가 쓰러질 때까지 계속 진행
    
    // TODO: 승자 출력("Hero wins!" 또는 "Enemy wins!")
    
    // TODO: 두 캐릭터의 메모리 해제
    
    return 0;
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러