카테고리에서; 프로그래밍에 올릴까 했는데..아이디어에 가깝지 않은가해서 여기에 올립니다.
구창도에서 올렸던것인데, 약간 정리해서 개념중심으로 올려볼께요 ㅇㅁㅇ
-----------------------------------------------------------------------------------------------
안녕하세요; 처음으로 강좌를 올려보는 성령의분노입니다;
아직 이 강좌가 없는듯 해서 SRPG의 이동경로에 대해 설명해보도록 하겠습니다;;
1. 영걸전에서 개념부터 배워보자.
삼국지 영걸전 기억나시나요? SRPG의 이동경로에 대한 알고리즘을 벌써 접하셨을지도 모르지만, 이미 영걸전에서부터 사용되온 알고리즘이 지금도 뿌리속에 내재되어있지요.
(다른 강좌에서도 영걸전을 주로 예를 들곤 합니다 )
이동력4의 유비가 있습니다( 있다고합시다; ).
우선 장애물이 없는 평원에 유비라는 유닛이 서있습니다 ( 숫자4의 위치 ).
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1 ( 약간 입체적으로 기울어졌네요-_-; )
중앙에 있는 유비( 4 )에서 거리차만큼 숫자를 제하면서 1까지 채워보면 이것이 유비의 이동범위가 되는군요( 이동력 4라는 것은 힘닿는데 까지 달리면 4칸간다는 소리죠 )
응용) 장애물(x) 有
1
x 2 1
1 2 3 x x
x x 3 4 3 2 1
x 2 3 2 1
1 2 x
1
=>
1
2 1
1 2 3
3 4 3 2 1
2 3 2 1
1 2
1 ( 숫자라서 분위기가 안나는군요; )
이런식으로 이동범위는 정해지게 되는겁니다.
코딩을 해볼까요?
2차원 배열을 이용한 맵생성을 합니다.
우선 가로 20칸 세로 30칸의 맵을 만들겠습니다.
Dim Map(20, 30) As Long
그리고 다중루프(for문)를 써, 장애물에는 -99같은 음수를 대입해주시고, 나머지칸은 0으로 대입해주세요.
자 배열에 위와 같은 숫자경로를 새겨봅시다.
10, 10에 유비를 놓습니다. 어떻게 놓느냐 하면
Map(10,10) = 4 유비의 이동력를 적는거죠.
For L = 4 To 2 Step -1 유비의 위치에서 이동력이 1될때까지 돌리는겁니다.
For J = 1 To 20
For K = 1 To 30 모든칸을 돌기 위해서이죠.
If Map(J, K) = L Then 현재 L값을 가진칸을 찾는다면.. ( 처음 돌 때는 유비가 있는곳 )
If Map(J - 1, K) = 0 And J - 1 > 0 And K > 0 And J - 1 < 21 And K < 31 Then Map(J - 1, K) = L - 1
If문의 조건은 옆에 칸에 장애물이 없는지 ( 그 자리의 배열값이 0이면 장애물이 없는거죠? ), 그리고 맵사이즈를 벗어나지 않는지 확인하는 것입니다.
현재 유비의 칸이 선택되었으니( L = 4 ), 상하좌우에는 3을 대입시켜주어야겠죠? ( 위의 그림을 보면.. )
그래서 첫번째 for문에서는 L이 4이므로 상하좌우에 L - 1 ( 즉, 3 )을 대입한 것입니다.
( 우선은 L의 첫번째 루프를 기준으로 설명하겠습니다 )
그리고 그 칸에 이동범위칸를 찍어주면 되겠지요 ( 보통은 파란색 반투명으로 표시되는 ).
J + 1, K 상
J, K + 1 우
J, K - 1 좌 .. 도 위에 같이 해주시면 됩니다.
이런 순서로 찍히게 되겠지요(l의 for문이 도는 순서로)
2
3 2 3 2
4 3 4 3 2 3 4 3 2
3 2 3 2
2
L = 4 L = 3
이렇게 계속 돌면 1까지 가게 되고 Map에 4 ~ 1까지 배열에 입력이 될것입니다.
화면에도 그에 대응해서 이동범위칸 그림이 찍힐 것이고요 ( DX면 Bltfast를 이용하겠죠? )
일단 강좌는 여기서 끝입니다.
두서업고 계획없이 쓰니까 괜히 글만 길어지고 잘 전달이 안되네요;
미약한 실력으로 강좌를 하려니까 부끄럽지만, 도움이 되시는 분 있기를 바랍니다.
다음에는 실제로 그 이동범위로 이동을 하는 법에 대해서 다루도록 하겠습니다. 다음 강좌가 실제로 제목
에 부합되는 이동경로가 되겠습니다.
감사합니다.
구창도에서 올렸던것인데, 약간 정리해서 개념중심으로 올려볼께요 ㅇㅁㅇ
-----------------------------------------------------------------------------------------------
안녕하세요; 처음으로 강좌를 올려보는 성령의분노입니다;
아직 이 강좌가 없는듯 해서 SRPG의 이동경로에 대해 설명해보도록 하겠습니다;;
1. 영걸전에서 개념부터 배워보자.
삼국지 영걸전 기억나시나요? SRPG의 이동경로에 대한 알고리즘을 벌써 접하셨을지도 모르지만, 이미 영걸전에서부터 사용되온 알고리즘이 지금도 뿌리속에 내재되어있지요.
(다른 강좌에서도 영걸전을 주로 예를 들곤 합니다 )
이동력4의 유비가 있습니다( 있다고합시다; ).
우선 장애물이 없는 평원에 유비라는 유닛이 서있습니다 ( 숫자4의 위치 ).
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 2 1
1 2 1
1 ( 약간 입체적으로 기울어졌네요-_-; )
중앙에 있는 유비( 4 )에서 거리차만큼 숫자를 제하면서 1까지 채워보면 이것이 유비의 이동범위가 되는군요( 이동력 4라는 것은 힘닿는데 까지 달리면 4칸간다는 소리죠 )
응용) 장애물(x) 有
1
x 2 1
1 2 3 x x
x x 3 4 3 2 1
x 2 3 2 1
1 2 x
1
=>
1
2 1
1 2 3
3 4 3 2 1
2 3 2 1
1 2
1 ( 숫자라서 분위기가 안나는군요; )
이런식으로 이동범위는 정해지게 되는겁니다.
코딩을 해볼까요?
2차원 배열을 이용한 맵생성을 합니다.
우선 가로 20칸 세로 30칸의 맵을 만들겠습니다.
Dim Map(20, 30) As Long
그리고 다중루프(for문)를 써, 장애물에는 -99같은 음수를 대입해주시고, 나머지칸은 0으로 대입해주세요.
자 배열에 위와 같은 숫자경로를 새겨봅시다.
10, 10에 유비를 놓습니다. 어떻게 놓느냐 하면
Map(10,10) = 4 유비의 이동력를 적는거죠.
For L = 4 To 2 Step -1 유비의 위치에서 이동력이 1될때까지 돌리는겁니다.
For J = 1 To 20
For K = 1 To 30 모든칸을 돌기 위해서이죠.
If Map(J, K) = L Then 현재 L값을 가진칸을 찾는다면.. ( 처음 돌 때는 유비가 있는곳 )
If Map(J - 1, K) = 0 And J - 1 > 0 And K > 0 And J - 1 < 21 And K < 31 Then Map(J - 1, K) = L - 1
If문의 조건은 옆에 칸에 장애물이 없는지 ( 그 자리의 배열값이 0이면 장애물이 없는거죠? ), 그리고 맵사이즈를 벗어나지 않는지 확인하는 것입니다.
현재 유비의 칸이 선택되었으니( L = 4 ), 상하좌우에는 3을 대입시켜주어야겠죠? ( 위의 그림을 보면.. )
그래서 첫번째 for문에서는 L이 4이므로 상하좌우에 L - 1 ( 즉, 3 )을 대입한 것입니다.
( 우선은 L의 첫번째 루프를 기준으로 설명하겠습니다 )
그리고 그 칸에 이동범위칸를 찍어주면 되겠지요 ( 보통은 파란색 반투명으로 표시되는 ).
J + 1, K 상
J, K + 1 우
J, K - 1 좌 .. 도 위에 같이 해주시면 됩니다.
이런 순서로 찍히게 되겠지요(l의 for문이 도는 순서로)
2
3 2 3 2
4 3 4 3 2 3 4 3 2
3 2 3 2
2
L = 4 L = 3
이렇게 계속 돌면 1까지 가게 되고 Map에 4 ~ 1까지 배열에 입력이 될것입니다.
화면에도 그에 대응해서 이동범위칸 그림이 찍힐 것이고요 ( DX면 Bltfast를 이용하겠죠? )
일단 강좌는 여기서 끝입니다.
두서업고 계획없이 쓰니까 괜히 글만 길어지고 잘 전달이 안되네요;
미약한 실력으로 강좌를 하려니까 부끄럽지만, 도움이 되시는 분 있기를 바랍니다.
다음에는 실제로 그 이동범위로 이동을 하는 법에 대해서 다루도록 하겠습니다. 다음 강좌가 실제로 제목
에 부합되는 이동경로가 되겠습니다.
감사합니다.