질문과 답변

Extra Form

제가 일반공격 계산식을 만들었는데 다음과 같습니다.


a.atk * (1 - b.def / (b.def + 100))


그런데 이 계산식을 적용하면, 몬스터 방어력으로 인한 데미지 감소가 안되고, 플레이어 공격력 액면그대로 들어갑니다.



이해를 돕기위해 예제를 하나 들겠습니다.



a.atk = 300 (플레이어의 공격력)


b.def = 80 (몬스터의 방어력)


이라고 가정하겠습니다.



그럼 플레이어의 공격력은 액면 그대로, 300의 피해량 을 갖고있습니다.


다음으로,


몬스터의 방어력은, 위 계산식대로 b.def / (b.def + 100) 를 통하여 0.4444..... 이라는 결과가 도출됩니다.

이는 피해감소(%) 로 나타내자면, 소수점 자르고 0.44 * 100 을 통하여, 44% 감소 라는 결론이 나옵니다.

+ 참고로 이 방어력 계산은 방어력이 아무리 높아도 점감식으로 적용되어, 절대로 숫자 1 이 될수 없습니다.


그리고.. 실질적인 데미지 감소를 위한 추가적인 식을 적용하여,


(1 - b.def / (b.def + 100)) 빨간부분 즉, 1 - 0.44 = 0.56 이라는 식을 만들어,


0.56 을, 플레이어의 공격력.. 즉, 300 에 곱해주면,


최종 피해량은 167 이 됩니다.


44% 감소된 56% 의 데미지 식 이 만들어집니다.








는 이론대로라면 이렇게 되야하는데, 왜 데미지 감소가 안될까요?


제가 뭔가 실수한걸까요?



Comment '7'
  • ?
    Vincent 2013.10.01 19:33
    이거 적어놓고 이것저것 해보다가, 알아냈습니다.

    이미 아시는분들도 있겠지만, 모르는 분들을 위해 적어놓겠습니다.

    vxa 에서의 계산식에서 주의할점은, 계산도중 0 이하의 값이 나오면 안된다는 겁니다.

    본문에도 적혀있는 식을 보면,

    b.def / (b.def + 100) 이 부분의 값이 소수점으로 나오게끔 되어있습니다.

    저는 처음에 계산식에서 그런것쯤은 다 인식하는줄 알았는데, 아니더군요.

    저 부분에서 계속 1 미만, 즉 소수점자리 값이 도출되니까,

    결과값은 계속 0 으로 나오는거였습니다.


    그래서 식을 변경했습니다.

    (a.atk * (100 - (b.def * 100 / (b.def + 100)))) / 100

    이렇게 계산될 값을 대폭 키워버렸더니, 바로 문제없이 데미지감소 식이 적용되는군요.

    조금 더 복잡해지긴 했지만, 문제는 전혀 없습니다.


    이상입니다.
  • ?
    Vincent 2013.10.01 19:37
    아, 하지만 계산식에 직접적으로 소수점 값을 입력해서 사용하는건 전혀 문제가 없었습니다.

    그러니까, '계산된 결과가 소수점' 이면 안되는거 같습니다.
  • profile
    Omegaroid 2013.10.01 19:46

    보통 우리가 계산을 할때는 10/3은 3.33333.... 이렇게 되지만, 스크립트에서 10/3을 계산하면 소수점 자리는 안나오고 그냥 3이 도출됩니다. 왜냐면 '정수'끼리 계산을 하면 '정수'만 도출되기 때문이고요. 따라서 10.0/3.0 이런 식으로 부동 소수점 수(3.145423412 나 0.1231 나 이런거)로 만들어주고 계산을 해야 소수점 자리까지 다 나오게 되는 거고요.

    a.atk *(1 - b.def / (b.def + 100))
    이 계산식을 보면 1도 정수이고, a.atk도 b.def도 전부 정수겠지요. a.atk가 300이고 b.def가 80이면, 일단 b.def / (b.def + 100) = 80/180 = 0 이 되는 거고요. 따라서 a.atk*(1-0)이 되는 셈이라 플레이어 공격력이 액면 그대로 들어가는 상황입니다.

    해결책은...a.atk* 부분은 고치실 필요 없고, to_f 메소드를 써줘서 부동 소수점 수가 나오게 만들어주면 됩니다. 괄호 안에 있는 부분은 전부 부동 소수점수로 고쳐줘야 하니까 1.0 - b.def.to_f / (b.def.to_f + 100.0) 이렇게 고쳐주면 되겠더라고요.

  • ?
    Vincent 2013.10.01 19:53
    그런 방법도 있군요.

    제가 스크립트는 잘 몰라서 저 나름대로의 방법으로 해결책을 냈긴 했습니다만,

    답변해주신게 더 심플한거같습니다.

    바꿔봐야겠군요 ㅎ

    감사드립니다.
  • profile
    Omegaroid 2013.10.01 19:54

    그런데 제 해결책과 제시하신 예시를 결합해서 계산하면 166.6666666.....로 나올 수 있기 때문에, 이 소수점 아래자리 때문에 문제가 되면 아예 추가로

    real_damage = a.atk * (1 - b.def / (b.def + 100))

    이런 식으로 따로 계산식을 별도의 변수에 집어넣고 real_damage.to_i 이런 식으로 to_i 메소드 붙여줘서 도로 정수로 만드는 방법도 있습니다.

  • ?
    Vincent 2013.10.01 19:57
    역시 아는게 힘이군요.. ㅎㅎ

    좋은답변 감사드립니다.
  • ?
    허걱 2013.10.02 01:06
    Omegaroid 님께서 답변을 자세히 달아주셔서 따로 답변달것은 없네요. 감사합니다.

    다만... 질문자께서 사용하는 계산식은 데이터베이스의 스킬계산식을 말하는듯 하네요.
    VXA에는 스크립트가 아닌 데이터베이스에 이처럼 스킬계산식을 따로 작성해 줄 수 있는 부분이 있습니다. 다만 그 부분이 한줄에 글자수도 제한적이라 변수까지 쓰긴 힘들듯 하네요.

    (a.atk * (1 - b.def.to_f / (b.def + 100)))).to_i

    이와같이 식 전체를 괄호로 묶어서 to_i 메소드를 사용하는게 좋을듯 합니다.
    또한... 나눗셈의 경우 정수형과 소수형의 계산은 한쪽만 소수형이라도 결과는 소수형식으로 나온다는걸 알면 식은 더 짧아질 수 있게 되죠.

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 13193
RMVXA 스크립트 에러 질문입니다 3 file 오늘은훈이좋군 2013.10.01 1192
RMVXA 계산식 문제 (해결) 7 Vincent 2013.10.01 903
RMXP 몬스터 리젠 방법이요 2 이룩 2013.10.01 1099
RMVXA 분명 이벤트를 종료시켰는데 캐릭터가 움직이지 않네요 2 file dinba 2013.10.01 1211
RMVX 시작시, 다른맵으로 이동시 이벤트 제작방법을 문의드립니다. 6 안보여어 2013.10.01 1229
RMVXA 적과 만나는 방식을 바꾸려고 하는데... 6 파송송뇌진탕 2013.09.29 1154
툴선택 알만툴 툴로도 마우스 사용 전략 시뮬레이션 게임을 만들 수 있을까요? 2 환상벌레 2013.09.29 2154
RMVXA [수정해서 다시 올립니다.] 게임을 하다가 자꾸 팅기네요. 1 file 오버매냐 2013.09.29 1192
RMXP 심플 액알 사망불가능...문제 2 file SPMgames 2013.09.29 1220
RM2k 2000게임을 한글화 중인데.. 어플로케일 없이 실행이 안됩니다 3 file 고봉도봉 2013.09.29 2026
기타 뷝어 통역방법 3 스타준 2013.09.29 1181
RMXP Shun 님의 마우스 스크립트 file 이랏챠 2013.09.29 1214
RMVXA 긴급 ) 액션 알피지 참깨빵위에순쇠고기패티두장특별한소스양상추치즈피클양파까지 2013.09.29 1046
RM2k rpg2000/rm2k 작품은 어떻게 한글화를 해야하나요..ㅠ.ㅠ 1 고봉도봉 2013.09.29 2587
RMVXA 액션 알피지 전투질문 2 참깨빵위에순쇠고기패티두장특별한소스양상추치즈피클양파까지 2013.09.28 1210
RMVXA 액션 알피지 무기만들기 질문 참깨빵위에순쇠고기패티두장특별한소스양상추치즈피클양파까지 2013.09.28 1079
RMVXA RPG만들기 VX ACE 액션 알피지 HP창 질문.. 4 참깨빵위에순쇠고기패티두장특별한소스양상추치즈피클양파까지 2013.09.28 1885
RMVXA 캐릭터칩 에러 2 file 아아아ㅏ앙ㅇㅇㅇㅇ 2013.09.28 1005
RMVX vx에는 대시금지 기능이 없나요? 4 카온 2013.09.28 970
RMVX 메뉴 스크립트에 관하여 6 file karlen 2013.09.28 992
Board Pagination Prev 1 ... 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 ... 517 Next
/ 517