본문 바로가기
대학생활/수업

게임밸런스및시뮬레이션 8주차 - 방어력, VBA 프로시저

by se.jeon 2023. 10. 30.
728x90
반응형

방어력

공격력과 치명타, 그리고 방어력과 체력은 동맹이다.

전투 시간 = 방어자 체력/ (공격자 공격력 - 방어자 방어력)

 

젤다의 전설 : 야생의 숨결 밸런스도 체력 기준과 HP와 비율로 이해할 수 있다.

- 링크의 시작 HP는 하트 3개이다

- 하트 1개는 총 4칸의 HP를 가지고 있다. 즉 링크의 초기 체력은 12이다.

- 링크의 체력은 최대 하트 30개까지 늘어난다. = 링크의 최대 HP는 120

- 라이넬이 사용하는 공격 데미지는 90이다. (최대 하트 30개 중에서 22개 반을 날려버림)

= 하트가 22개 반 이하로 성장된 상태의 경우 1번의 공격으로 죽게 된다.

 

몬스터의 데미지 이상으로 성장하지 않으면 상대하기 어렵다. (오픈 월드 탐험이 힘들다)

젤다의 전설 밸런스의 어려움...

하트가 3개일 때 6의 데미지는 6/12 = 50%이지만,

하트가 4개일 때 6의 데미지는 6/16 = 37.5%이다.

젤다는 전투를 권장하는 게임이 아니다.

 

몬스터를 잡을 때 마다 포인트를 누적하여 더 강한 몬스터를 리젠시키는 방식을 사용

- 보코블린 : 체력 13

-  블루 보코블린 : 체력 72

-  블랙 보코블린 : 체력 240

-  실버 보코블린 : 체력 720

-  골드 보코블린 : 체력 1080

실버와 골드 구간이 급격하게 변화되는 것을 확인할 수 있다.

 

젤다의 공격 밸런스는 단순하다. (데미지 - 방어력)

- 치명타 발생 시 : 무기 공격력 * 2

- 무기 투척 시 : 무기 공격력 * 2

- 얼린 적 공격 시 : 무기 공격력 * 3

- 은신 공격 시 : 무기 공격력 * 8

 

스타크래프트에서도 빼기 방식 밸런스를 사용한다.

스타1 : [{(기본 공격력 + 업그레이드 공격력 * 업그레이드 횟수) - (쉴드 잔량 + 쉴드 총 방어력) - 총 방어력} * 공격/방어 방식에 따른 비율] * 실제 타격 횟수

스타2 : (기본 공격력 + 공업횟수 * 공업 공격력) + (추가 공격력 + 공업횟수 * 공업 공격력) - 적 유닛의 방어력

빼기 방식과 나누기 방식으로 방어력에 따른 공격력 감소

빼기 방식 : (공격자 공격력 - 방어자 방어력) * 타격 횟수

- 10으로 3번 공격/ 방어자의 방어력 5 : (10-5)*3 = 15

- 15으로 2번 공격/ 방어자의 방어력 5 : (15-5)*2 = 20

- 30으로 1번 공격/ 방어자의 방어력 5 : (30-5)*1 = 25

 

나누기 방식 : 공격자 공격력 * 100 / (100 + 방어자 방어력)

- 10으로 3번 공격/ 방어자의 방어력 5 : 10*100/(100+5)*3 = 28.571

- 15으로 2번 공격/ 방어자의 방어력 5 : 15*100/(100+5)*2 = 28.571

- 30으로 1번 공격/ 방어자의 방어력 5 : 30*100/(100+5)*1 = 28.571

 

빼기 방식 밸런스에 의해 유닛의 특징과 상성 발생

※ 빼기 방식에서 방어력은 타격을 받을 때 마다 대미지를 할인받는 것과 같아서,

공격력과 방어력 상황에 따라 전투 양상이 달라진다. (유닛의 상성이 만들어진다.)

(더 써야함)

 

빼기 방식은 업그레이드와 버프 컨트롤에서 한계를 가진다.

체력 : 400, 방어력 99와 공격력 100이 있다고 했을 때 (100-99=1), 400초동안 사냥하다가

공격력 2배 버프를 받게 되면 (200-99)=101, 사냥시간이 4초가 되어버린다. 전투 효율이 2배가 아니라 101배로 좋아진 것.

여러번 성장하는 RPG 방식에서는 업그레이드가 중요하기 때문에 빼기 방식을 사용하지 않는 경향을 가진다.

트리 오브 세이비어의 밸런스 수정과 Log

- 캐릭터 능력치를 커스터마이즈 할 수 있고 공격 속성도 나뉘어 있는 TOS에서 감산빼기방식 피해량 계산은 극단적인 결과를 가져올 수 있다.

 

"이미 많은 구원자님께서 겪으신 것 처럼 일정 수준의 방어력을 갖추지 못하면 수백, 수천의 큰 피해를 입다가도 방어력이 어느 선을 넘어서면 피해량이 급격히 줄어 결국 '1'의 피해만 받게 된되는 것입니다. 

새로운 스케일 다운 계산법은 방어력 정도에 따라 합당한 피해량을 입게 됩니다. 방어력에 투자한 만큼 피드백을 받게 되며, 극단적으로 높은 방어력은 물론 아주 낮은 방어력도 그 의미를 가지게 된다. 회복력만 갖춘다면 더 강한 적에게 도전해 볼 수도 있고, 반대로 내 공격력이 상대적으로 낮더라도 피해량 '1'이 아닌 의미있는 피해량을 입힐 수 있습니다."

 

 

min 값을 쓰는 이유 : 최대가 1, 원래 본 데미지보다 더 강해지지 않도록 조절했다는 의미.

1제곱은 직선이기 때문에 0.9를 제곱한다.

확인하기에 가장 좋은 방법은 값을 실제로 넣어보는 것이다.

 

계산식을 확인하고 싶을 때는 Ctrl + ~ 표시를 누르면 계산식을 확인 할 수 있다.

 

1000은 3.5와 같이 방어력의 가치를 알려주는 역할을 한다.

1000과 1140을 두배로 해서 2000과 2280이 되면 방어력의 가치가 절반이 된다.

 

 

만렙 확장 때문에 나눈 것으로 추정됨.

 

나누기 방식으로 방어력 사용하기

데미지 계산식 = 공격력 * 100/(100+방어력)

 

방어력 1%는 체력 1%와 같지 않다.

공격력은 1%가 증가하면 체력의 1%인 3이 증가해야 한다.

 

방어력 1당 체력 2%가 되도록 하려면?

방어력 1 = 체력 1% : 100/(100+방어력)

방어력 1 = 체력 2% : 50/(50+방어력)

 

방어보정 계산식에서 방어력의 가치를 높이면 된다.

100/(100+방어력) : 방어력 1당 가치 체력 1% -> 50/(50+방어력) : 방어력 1당 가치 체력 2%

VBA에 대하여 : 프로시저와 조건문

실습 진행

인풋박스를 열어서 입력한 값을 현재 선택한 셀에 써보기

Sub 복습1()

    '인풋박스로 현재 선택된 셀에 값 적기
    Dim 입력 As String
    
    입력 = InputBox("값을 입력하세요", "입력")
    Selection.Value = 입력
    

End Sub

 

랜덤으로 10부터 20사이의 숫자를 하나 만든 후, D7셀에 써 보기

Offset 기능으로 D7 윗셀에는 -10, 아래에는 +10, 왼쪽은 -1, 오른쪽에는 1 쓰기

Sub 복습2()

    Dim 랜덤 As Byte '0~255 사이값 사용 가능
    랜덤 = WorksheetFunction.RandBetween(10, 20)
    
    'MsgBox 랜덤
    
    Range("D16").Value = 랜덤
    Range("D16").Offset(0, -1).Value = 랜덤 - 1
    Range("D16").Offset(-1, 0).Value = 랜덤 - 10
    Range("D16").Offset(1, 0).Value = 랜덤 + 10
    Range("D16").Offset(0, 1).Value = 랜덤 + 1
    
End Sub

 

도형을 삽입하고 매크로를 지정할 수 있다.

프로시져와 Function

매크로 Sub

사용자 정의 함수 UDF : User Defined Function

 

Function의 형태

Function 함수이름 (인자1, 인자2 ...)

내용

함수이름 = 결과값

End Function

 

Function은 return을 받을 수 있다.

 

Sub는 매크로 창에서 확인 할 수 있고

Function은 함수 마법사 창에서 확인할 수 있다.

Function UDF실습()

    UDF실습 = "Hello VBA"

End Function

제작한 Function은 엑셀에서 바로 함수로 사용 가능하다.

인자값을 받아 올 수도 있다.

 

Function UDF실습(a As String)

    UDF실습 = "Hello " & a

End Function

어떤 기능이 필요한데 없다면 직접 만들어 쓸 수 있다.

 

조건문을 쓰기 위한 연산자

- +, -, *, / : 더하거나 뺴거나 곱하거나 나누거나

- =, <> : A가 B가 같다, 같지 않다

- >, < : A가 B보다 크다, 작다

- >=, <= : A가 B보다 크거나 같다, 작거나 같다

- / : 나눗셈의 몫

- Mod : 나눗셈의 나머지

- AND나 OR을 쓰면 더욱 풍성한 조건문을 만들 수 있다.

 

조건문 : 만약 ~하면 ~한다.

IF문, Case문

if 조건1 then 'If~Then 생략 불가
	'조건 1이 true일 때 처리할 내용
Elseif 조건2 then 'Elseif 생략 가능
	'조건 2가 true일 때 처리할 내용
Else 'Else 생략 가능
	'모든 조건이 False일 때 처리할 내용
End if 'Endif 생략불가
728x90
반응형