> 프로그래밍
이동 평가 및 공격 조합 관리와 함께 손상 맵은 LeekWars에서 매우 중요합니다. 주요 목표는 차례가 끝날 때 덜 위험한 상자로 후퇴할 수 있도록 적에 따라 각 상자의 위험 수준을 평가할 수 있는 것입니다. 가장 쉬운 방법은 연관 배열을 만드는 것입니다. 이를 위해 여러 알고리즘이 가능합니다.
이것은 일반적으로 위험 평가 알고리즘을 만들 때 가장 먼저 떠오르는 아이디어입니다. 아이디어는 다음과 같습니다.
/* -접근 가능한 각 셀에 대해
-상대방의 접근 가능한 각 셀에 대해 -각 상대의 무기 -그가 자신의 세포에서 내 세포를 쏠 수 있다면 내 셀에 "위험 점수" 추가 */
점수 선택은 알고리즘의 필수적인 부분입니다. "+1"을 입력하거나 잠재적으로 입힐 수 있는 피해를 계산할 수 있습니다. ... 이 평가를 구체화하는 방법은 플레이어 수만큼 많습니다 😉
이 알고리즘의 가장 큰 문제는 연산에 극도로 욕심이 많다는 것입니다! 따라서 일반적으로 이를 매우 빠르게 최적화해야 합니다.
가장 먼저 해야 할 일은 리크가 "충돌"하는 것을 방지하는 것입니다... 따라서 코드 어딘가에서 getOperations()에 대한 테스트를 수행하고 작업 수가 다음과 같은 경우 루프를 종료해야 합니다. 한계: top험에 대한 부분적인 평가만 받을 수 있지만 부추는 여전히 최소한으로 움직일 수 있습니다 😉
최적화 자체의 경우 접근 방식을 안내해야 하는 첫 번째 원칙 중 하나는 무엇보다도 루프에서 동일한 작업을 여러 번 반복하지 않는 것입니다. 이 경우 테이블에 항목을 준비한 다음 기억하는 것이 좋습니다. 예를 들어 "위험 점수"를 계산하는 가장 안쪽 루프에서 getStrength(Enemy) 호출을 고수하면 해당 함수를 수천 번 다시 호출하게 됩니다. 아이디어는 적의 강도를 한 번만 계산하고 내부 루프를 수행하기 전에 변수에 저장하는 것입니다. 당신은 이미 수십만 거래를 벌기 시작할 것입니다! 따라서 루프 변수에 의존하지 않고 "외부" 루프에만 의존하는 "내부" 루프의 요소를 찾으십시오. 그런 다음 이러한 요소를 해당 루프로 추적할 수 있습니다.
알고리즘이 여전히 비싸다면 최적화를 위한 또 다른 심미적인 방법은 이 평가의 해상도를 낮추는 것입니다. 예를 들어, 모든 접근 가능한 사각형(귀하의 사각형 및/또는 상대의 사각형)을 테스트할 수 없지만, 예를 들어 짝수의 이동 포인트가 필요한 사각형만 테스트할 수 있습니다. 그런 다음 이웃 사각형의 값을 보간하여 얻은 간격을 "충분히" 채웁니다(이웃의 평균, 이웃의 최대값, 두 선 사이의 평균의 최대값 등). 이 접근 방식은 덜 정확하지만 짝수 PM의 예에서 첫 번째 알고리즘보다 약 4배 적게 소비합니다.
최적화를 계속하려면 일반적으로 첫 번째 라운드에서 재계산해야 하고 절대 변경되지 않는 특정 항목을 큰(또는 많은) 배열에 저장하거나 특정 값을 업데이트하는 사전 계산에 대해 생각해야 합니다. 각 턴(이 예에서는 적 부추의 강도).
이 알고리즘은 전투 시작 시 한 번 위험 지도를 미리 계산합니다. 저렴하고 훨씬 덜 정확하지만 일반적으로 위험한 전투 맵 영역 목록을 빠르게 얻을 수 있습니다. 턴 시작 시 전투 맵의 각 셀에 대해 적이 가지고 있는 무기로 총을 쏠 수 있는 모든 셀을 평가하는 것으로 구성됩니다. 그러면 다른 사각형은 200개의 다른 사각형이 도달할 수 있는 사각형보다 훨씬 낮은 점수를 받게 됩니다! "위험도가 낮은" 지역으로 후퇴하고 적은 "위험도가 높은" 지역에 머물게 하는 것이 현명할 수 있습니다.
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.