문제
정올게임즈 대표 최강정올입니다.
저희 첫 작품인 “정올그라운드”는 고티(Game of the Year) 수상과 함께
당초 예정된 30억 원 규모 후속 투자를 성공적으로 유치했습니다.
이 모든 성공은 개발자 여러분께서 Player 클래스를 완벽하게 구현해 주신 덕분입니다.
기쁜 소식! 이제 두 번째 시리즈, “정올그라운드2” 개발을 시작합니다.
1. 기본 게임 메커니즘 (기존과 동일)
플레이어 속성
이름(name), 체력(HP), 공격력(ATK), 방어력(DEF)
기본 생성자(
Player()) →name=None, HP=0, ATK=0, DEF=0(더미 데이터용)
공격 로직
플레이어 A가 B를 공격하면
def attack(self,other): other.reduce_hp( self.get_atk() - (self.get_atk() / 100 * other.get_def()) )HP가 0이 되면 즉시 사망(dead)
시뮬레이션 흐름
N명의 플레이어 참가 (1 ≤ N ≤ 100)
최대 100,000턴 동안 반복:
살아있는 모든 (i, j) 쌍에 대해
players[i].attack(players[j])공격 후 사망자 생존자 수 차감
생존자가 1명 이하가 되면 즉시 종료
100,000턴 종료 시에도 2명 이상 살아있다면, 남은 플레이어 중 HP가 가장 높은 1인을 우승자로 선정
2. “정올그라운드2”에서 추가된 요소
민첩성(Dexterity) 속성 추가
각 플레이어는
dex(int) 값을 추가로 가집니다.
공격 제한 규칙
공격자(
self)의 민첩성이 대상(other)의 민첩성보다 절반 미만(즉,other.dex ≥ self.dex × 2)인 경우,
해당 대상에 대한attack()호출 시 아무 일도 일어나지 않습니다.반대로,
self.dex * 2 > other.dex일 때만 실제 대미지를 계산해 적용합니다.
3. 요구사항: NewPlayer 클래스 설계
기존
Player클래스를 상속(inheritance) 하여 구현속성 은닉(private)과 접근자(getter) 사용
추가 속성:
private __dex: int반드시 구현할 메서드
class NewPlayer(Player): def __init__(self, name=None, hp=0, atk=0, defe=0, dex=0): super().__init__(name, hp, atk, defe) self.__dex = dex def get_dex(self) -> int: # 민첩성 반환 ... def attack(self, other: Player) -> None: # 공격 제한 규칙 적용 후, super().attack(other) 호출 ...기존 Player 메서드 (
get_name(),get_hp(),get_atk(),get_def(),reduce_hp(),is_alive(),print_info())는 모두 재사용 가능
기존 클래스 Player와 상속받은 새로운 클래스 NewPlayer를 함께 제출해주시길 바랍니다.
감사합니다.
입력
이름의 길이는 100자를 넘지 않고, 각 정수 속성들은 int의 범위 내에 속한 값만 입력된다.
출력
마지막까지 생존한 플레이어의 정보가 아래와 같이 출력된다.
그 다음 줄부터 이름, 남은 체력, 공격력, 방어력이 각각 출력된다.
예제
5
John 140 10 50 1
Bob 140 20 40 2
Chris 140 30 30 3
David 140 40 20 4
Eric 140 50 10 5
<< David >>
HP: 12
ATK: 40
DEF: 20