게임이 진행됨에 따라 공격 파에서 적의 수와 도전을 어떻게 조정할 수 있습니까?


9

나는 현재 적들이 스폰되어 플레이어의 군대를 공격 할 수있는 방어 게임을 만들고 있습니다. 레벨이 하나만 있다는 점을 제외하면 타워 디펜스 게임과 비슷합니다. 적들은 결국 사용자가 죽을 때까지 또는 계속해서 생성되는 적을 모두 제거 할 수있을만큼 큰 군대를 모을 때까지 계속 생성됩니다.

지금 당장 어려움을 겪고있는 것은이 게임을 점진적으로 어렵게 만들고 적의 생성 확률이 기본적으로 100 %에 이르는 방법입니다.

지금까지 나는 다음과 비슷한 것을 얻었습니다.

if(Math.random() < 1 - (1/elapsed_time) && spawnTimer <= 0 ){
    spawnEnemy()
    spawnTimer = rand(); // random number between 1 and 3
}

그러나 시작하기에는 너무 균일 해 보입니다. 지금은 한 가지 유형의 적을 스폰하고 있습니다. 시간이 지남에 따라 더 강한 적도 스폰됩니다.

또한 spawnTimer시간이 지남에 따라 좀 더 무작위로 추출하고 더 빨리 만들어야 한다고 생각 하지만이 전체 섹션에서 내 논리가 실제로 어떻게 보이는지 알 수는 없습니다. 누구든지 이런 종류의 공식에 대한 대략적인 아이디어를 도울 수 있습니까?

나는 현재 게임을 작성하기 위해 자바 스크립트를 사용하고 있지만 분명히 개념에 관한 것입니다.


경과 시간은 무엇입니까? 지금까지 통과 한 것입니까? 이 상태를 얼마나 자주 부릅니까?
AturSams

안녕, 그래 미안 경과 시간이 시작 게임 경과 시간이며,이 내 게임 업데이트에 window.requestAnimationFrame을 기반으로 ()주기라고
TommyBs

답변:


3

선택한 기능이 목적에 적합하지 않을 수 있습니다. 먼저,이 경로로 가면 다음 번 주사위를 굴릴 때까지 실패한 무작위 조건으로 인해 지연이 발생합니다. 또한 스폰 타이머를 일정 범위 내에서 유지하여 목표에 적합하지 않을 수도 있습니다.

하자 thresh당신이 생각하는 어려움 임계 값이 높은합니다. 우리는 나중에 그것을 사용하여 게임이 어려워지는 속도를 늦출시기를 결정합니다.

rate매분 (또는 라운드)에오고 싶은 몬스터의 양을 보자 .

하자 GROWTH_RATE어려움이 증가 (지금은있을거야하는 비율 일 0.2).

로 시작한다고 가정 해 봅시다 rate = 10. 이제 플레이어가 5몬스터를 처치 GROWTH_RATE * 5 = 1.0하여 새로운을 통해 요율을 높일 수 있습니다 rate = 11.

rate매분마다 몬스터 를 생성하는 조건을 구현하는 방법 :

사이의 숫자로 설정 스폰 타이머 0.51.0 multiplied by 60 seconds or라운드 시간 and divided by속도 . Also leave a타이머가 0에 도달하는 시간이 다시 무작위 때 어떤 몬스터가 양산되지 않도록 0.25` 기회.

경우 rate지금에 도달 thresh하면 천천히해야합니다. 이제는 증가 rate하는 대신 GROWTH_RATE증가시킬 수 1 / math.sqrt(rate)있습니다. 그렇게하면 더 어려운 환경에서 플레이어가 즉시 파괴되지 않습니다.

플레이어가 게임을 잃은 시점 thresh의 약 80 %로 재설정 할 수 있습니다 rate.

몬스터의 힘을 무작위로 추출하려면 타이머에주의하십시오. 예를 들어, player-score(지금까지 죽인 몬스터에 의해 결정된) 몬스터가 스폰 될 수있는 몬스터의 최대 강도를 결정하는 데 사용될 것이라고 결정하면 다음과 같이 할 수 있습니다 max-monster-strength = player-score / 1000. 그런 다음 a를 무작위로 float또는 그 double사이 0.01.0결과를 곱하십시오.

float monster_power = Math.random();
monster_power *= monster_power; // Multiply result by itself
    // Makes hard monsters less frequent than weak ones
monster_power *= max_monster_strength;

이제 타이머를 무작위로 만들 때 전력 수준을 고려해야합니다. 예를 들어 타이머 결과에 다음 몬스터의 제곱근을 곱할 수 있습니다.

spawn_timer *= math.sqrt(monster_power);

6

현재 설정에는 두 가지 옵션이 있습니다.

  • 적을 더 단단하게
  • 더 많은 적을 스폰하십시오 (한 번에 더 자주 또는 여러 번)

그런 다음 추가 기능으로 더 많은 것 :

  • 적들은 다양한 유형의 피해를 입히기 시작하며 플레이어는 각각에 대해 다르게 방어해야합니다. 예를 들어 원거리 공격, 마법 등
  • 적들은 다른 유형의 피해로부터 스스로를 방어하기 시작합니다. 플레이어는 대응하기 위해 여러 유형의 피해 처리 장치를 구축해야합니다. 예를 들어 플레이어는 화살표 공격과 대포 공격으로 시작합니다. 화살에 대한 저항력이 매우 높은 적이 생성되므로 플레이어는 공격의 균형을 유지해야합니다.

난이도 곡선에 관해서는 실제로 정답이 없습니다. 제대로하려면 많은 테스트와 조정이 필요합니다. 게임이 얼마나 오래 지속되고 얼마나 어려운지에 달려 있습니다. Excel 또는 WolframAlpha와 같은 사이트를 사용하여 다른 함수가 어떤 종류의 곡선을 만드는지 확인하십시오. 지수 증가, 선형 증가 등을 시도하십시오. 자신에게 맞는 것을 찾으십시오.


아이디어에 감사하지만 선택한 답변이 더 필요한 것이라고 생각합니다. 그러나 당신은 분명히 나에게 더 많은 생각을 주었다. 그리고 나는 당신의 대답을
상향 조정했다

2

가변 확률로 고정 된 수의 적 (1)을 스폰하는 대신, 주변을 돌리고 고정 확률로 가변 수의 적을 스폰 할 수 있습니다.

static const double SPAWN_CHANCE_ON_DIFFICULTY_1 = 0.01;

for (int i = 0; i < currentDifficulty; i++) {
   if(Math.random() < SPAWN_CHANCE_ON_DIFFICULTY_1 ){
       spawnEnemy()
   }
}

난이도 1에서 1 % 확률로 틱당 하나의 적을 생성합니다.

난이도 1000에서 최대 1000 명의 적을 스폰합니다. 각각 1 %의 확률로 발생합니다. 즉, 평균 1 틱당 평균 10이 스폰되지만, 다소 줄어 듭니다. 10과 매우 다른 숫자가 한 번에 1000 개까지 생성 될 가능성이 있지만 확률이 어떻게 작용하는지에 따라 발생 가능성은 매우 낮습니다 ( 법칙 : 대수 법칙 비교 ).

행동과 통계가 다른 적을 더 추가 할 때, 더 어려운 적들 중 일부는 더 높은 난이도에서만 시작하고 처음에는 밀도가 낮게 나타나기를 원할 수 있습니다. 이를 위해 현재 난이도에서 빼는 난이도 수정자를 추가 할 수 있습니다. 그렇게하면 난이도에 도달하기 전에 적이 스폰되지 않으며 심지어 처음에는 더 낮은 확률로 스폰됩니다.

for (EnemyType enemyType: allEnemyTypes) {
    for (int i = 0; i < currentDifficulty - enemyType.getDifficulty(); i++) {
        if(Math.random() < enemyType.spawnChance() ){
            spawnEnemy(enemyType);
        }
    }
}

1
이것은 자극적이지만 사용하기 전에 최적화해야합니다. 예를 들어, Math.random ()을 한 번 사용하여 스폰 할 적의 수를 결정할 수 있습니다. 적은 양의 적에게 더 적은 기회를 남기고 싶다면 "정규 분포"를보다 효율적으로 구현할 수 있습니다. stackoverflow.com/questions/2325472/…
AturSams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.