턴 기반 게임 또는 로그 라이크에서 적중을 계산하기위한 속성


22

플레이어가 로그 라이크에서 적을 공격 할 때 적중을 결정하는 좋은 공식을 찾으려고 노력 중입니다. 나는 단순한 것을 제안하고 싶지만 D & D 또는 AngBand 또는 NetHack과 같은 인기있는 Roguelikes에서 수행되는 방식에 충실합니다.

지금까지 내가 가진 것은 무작위 정수와 함께 플레이어 속성과 적 속성의 차이점을 추가하는 것입니다.

if ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + random_integer_below_6()) >= 10) {
    hit(enemy);
}

이것은 부 자연스러운 게임 플레이를 만듭니다. 플레이어는 약한 적을 그리워하지 않으며 강한 적을 반대하지 않습니다. 누구든지 턴 기반 게임 등에 사용되는 속성 기반 전투에 대한 가이드를 알고 있습니까? D & D 규칙을 그대로 복사해야합니까?

답변:


18

"보증 된 적중"과 "보증 된 미스"가능성이 무엇인지 (예 : 고양이가 용을 칠 수있는 기회, 용이 고양이를 놓칠 수있는 기회) 임의의 결과를 저장하고 전력 차이를 적용하기 전에 해당 범위 내에있는 경우 적중을 표시하십시오. 이렇게하면 100 % 적중 / 실패 가능성 문제를 예방할 수 있지만 항상 적중 할 가능성을 제공하는 다른 옵션이 있지만 아래에 자세히 설명되어 있습니다.

D & D는 "플랫"시스템으로, 가능한 롤 결과에 확률이 고르게 분포되어 있습니다. 다른 시스템은 일반적으로 여러 개의 주사위를 굴려서 추가하여 구부러진 분포를 사용합니다. 이와 같은 곡선을 만드는 것은 쉽습니다 (rand () + rand ()) / 2가 떠 오릅니다).

또 다른 가능성은 "폭발 주사위"입니다. Shadowrun 및 Savage Worlds와 같은 시스템에서 가능한 최대 다이 결과를 롤링하면 해당 다이를 다시 롤링하고 새 결과를 추가 할 수 있습니다. 게임에서 임의의 결과가 특정 임계 값을 초과하는지 확인하고, 그렇다면 다시 굴립니다. 주사위가 무기한으로 폭발하게된다면, 가장 작은 고블린조차도 신을 때릴 수있는 기회가 있으며, 명시적인 "보장 된 적중"기법이 필요하지 않습니다.

따라서 구부러진 롤을 사용한 한 가지 가능한 접근 방식, 누락 가능성 및 주사위 폭발 가능성은 다음과 같습니다.

function getRoll():Number
{
  var result:Number = (rand() + rand()) * 3; //Curved result from 0 to 6
  if(result > 5.75) result += getRoll(); //Explode over a certain threshold, recursively
  return result;
}

function attackHits():Boolean
{
  var roll:Number = getRoll();
  if(roll < 0.25) return false; //Guaranteed chance of miss
  else return ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
    (player.luck - enemy.luck) + roll) >= 10; //Your original test.
}

물론, 그것은 테스트되지 않았고 균형이 맞지 않습니다. 당신은 그들이 느낄 때까지 모든 마법의 숫자를 조정하고 싶을 것입니다.

규칙을 그대로 복사하는 데는 법적, 윤리적 문제가 있습니다. 하지만 D & D 및 기타 탁상용 게임에서 영감을 얻는 것은 훌륭한 일입니다. 그것이 그들이 처음부터 어떻게 설계되었는지입니다. 플레이어에게 규칙의 작동 방식을 정확하게 보여줄 필요가 없으며, 부드러운 부동 소수점 주사위 곡선을 사용하면 실제 주사위의 정수 제약 조건으로 제한하는 것보다 기분이 좋아집니다.


3
재미있는 타입의 decls로 어떤 언어입니까? 아니면 그냥 의사 코드입니까?
tenpn

2
나는 그것이 Actionscript 또는 Javascript 일 수 있다고 생각하지만, 나를 붙잡고 있지는 않습니다.
공산주의 오리

Actionscript 3입니다. 저는 Flash 개발자입니다.
Gregory Avery-Weir

6

나는 이것이 코딩 균형이 아닌 게임 밸런스 질문이라고 가정하고 있으며 이것을 처리하는 많은 방법이 있습니다. 기존 알고리즘에서 나는 당신이 그것을보다 복잡하게 만들고 있다고 생각합니다 (3 가지 속성과 난수는 플레이어의 관점에서 매우 진흙 투성이 시스템을 만듭니다). 나의 첫 번째 본능은 단순화하는 것입니다!

여러 속성에 의해 결정되는 결과보다는 여러 가지 일을하는 속성을 선호하십시오. DEX는 적중률의 주요 결정자로서 잘 작동합니다. 다른 모든 것을 추가하면 균형을 맞추기가 더 어려워집니다. 이런 식으로 생각하십시오 : 각 적중시 플레이어의 예상 피해량은 적중시 평균 피해량에 적중률을 곱한 것입니다. 변수가 많은 "예상 된"또는 "일반적인"적중률을 어떻게 계산할 계획입니까?

수식이 확장되지 않는다는 또 다른 문제가 있습니다. 이것은 아마도 당신이 겪고있는 것일 것입니다. DEX, LUCK 및 SPEED가 게임 과정에서 증가하는 경향이 있다고 가정하면 해당 통계에서 플레이어와 몬스터의 차이도 증가하는 경향이 있습니다. 예를 들어, 플레이어의 초기 게임 DEX가 4에서 6까지의 범위에 있고 몬스터도 마찬가지라면, 이는 적중률 10-20 %입니다. 게임의 후반 단계에서이 범위가 10 ~ 20에 가까우면 100 %까지 수정됩니다.

이를 해결하는 한 가지 방법은 통계를 고정 된 상태로 유지하는 것입니다. 플레이어와 몬스터의 범위는 게임 내내 동일하며 +1 DEX와 같은 것을 얻는 것은 매우 드물고 그와 같이 취급됩니다 (존재하는 경우). 그러면 공식이 전체 게임에서 잘 작동하며, 같은 기회를 가진 선수를 볼 수 있습니다.

또 다른 방법은 하드 코딩 된 "10"을 레벨에 맞게 스케일링하는 것이므로 "10 + 몬스터 레벨"또는 "10 + 던전 레벨"또는 무언가 일 수 있으며, 이는 플레이어가 레벨을 올리지 않으면 게임이 진행될 때 약간의 난이도를 야기합니다. 그에 따라 통계.

다른 사람들이 말했듯이 세 번째 방법은 하드 캡을 허용 가능한 최고 및 최저 허용 %로 설정하고 "계산 된 값이 X보다 작 으면 대신 X를 사용하십시오"라고 말하는 것입니다.

완전성을 기하기 위해, 반드시 명중률을 반드시 포함시켜야하는 절대 법이 없다는 것을 지적 할 것입니다. 효과가없는 게임에서 행동을 취하는 것은 특히 재미 있지 않으며 드문 경우를 제외하고는 실제로 경험에 추가되지 않습니다. 다른 방법으로는 플레이어가 항상 타격을 입히고 피해 범위를 엉망으로 만들어서 때때로 다른 플레이어보다 피해가 훨씬 적도록하는 것입니다. 복잡한 시스템은 플레이어보다 디자이너에게 더 재미 있습니다.


이것은 좋은 대답입니다.
seanicus

3

치명타 (보통 놓칠 수없는 보너스 피해)와 치명적 미스 (무엇이든 플레이어를 현혹시킬 수있는 평평한 기회)를 추가 할 수 있습니다.


0

많은 게임에서 일반 적중 공식 외에 모든 요소에 관계없이 적중률이 5 % 변경됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.