RPG 캐릭터
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 58번째.
챌린지
쉬움RPG Character 전투 시스템을 만들어 봅시다. 구조체, 메서드, 생성자, 객체 상호 작용을 깔끔하고 모듈화된 설계로 함께 보여 주는 고전적인 예제입니다.
코드를 세 개의 파일로 구성합니다.
character.h: 두 개의 정수 필드인health와damage를 포함하는Character구조체를 Define합니다. Character를 생성하고, 공격을 수행하고, Character가 살아 있는지 확인하고, Character의 상태를 출력하는 함수 프로토타입을 Declare합니다.character.c: Character 시스템을 Implement합니다.create_character: 초기 health 및 damage 값을 받아 heap에 Character를 할당하고, 해당 fields를 초기화한 후 포인터를 반환합니다.attack: 두 개의 Character 포인터(attacker와 target)를 받아 attacker의 damage만큼 target의 health를 줄입니다.is_alive: const Character 포인터를 받아 health가 0보다 크면 1을 반환하고, 그렇지 않으면 0을 반환합니다.print_status: const Character 포인터를 받아 Character의 health를Health: Xformat으로 출력합니다.free_character: 할당된 메모리를 Free합니다.
main.c: 전투 시뮬레이션을 Create합니다! hero의 health, hero의 damage, enemy의 health, enemy의 damage를 나타내는 네 개의 정수를 읽습니다. 생성자를 사용하여 두 Character를 모두 Create합니다. 그런 다음 combat 라운드를 시뮬레이션합니다. 각 라운드에서 hero가 first 공격하고, 그다음 enemy가 반격합니다. 두 공격은 동일한 라운드 안에서 발생하므로, hero의 공격으로 enemy의 health가 이미 0 이하가 되었더라도 enemy의 반격은 여전히 적용됩니다. 한 Character가 falls할 때까지 Continue합니다. 각 라운드 후 두 Character의 상태를 출력합니다(hero first, 그다음 enemy). 전투가 끝나면 누가 살아남았는지에 따라Hero wins!또는Enemy wins!를 출력합니다. 두 Character를 모두 Free하는 것을 잊지 마세요.
프로그램은 네 개의 입력을 받습니다.
- Hero의 시작 health
- 공격당 Hero의 damage
- Enemy의 시작 health
- 공격당 Enemy의 damage
입력이 50, 20, 30, 15일 때의 예시 출력:
Health: 35
Health: 10
Health: 20
Health: -10
Hero wins!입력이 20, 5, 100, 25일 때의 예시 출력:
Health: -5
Health: 95
Enemy wins!header 파일에서 include guard를 사용하는 것을 기억하세요. 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 컴파일러