>

Libtcod와 Python을 사용하여 턴제 전략 게임을 만들고 있습니다. 게임 맵에는 가변 지형이 있으며 각 타일은 5 가지 유형 중 하나 일 수 있습니다.

  • 일반-이동 비용 1
  • 숲-비용 2
  • 강-비용 4
  • 힐-비용 3
  • 산-지나갈 수없는

각 유형마다 고유 한 이동 비용이 있으므로 숲을 통과하는 것보다 평원을 통과하는 데 "이동 지점"이 줄어 듭니다. 주어진 이동 범위/시작 이동 지점으로 유닛이 이동할 수있는 모든 사각형을 표시하고 싶습니다.

Libtcod는 A *와 Dijtskra를 위해 만들어진 길 찾기 기능을 가지고 있으며 지형을 고려하지 않고 주어진 범위에서 모든 사각형을 표시하는 것은 쉽지 않습니다.

그러나 내 길 찾기 알고리즘을 작성하지 않고도 지형 비용을 구현할 수있는 방법을 알 수 없습니다. 내가 알고있는 문서를 보면 다음과 관련이 있습니다.

def path_func(xFrom,yFrom,xTo,yTo,userData) : ... path_new_using_function(width, height, path_func, user_data=0, diagonalCost=1.41) dijkstra_new_using_function(width, height, path_func, user_data=0, diagonalCost=1.41)

그러나 맞춤 기능이 무엇을해야하는지 알 수 없습니다. 문서에 따르면

와이즈 비즈 그러나 dijtskra 알고리즘의 요점이 시작되지 않습니까? 즉, 알고리즘은 각 타일의 가변 비용을 고려한 다음 그에 따라 경로를 작성해야합니다.

지도 자체에는 이미 지형이 있고 이동 비용이 적용되었으므로 해당 데이터를 길 찾기와 연결하는 방법이 필요합니다.

...return the walk cost from coordinates xFrom,yFrom to coordinates xTo,yTo. The cost must be >0.0f if the cell xTo,yTo is walkable. It must be equal to 0.0f if it's not.

  • 답변 # 1

    미학적 보행로 생성을 위해 A * 알고리즘을 직접 구현했습니다. 추가 된 걸음 수를 고려하여 A *에 따르면 가능할 때만 놓인 교량도 포함되었습니다.

    https://github.com/lillian-lemmer/sshrpg/blob/master/plotbrush/mapgen.py#L622

    알다시피, A * 알고리즘을 조작하기 만하면지도의 특정 유형/특성/특성에 대한 임시 점수 (시작 비용)를 늘리는 것입니다.

    라인 660을 보면 tentative_g_score 가 증가합니다  (시작 비용) 물은 8 씩, "대안이 8 ~ 걸음 걸 으면 다리를 지어야 만 다리를 지을 수 있습니다." 데카르트 좌표뿐만 아니라 A * 알고리즘에 타일 데이터를 포함시키는 것은지도의 속성을 기반으로 알고리즘을 조정하는 좋은 방법입니다.

  • 답변 # 2

    내가 아는 한, 당신이 원하는 것 tcod의 내장 된 경로 찾기 기능을 사용하면 매우 효과적으로 달성 할 수 있습니다.

    path_new_using_function  당신의 path_func 를 호출합니다  인접한 셀과 함께 (xFrom, yFrom) 아래 지형에 따라 위에 나열된 값을 반환하도록 할 수 있습니다.  및/또는 (xTo, yTo) .

  • 이전 mysql - # 1052 - 필드 목록의 'bookingschauffeur_req'열이 모호합니다
  • 다음 java - Spring Boot 2 oauth2에서 토큰을 얻는 방법은 무엇입니까?