RPG 캐릭터
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 58번째.
챌린지
쉬움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!을 출력합니다. 두 캐릭터 모두 메모리를 해제하는 것도 잊지 마세요.
프로그램은 다음 네 가지 입력을 받습니다.
- 영웅의 시작 체력
- 영웅의 공격당 공격력
- 적의 시작 체력
- 적의 공격당 공격력
입력이 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 컴파일러