RogueLike 게임에서 다른 속도의 액션을 관리하는 방법은 무엇입니까?


14

RogueLike 게임에서 다른 속도의 액션을 관리하는 방법은 무엇입니까?

내 말은 턴 기반 게임에는 액션과 다른 특성에 따라 다른 "속도"로 행동하는 액터가있을 수 있다는 것입니다. 액터는 속도가 빠르거나 그렇지 않은 경우 다른 액터보다 더 많은 액션 / 턴을 효과적으로 수행합니다.

액터가 언제 행동해야하는지 결정하는 방법 (턴 스케쥴?)

다른 방법이있는 것 같습니다. 알고리즘으로 설명 할 수 있습니까?


7
원하는 기능을 자세하게 설명하면 알고리즘이 명확 해집니다.
Tetrad

Tetrad가 말했듯이 "동작 속도"란 무엇을 의미합니까? 로그 라이크는 일반적으로 턴제이므로 어떻게 적용되는지 알 수 없습니다.
Laurent Couvidou

2
턴 기반 게임에서도 일부 엔티티는 다른 엔티티보다 더 빠르거나 느리게 움직이며 다른 엔티티에 비해 더 많거나 적은 회전을 갖습니다. 나는 질문을 수정했다.
클라 임

3
@Patrick Hughes Nethack은 가장 오래되고 가장 인기있는 로그 라이크 중 하나이며 매우 중요한 속도 특성을 가지고 있습니다. nethackwiki.com/wiki/Speed
Harry Stern

1
@HarryStern 나는 모든 시간을 제대로 연주하지 않았습니까? 즉 몇 가지를 설명 할 수 ... =)
패트릭 휴즈

답변:


12

내 불법적 인 게임 Tyrant에서 나는 액션 포인트와 속도 등급 시스템을 사용했다.

원래:

  • 대부분의 행동은 AP 비용이 100이었습니다
  • 대부분의 생물은 속도가 100입니다

그런 다음 게임 루프는 다음과 같이 진행됩니다.

  • 영웅은 행동을 취합니다.
  • 경과 시간은 다음과 같이 계산됩니다 hero action AP cost * 100 / hero speed
  • 모든 생물에게는 AP와 동등한 AP가 부여됩니다. creature speed * elapsed time / 100
  • 생물은 행동을 취하고 AP가 <= 0이 될 때까지 AP를 뺍니다.
  • 반복

이 시스템은 전체적으로 아주 훌륭하게 작동했습니다.

  • 영웅이 매우 빠른 경우 (아마 마법 속도 보너스로 인해) 개별 생물이 움직일 수 있기 전에 여러 번 움직일 수 있습니다.
  • AP 비용을 변경하여 일부 작업을 다소 비싸게 만들 수 있습니다
  • AP를 빼서 생물을 지연 시키거나 AP를 추가하여 갑자기 일회성 강화할 수 있습니다

이걸로 내 머리를 감싸려고합니다. 당신은 1 명의 선수와 4 명의 선수가있는 경우에. 이것이 마지막 플레이어 스택 경과 시간을 점점 더 많이 만들지 않습니다. 그에게 4 번의 행동과 8 번의 두번째 행동을 연속으로 할 수있게하는 것 ??
Dr.Denis McCracleJizz

4

액션 포인트. 더 빠른 액터가 매번 더 많은 포인트를 얻도록 각 엔티티에 "속도"를 부여하십시오. 각 행동을 완료하기 위해 특정 수의 점수를 취하고 행동을 취할 때 해당 턴의 해당 점수를 빼십시오. 액션이 플레이어가 남은 것보다 더 많은 점수를 얻는 경우, "부분적으로 완료 됨"으로 표시하고 다음 차례에 끝냅니다.


2

행동이 여러 차례 (즉, 50 바로자는 동안) 자라는 것을 의미합니까?

내가 할 일은 player.currentAction 객체를 유지하는 것입니다. currentAction에는 액션에 필요한 턴 수, 액션의 해상도, 액션을 취소하는 상태 목록 (위험, 공격, 과열 등)이 포함될 수 있습니다. 매 턴마다 플레이어 입력을 확인하기 전에 플레이어가 현재 액션 중임을 확인한 다음 다음과 같은 작업을 수행합니다.

if(!player.currentAction.interrupted())
{
 if(player.currentAction.complete() == true)
   {
    player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
    player.currentAction = null;
   }
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else 
{
 player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
 player.currentAction = null;
}

2

당신은 액션 포인트로 갈 수 있지만 그 자체로는 회전이 없지만 틱은 훨씬 작습니다. 모든 액터에 액션 포인트 누적 속도가 있다고 가정합니다 (예 : 틱당 2 AP). AP 10과 같은 행동을 시작합니다. 액터가 행동의 AP 가격을 지불하는 데 걸리는 정도이기 때문에 게임은 5 틱 앞으로 진행합니다.

배우가 여러 명있을 때 이 액션이 실행되는 시점에 누군가 AP 가격을 지불 할 때까지 게임은 틱별로 진행됩니다.

이 접근법은 @mikera와 비슷하지만 부정적인 AP는 없습니다.


생물체의 "의도 된"행동을 저장해야하기 때문에 이것은 훨씬 더 지저분합니다. 어떤 행동은 폭도들이 충분한 점수를 축적하기 전에 변할 수있는 상태에 달려 있습니다.
워릭 앨리슨

어쩌면 그것은 완벽하지는 않지만 실제 생활을 반영합니다. 때리기로 결정했을 때 먼저 흔들고 나서 때립니다. 그래서 그것은 의사 결정 준비 조치입니다. 이것이이 시스템이 허용하는 것입니다. 또한 실제 상황에 따라 차단 동작을 선택할 수 있습니다.
zzandy

나는 다른 방향으로 나아가는 것을 선호합니다. mob는 n- 틱 비용으로 액션을 선택하고 n- 틱이 경과 할 때까지 새로운 액션을 선택할 수 없습니다. 각 틱마다 감소되는 단일 값으로 구현 될 수 있습니다.
kitsu.eb

-1

고해상도 시간

경우 펀치가 400 회전 소요되며, 1000 회전을합니다, 당신이 나를 걷어 전에 적어도 두 번 당신을 펀치 수 있고, 당신이 날 두 번 걷어차 시간에 의해 당신에게 5 회 펀치 수 있습니다.

일이 많이 걸리도록함으로써 일이 얼마나 오래 걸리는지 제어 할 수 있습니다.

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