게임 기반 이론 크래프트 통계 도구에 대한 알고리즘 (League of Legends)


10

게임 (League of legends) 용 시뮬레이터 (기본적으로 테스트 목적으로)를 만들고 싶습니다.

게임의 기초 :

당신은 몇 가지 통계를 가진 영웅이 있습니다 :

  • 건강 포인트
  • 공격력
  • 공격 속도
  • 갑옷
  • 방어구 관통
  • 이동 속도

영웅은 4 가지 기술을 가질 수 있습니다 (각 레벨마다 하나의 스킬 포인트를 얻습니다) (수동으로 대부분 활성화되며 재사용 대기 시간, 데미지, 공격력 / 공격력, 기술 수준) + 수동 기술

적 영웅이나 중립 괴물을 죽일 수 있습니다.

  • 건강 포인트
  • 공격력
  • 공격 속도
  • 갑옷

내가하고 싶은 것 :

특정 아이템 또는 특정 스탯 증가로 인해 킬링 파워 / 스피드가 빨라지는지 테스트 할 도구를 만듭니다.

지도 : http://evtron.com/Evtron-Alpha/wp-content/uploads/2011/02/Summoners-Rift.jpg

통계 예 :

  • HP : 420
  • 광고 : 55
  • AttackSpeed ​​: 0.613 (공격 / 초-> 1 / 0.613 초마다 공격)
  • 방어구 관통력 : 25

캐릭터는 1 / 공격 속도로 적을 자동 공격하고 공격 피해로 피해를 입 힙니다 (손상을 계산하는 공식이 있지만이 단계에서는 중요하지 않은 것으로 추측됩니다), 일단 죽으면 이동 속도로 다음 단계로 이동합니다 ( 지도에서 캠프, 노란색 두개골을 볼 수 있습니다)

알고리즘에 대해 생각하고있었습니다.

  1. 나는 단지 i = 0에서 i = 30000 (counts ms)까지 for를 만들면, 적의 hp와 hp를 확인할 수 있고 모든 ms에서 너무 나쁘다. 그것에 임의의 비트를 넣으려면 1k 반복을 요약 할 수 있어야합니다.

  2. 두 번째로, 나는 i = 1에서 30까지만 수행하고 매 초마다 확인하고 마지막 2 초 동안 일어난 일을 확인해야한다고 생각했지만 중립 괴물 중 일부는 큰 수용소에 있습니다 (최대 4 명의 괴물). 이런 식으로 코드가 복잡해지고 복잡해졌습니다.

  3. 각 플레이어 / 몬스터마다 스레드를 만들고, 그들이 죽었을 때 조회를 마치고 플레이어의 HP를 줄입니다.

내 질문은 이것이 올바른 방법입니까?

TLDR : 스탯 증가로 인해 캐릭터가 더 빨리 중립 몬스터를 죽일 수있는 게임에 대한 분석 (1k 반복 및 평균 계산)을 생성하는 도구를 만들고 싶습니다.

나는 자바를 선호하지만 atm 나는 알고리즘을 고수하고있다.


@ Karoly S : 그렇습니다, 그것은 나의 잘못입니다.

나는 이것을 연구하고있다 :

각 개체 (플레이어 스킬, 자동 공격, 버프)에서 남은 시간을 확인하고 항상 가장 짧은 시간을 선택하고 last_time을 저장하고 시간을 추가하면 다음 라운드에서 시간을 다음과 같이 계산합니다. 마지막으로)

개체에 남은 시간이 0이면 필요한 모든 작업을 수행합니다.

그것이 효율적인지 아닌지는 모르겠지만, 그것이 최선의 방법입니다.


1
스택 익스체인지의 게임 개발 섹션 / 사이트에서 물어 보는 것이 더 좋을 수도 있습니다. jungling 시뮬레이터는 흥미로울 것입니다. 몇 가지 생각을하고 내가 생각해 낸 것을 볼 것입니다.
Karoly S

빠른 답변 감사합니다. 귀하의 도움에 감사드립니다. 내 생각 엔 네가 헝가리 인 인 것 같아?

물론 이것은 제가 깊이 생각하지는 않았지만 관심이있는 부분입니다. 초기 접근법은 더 간단한 버전의 # 2가 가능하지만 효과적인지 확인하는 것입니다. 이 문제에 대해 더 오래 논의하고 싶습니다. 그리고 네, 당신의 추측은 맞을 것입니다 :)
Karoly S

나에게 멋진 소리, 나는 주제를 열어두고 아마 누군가가 이미 그것에 대해 생각하고 있습니다. 내 이메일 (gwelican dot com에서 공개)

좋을 것 같습니다. 오늘 그것에 대해 몇 가지 생각을 넣고 이메일을 보내 드리겠습니다.
Karoly S

답변:


1

프레임 별 시뮬레이션의 대안 :

다음과 같은 공식으로 시뮬레이션에 대한 합리적인 근사치를 얻을 수 있습니다.

rawDamage = <some function of strength?)
Damage = rawDamage - enemyArmorReduction
DPS = (attackSpeed * Damage) * enemyArmorMod
myRemainingHP = myDPS / theirHP  - theirDPS / myHP

또한 이동 대기열을 유지하여 틱당이 아닌 이동 당을 시뮬레이션 할 수 있습니다.

// my aspd = 4 attacks per second, his aspd = 3 attacks per second
0.0s : start battle
0.25s: I attack
0.33s: He attacks
0.50s: I attack again
...
1.00s: I attack
1.00s: He attacks
...

이동 대기열은 손상이 연속적이지 않고 개별적이라는 사실을 올바르게 처리하기 때문에 더 정확합니다. 예를 들어, 0 초에 50의 피해를 입히고 1 초에 또 다른 50의 피해를 주면 내 DPS는 50이되지만 1 초 안에 100 HP 대상을 죽입니다.

@hammar : 맞습니다. 싸움이 짧을수록 DPS 기반 견적의 정확도는 떨어집니다.
지미

게임이 기절하고 다른 디버프가 있다는 사실은 그러한 도구를 실제로 달성하기 어려울 것입니다. 어쨌든 좋은 대답입니다.
그림 쇼
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.