SRPG에서 적AI의 길찾기가 진짜 핵심인듯 합니다.
저는 알만툴에서 기본으로 제공해주는 기능을 활용하는 쪽으로 AI를 만들었습니다.
길찾기에 사용하는 이벤트 이름을 먼저 소개하겟습니다.
[AI제어실]
[AI이동]
[최단거리표적찾기]
[표적업데이트]
[그방향에있는지형값은]
입니다.
-------------------------------------------------------------------------------------------------------
(주의!) 대입은 '=' 로 표시하겠습니다.
****[AI제어실]****************************************************************
********(주의!) 글이 복잡해 지는것을 막기 위해 현재 이벤트는 적군01전용으로 만들었습니다.
화면의 고정
변수: 현재 움직일 ID = 적군01ID
변수: 이동력 = 적군01이동력
반복처리
조건분기:이동력이 0 일때
반복중단
그 외의 경우 :
이벤트 불러오기 : [AI이동]
조건분기 끝
반복처리 끝
**적군01 행동이 끝났다는 표시를 한다아..
*******************************************************************************
*****[AI이동]*******************************************************************
이벤트 불러오기 : [최단거리표적찾기]
이벤트 불러오기 : [표적업데이트]
이벤트불러오기 : 현재이벤트 페이지[ 2 ]
이벤트 불러오기 : [그방향에있는지형값은?]
조건분기 : 결과가 0 일 때 ***원래는 적군01인지 누군지 확인을 해야하지만 복잡해지니까 적군01전용으로 쓸게여.
동작지정: [적군01] 한걸음 앞으로
***이동이 완료될때 까지 적절히 대기. 방법은 각자 취향대로.
변수: 이동력 -1
이벤트 처리 중단
조건분기 끝
조건분기 : 결과가 1 일 때 ***막혔을 때 라는 뜻이죠. 1을 이동불가로 전에 쓴 글에서 약속했죠?
조건분기 : 막혔을때갈곳1좌2우 가 1 일 때 ***이 변수가 1이면 왼쪽으로 밀고가자, 2면 오른쪽으로!
동작지정: [적군01] 좌로 90 회전
***회전할 동안 대기
***적군01이 보고있는 방향을 [변수:보는방향]에 대입한다.
이벤트 불러오기 : [그방향에있는지형값은?]
조건분기 : 결과 가 0 일 때
동작지정: [적군01] 일보 전진
***이동이 완료될때 까지 적절히 대기. 방법은 각자 취향대로.
변수: 이동력 -1
이벤트 처리 중단
조건분기 끝
조건분기 : 결과 가 1 일 때 ***그 외의 경우로 처리하지 않은 이유는 나중에 공격이벤트를 위해서.
변수: 막혔을 때 갈 곳 = 2 ***왼쪽으로는 가망이 없으니 오른쪽으로! 라는 뜻.
이벤트 처리 중단
조건분기 끝
조건분기 끝
조건분기 : 막혔을때갈곳1좌2우 가 2 일 때
동작지정: [적군01] 우 로 90 회전
***회전할 동안 대기
***적군01이 보고있는 방향을 [변수:보는방향]에 대입한다.
이벤트 불러오기 : [그방향에있는지형값은?]
조건분기 : 결과 가 0 일 때
동작지정: [적군01] 일보 전진
***이동이 완료될때 까지 적절히 대기. 방법은 각자 취향대로.
변수: 이동력 -1
이벤트 처리 중단
조건분기 끝
조건분기 : 결과 가 1 일 때
변수: 막혔을 때 갈 곳 = 1
이벤트 처리 중단
조건분기 끝
조건분기 끝
조건분기 끝
******************************************************************************
****페이지 2 ********************************
조건분기 : 현재 움직일 ID 가 적군01ID 일때 ******제가 적은 예제에서는 적군01 전용이라서 02는 안적을게여.
동작지정: [적군01] 주인공을 향한다
***적군01이 보고있는 방향을 [변수:보는방향]에 대입한다.
조건분기 끝
********************************************
***[최단거리표적찾기]***********************************************************
조건분기 : 현재 움직일 ID 가 적군01ID 일때
변수:사냥꾼X = 적군01X
변수:사냥꾼Y = 적군01Y
조건분기 끝
조건분기 : 현재 움직일 ID가 적군02ID 일때
변수:사냥꾼X = 적군02X
변수:사냥꾼Y = 적군02Y
조건분기 끝
***이런식으로 원하는 갯수만큼 만든 후
***원의 방정식 이용하는 느낌으로 지금 활동중인 표적들과 거리를 잽니다.
***그리고 측정한 거리를 [변수:기록]에 저장하고
***신기록이 나오면 신기록 소유자(표적)의 ID를 [변수:먹이ID]에 대입합니다.
******************************************************************************
***[표적업데이트]***************************************************************
조건분기 : 표적ID가 아군01 ID 일 때
*** 아군01의 위치로 주인공을 이동시킵니다.
조건분기 끝
조건분기 : 표적ID가 아군02 ID 일 때
*** 아군01의 위치로 주인공을 이동시킵니다.
조건분기 끝
***이런식요.
******************************************************************************
*****[그방향에있는지형값은?]****************************************************
변수: 목표X = 사냥꾼X
변수: 목표Y = 사냥꾼Y
조건분기 : 보는방향이 2 일 때 ***아래를 볼 때
변수: 목표Y +1
조건분기 끝
조건분기 : 보는방향이 4 일 때 ***왼쪽을 볼 때
변수: 목표X -1
조건분기 끝
조건분기 : 보는방향이 6 일 때 ***오른쪽을 볼 때
변수: 목표X +1
조건분기 끝
조건분기 : 보는방향이 8 일 때 ***위를 볼 때
변수: 목표Y -1
조건분기 끝
***1부에서 설명했던 공식 x+7y+1=좌표에 해당하는 변수번호 를 이용해서
***목표X, 목표Y로 계산을 합니다.
***조건분기로 그 해당하는 변수의 값을 [변수:결과]에 대입합니다!
*******************************************************************************