게임 캐릭터 개발
Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 64번째.
챌린지
중급롤플레잉 게임의 캐릭터를 구현하세요. 추상 클래스 Character, 이를 확장하는 세 클래스, 그리고 캐릭터가 배우는 능력을 만드세요.
character.gd의 Character는 @abstract 클래스입니다.
- 속성:
character_name(생성자에서 설정),level1,max_health와health100.0,max_mana와mana50,strength,intelligence,agility10,defense5, 그리고Array[Ability]인abilities. 체력 값은float이고, 나머지 능력치는int입니다. - 시그널
defeated(character_name: String). - 추상 메서드
class_title() -> String과attack_power() -> float. level_up() -> String: 레벨+1, 최대 체력+10, 최대 마나+5, 힘, 지능, 민첩성, 방어력+1; 체력과 마나는 최댓값까지 회복됩니다.NAME reached level N!을 반환합니다.attack(target):NAME attacks TARGET을 출력한 다음target.take_damage(attack_power())를 반환합니다.take_damage(amount) -> float: 피해량은amount - defense * 0.5이며, 최소1.0입니다. 체력은 그만큼 감소하며0.0아래로 내려가지 않습니다. 소수점 첫째 자리까지 표시하여NAME takes D damage (HP H)를 출력하고, 이 공격으로 체력이0이 되면defeated를 발생시키며, 피해량을 반환합니다.is_alive(): 체력이0보다 큰지 확인합니다.learn_ability(ability)는abilities에 능력을 추가합니다.use_ability(index, target) -> float: 인덱스가abilities의 범위를 벗어나면NAME has no ability INDEX를 출력하고0.0을 반환합니다. 그렇지 않으면 능력의use()가 반환하는 값을 반환합니다._to_string():NAME the TITLE (level L): HP H/MAX, mana M/MAX, STR S, INT I, AGI A, DEF D형식이며, 체력은 소수점 첫째 자리까지 표시합니다.
각 하위 클래스는 부모 생성자를 호출한 다음 자체 시작 능력치를 설정합니다(나머지는 기본값을 유지합니다). class_title()은 클래스 이름을 반환하며, level_up()은 super()를 사용해 재정의합니다.
Warrior: 체력150.0, 마나30, 힘15, 지능5, 방어력8; 공격력은strength * 1.2; 레벨 업 시 힘도+2, 최대 체력도+10증가합니다(체력 회복).Mage: 체력80.0, 마나150, 힘5, 지능20, 방어력3; 공격력은intelligence * 0.4; 일반 공격 후 마나를5회복합니다(최댓값을 넘지 않음). 레벨 업 시 지능도+2, 최대 마나도+15증가합니다(마나 회복).Rogue: 체력100.0, 마나60, 힘12, 지능8, 민첩성18, 방어력4; 공격력은strength * 0.5 + agility * 0.7; 레벨 업 시 민첩성도+2증가합니다.
ability.gd의 Ability: 생성자는 ability_name, mana_cost(int), damage(float)를 받습니다. use(user, target) -> float는 사용자의 마나가 비용보다 적으면 USER does not have enough mana for ABILITY를 출력하고 0.0을 반환합니다. 그렇지 않으면 마나를 소모하고 USER casts ABILITY on TARGET을 출력한 다음 target.take_damage(damage + user.intelligence * 0.5)를 반환합니다.
제공된 코드는 모든 캐릭터의 defeated 시그널에 연결하여 NAME is defeated!를 출력합니다. 다음 입력에서:
hero warrior|Aragorn
hero rogue|Orc
attack Aragorn|Orc
attack Orc|Aragorn
level Aragorn
status Aragorn출력은 다음과 같습니다.
Aragorn attacks Orc
Orc takes 16.0 damage (HP 84.0)
Orc attacks Aragorn
Aragorn takes 14.6 damage (HP 135.4)
Aragorn reached level 2!
Aragorn the Warrior (level 2): HP 170.0/170.0, mana 35/35, STR 18, INT 6, AGI 11, DEF 9코드는 character.gd, warrior.gd, mage.gd, rogue.gd, ability.gd에 작성하세요. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
extends Node
func _ready():
# 제공된 입출력 코드: 그대로 유지하세요
var heroes := {}
var line := OS.read_string_from_stdin()
while line != "":
var parts := line.split(" ", true, 1)
var f: PackedStringArray = parts[1].split("|") if parts.size() > 1 else PackedStringArray()
match parts[0]:
"hero":
var hero: Character
match f[0]:
"warrior":
hero = Warrior.new(f[1])
"mage":
hero = Mage.new(f[1])
"rogue":
hero = Rogue.new(f[1])
hero.defeated.connect(func(who): print(who, " is defeated!"))
heroes[f[1]] = hero
"learn":
heroes[f[0]].learn_ability(Ability.new(f[1], int(f[2]), float(f[3])))
"attack":
heroes[f[0]].attack(heroes[f[1]])
"cast":
heroes[f[0]].use_ability(int(f[1]), heroes[f[2]])
"level":
print(heroes[f[0]].level_up())
"status":
print(heroes[f[0]])
line = OS.read_string_from_stdin()
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러