싸우는 두 군대의 산출량 계산


20

Flash를 사용하여 전략적 게임을 프로그래밍하고 있습니다. 이 게임은 유명한 게임 "Travian"과 매우 유사합니다.

내 문제는 다음과 같습니다 : 나는 두 군대 사이의 싸움의 결과로 군대의 계산을 잃게하려고합니다. 두 군대는 서로 다른 유형의 유닛을 가지고 있습니다. 그들 중 일부는 다른 유닛에 비해 강하고 다른 유형에 대해서는 약합니다.

이 차이의 효과를 싸움의 방정식에 어떻게 넣을 수 있습니까?

그들이 att와 def 포인트 만 가지고 있으면 쉬운 것처럼 보이지만 유닛 유형 의존성에 관해서는 길을 잃었습니다.


6
전투의 결과가 순전히 결정적이어야합니까, 아니면 임의의 종류를 사용하고 싶습니까?
sum1stolemyname

4
OP-it에 의해 제공되지 않았기 때문에 멀티 플레이어 게임으로 태그를 지정해야한다고 생각하지 않습니다. 인간 대 AI 일 수 있습니다. 그리고 '유형 의존성'으로 고전적인 가위-> 종이-> 록 유형의 것을 이야기하고 있습니까?
공산주의 오리

답변:


10

Lanchester 방정식을 살펴 보겠다는 Amit의 제안을 뒷받침하는 것 외에도, 이것이 우리가 줄 수있는 경험적 사실이 아니라 게임 디자인 결정이라고 덧붙이고 싶습니다. 단위 유형을 고려하려면 그 의미를 결정해야합니다. 즉, 게임 플레이에 포함시킬 모든 요소가 포함 된 방정식을 선택해야합니다. 보병이 기병보다 더 나아지기를 원한다면 그 의미가 무엇인지 결정해야합니다. 100 개의 보병과 같은 기병대가 얼마나 필요합니까? 누가 누구를 공격하는지가 중요합니까? 당신은 단순히 보병과 기병에게 다른 공격과 방어 가치를 부여하는 것만으로는 충분하지 않다는 것을 암시하는 것 같습니다. 왜 그런가요? 그 값으로 만 포착 할 수없는 다른 것을 표현하려고합니까?

플레이어가 게임에 접근하는 방식에 영향을 미치므로 게임에서 모델링 할 요소를 결정해야합니다. 여기에는 단위 크기 / 수량, 단위 유형, 단위 경험 (예 : 퇴역 군인 상태), 지형 및 환경 영향, 공격 및 방어의 차이 (있는 경우), 손상 및 마멸 모델링 여부, 시간 경과 모델 모델링 여부 등이 포함될 수 있습니다. 전투, 철수 또는 도망하는 능력 (아마도 사기 모델링 포함), 방정식에서 원하는 임의성 등.

이 모든 것을 알면 취할 수있는 몇 가지 기본적인 수학적 접근 방식이 있습니다. 예를 들어, 많은 RPG와 마찬가지로 라운드 "히트 확률"시스템을 사용할 수 있습니다. d20 전투 시스템. 오리지널 문명 게임과 마찬가지로 한 번의 "공격 대 방어"가중치 동전 던지기 시스템을 사용할 수 있습니다. 임의의 숫자에 속성을 추가하고 가장 높은 가치를 얻는 사람이 승리하면 양측이 점수를 생성 할 수 있습니다. 또한 이러한 시스템을 순차 기준으로 작동 시키거나 적중 점수 나 사기 점수 등을 공제 할 수 있습니다. 모든 시스템이 작동 할 수 있지만 원하는 방식으로 균형을 유지해야합니다. 궁극적으로 전투를 모델링하는 방법의 선택은 게임 디자인의 핵심 부분이며 다른 사람들이 당신에게 줄 수있는 것이 아닙니다.


당신은 완전히 Kylotan입니다. 게임 디자인을 시작하기 전에 싸움에 대한 아이디어가있었습니다. 그러나이 질문을 디자인하고 그것을 구현하는 가장 좋은 방법을 찾는 더 좋은 방법이 있는지 묻는 질문을 게시했습니다. 나는 내가 추측하는 두 가지 목적으로 이겼다 :) 내 친구, 그 수학적 접근법에 대한 자세한 정보를 어디서 찾을 수 있는지 말해 주시겠습니까? 또한 시스템 선택에 관한 모든 질문에 대답하면 어느 것이 가장 적합한 지 조언 해 주실 수 있습니까? 시간 내 주셔서 대단히 감사합니다 :)
Ali Albahrani

나는 어느 것이 가장 좋을지 말할 수는 없지만 필요할 경우 간단하게 시작하고 개선해야합니다. 트라 비안은 2 가지 유닛 유형 (보병과 기병)과 유닛 당 2 개의 방어 점수를 가진 간단한 공격 대 방어 시스템을 가지고있는 것 같습니다. Civilization 1에서 사용 된 전투를 해결하는 쉬운 방법은 공격자의 공격 점수를 총계와 방어자의 방어 점수로 나눈 것입니다. 이것은 당신에게 백분율을 제공합니다. 이제 0에서 100 % 사이의 난수를 선택하십시오. 공격자의 공격 점수보다 낮 으면 공격자가 승리합니다. 그렇지 않으면 수비수가 이깁니다.
Kylotan

15

솔라 렐름 엘리트에게 나는 전쟁을 모델링 하는 랜 체스터 방정식 에서 영감을 얻었습니다 . 나는 각 전투에서 동시에 여러 번 싸웠다.

첫 시합에서 모두가 군인을 공격했습니다. SRE 병사들은 병사들과 대결하는 것이 가장 좋습니다 (바위 가위가 아니라 보병, 공습, 깊은 우주). 나는 군인들이 최선의 공격을 할 수있는 공격력과 방어력을 세웠다 :

attack_strength = 3*soldiers + 1*fighters + 2*cruisers
defense_strength = 10*soldiers

두 번째 싸움에서 모든 사람들은 방어 국을 공격했습니다. SRE 전투기 (공기)는 방어 국 (예 : 대공)에 가장 적합합니다.

attack_strength = 1*soldiers + 4*fighters + 2*cruisers
defense_strength = 25*defense_stations

세 번째 싸움에서 모두가 무거운 순양함을 공격했습니다. SRE에서 중순양함은 우주에 있으며 다른 중순양함에 비해 가장 좋습니다.

attack_strength = 1*soldiers + 1*fighters + 10*cruisers
defense_strength = 15*cruisers

(나는 내가 사용한 상수를 기억하지 못한다. 그것들은 단지 예일 뿐이다.) 각 전투에서 공격자는 방어력의 일부를 잃고 방어자는 공격력의 일부를 잃게된다. 나는 Lanchester의 제곱 법칙 (방정식이 대응 믿고 여기를 ). 나는 무작위성을 추가했지만 정확히 어디에 있는지 기억하지 못한다. 전투가 끝날 때마다 군대는 더 작아 질 것입니다. 라운드 수에 최대 한도를 두었습니다. 그 후,지는 쪽은 후퇴 할 것입니다.

보병을 지상으로 발사하는 것은 현실적이지 않았지만 게임 플레이의 이유로 모든 유닛이 다른 모든 유닛과 싸울 수 있도록하는 것이 더 효과적이었습니다 (효과가 감소됨).


12

나는 '명시적인 해결책을 찾을 수 없다면 암묵적인 해결책을 찾으십시오'라고 말하는 경향이 있습니다. 한 군대가 사라지거나 후퇴 할 때까지 (게임의 가능한 결과에 따라) 내부에서 전투를 시뮬레이션 할 수 있습니다.

나는 이것과 같은 것을 사용할 것이다 :

전투가 반복 될 때마다 모든 유닛은 기회주의 적이므로 최대한 많은 피해를 입 힙니다. 각 유닛은 알려진 장단점에 따라이 라운드를 공격 할 적 유닛을 선택합니다.

그런 다음 모든 하위 전투가 수행됩니다. 예를 들면 :

창병이 기병대, 궁수 병, 궁수에 효과적이며 궁수는 창병에 효과적입니다.

이 두 기본 유닛으로 구성된 두 군대 간의 전투에서 모든 창병은 기병대를 공격하고, 모든 기병대 유닛은 궁수를 공격하고 모든 궁수는 창병을 공격합니다. 예를 들어 한쪽에 궁수가 없다면 다른 쪽 기병대는 다음으로 가장 좋은 목표 유형을 선택합니다 (적의 기병대 유닛)

각 유닛 공격 유닛 이벤트는 잃어버린 유닛이 손상되거나 파괴 된 것으로 표시되어 개별적으로 해결됩니다.

모든 개인 전투가 해결 된 후에 치명적인 피해를 입거나 파괴 된 모든 유닛을 제거하십시오.

다음 반복은 이제 축소 된 군대를 사용하기 시작합니다.


이 게시물에 동의합니다. 전투를 단일 방정식으로 줄이는 대신 전투를 반복하는 것이 좋습니다. 그리고 나는 그것에 약간의 무작위성을 추가 할 것입니다. 약한 수비수가 굴러 올라 치명타를 기록 할 가능성은 아주 적습니다. 반복의 또 다른 장점은 이벤트에 대한 설명을 만들어 플레이어를 보여줄 수 있다는 것입니다. 는 "징집은 ... 공격하고 곧 하인을 죽였다하지만 다음 갈보리는 도착"
팀 홀트

나는 당신의 대답을 매우 좋아하고 무작위로 구현할 것이라고 생각합니다. :)
Ali Albahrani

3

나는 현재 간단한 버전의 Solar Realms ( Star Empire Elite ) 인 베타 테스트를하고 있으며 위의 Amit 방정식과 비슷한 것을 사용하여 시작했습니다. 특히, 나는 당신이 세 가지 중 두 가지를 이겨야 할 전투에 3 단계를 갖는 아이디어를 좋아했습니다. 그러나 나는 또한 무작위 요소를 전투에 도입하고 싶었고, 그 때문에 일부 탁상용 게임의 영향을 받았습니다.

게임을 확장하려면 처리가 문제이므로 위의 sum1stolemyname에서 제안한 방법을 따르고 싶지 않습니다. 게임과 달리 클라이언트가 서버를 사용하지 않고 결과를 처리하는 경우에는 좋은 접근.

나는 전투를 2 단계 (Amit의 모델에서 3 단계와 유사) : 공중과 지상으로 나누기로 결정했다. 나는 공격력을 계산하고 방어력을 높이고 공격력을 분수로 낮추어 방어자에게 이점을 준다. 이 시점에서 공격 강도와 방어 강도가 같으면 50 %의 확률로 승리합니다. 여기에서 공격자가 수비수와 비교했을 때의 강도에 따라 승률의 백분율을 조정합니다. 다음은 공기에 대한 간단한 방정식입니다.

air_attack_strength = 1 * soldiers + 10 * fighters
air_defence_strength = 2 * soldiers + 25 * stations

differential = (air_attack_strength - air_defence_strength) * constant

chance_of_victory = 50 - differential

나는 chance_of_victory가 80보다 크거나 5보다 작을 수 없다고 지정한다. 거기서 100에서 난수를 생성 한 다음 그 결과를 육상 전투로 이월한다.

내가 만족스럽게 해결하지 못한 한 가지는 사상자 비율입니다. 그러나 나는 이것을 알아내는 좋은 방법은 chance_of_victory를 생성 된 난수와 비교하여 공격 방어력의 일부를 사상자로 삼는 데 사용하는 것이라고 생각합니다.

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