์ง€๋‚œ๋ฒˆ์— ๊ธธ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“ ๋‹ค ๊ทธ๋Ÿฌ๊ณ  ๊ฐ‘์ž๊ธฐ ์ž ์ˆ˜ํ•ด ๋ฒ„๋ ธ๋Š”๋ฐ


์ˆ˜๋งŽ์€ ์‚ฝ์งˆ๊ณผ ๋ป˜์ง“๊ณผ ๊ทธ๋ฆฌ๊ณ  ๊ฒŒ์ž„ํ•œ๋‹ค๊ณ  ๋‚ญ๋น„ํ•œ ์‹œ๊ฐ„ ๋์— ๊ฒฐ๊ตญ ๋งŒ๋“ค๊ธด ๋งŒ๋“ค์—ˆ๋‹ค.


๋‚จ์˜ ์ฝ”๋“œย ๊ทธ๋ƒฅ ๊ฐ€์ ธ์™€์„œ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ํ›จ์”ฌ ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ ธ์„ ๊ฒƒ์„... ์—„์ฒญ ์‹œ๊ฐ„ ์žก์•„ ๋จน์—ˆ๋„ค.




๊ทผ๋ฐ ๋˜ ๋ณด๋ฉด ๋‚จ ์ฝ”๋“œ๊ฐ€ ์€๊ทผํžˆ ๋งˆ์Œ์— ์•ˆ ๋“œ๋Š” ๋ถ€๋ถ„์ด ๊ผญ ํ•˜๋‚˜์”ฉ ๋‚˜์˜ค์ž–์•„?


๊ทธ๊ฑธ ๊ณ ์น˜๋ ค๋ฉด ๋‚ด๊ฐ€ ์ดํ•ด๋ฅผ ๋ชป ํ•œ ์ƒํƒœ์—์„œ๋Š” ๋ชป ๊ณ ์น˜๊ณ .




์–ด์ฐจํ”ผ ๋‚˜์ค‘์— ๋˜ ์ˆ˜์ •ํ•  ์ผ์ด ์ƒ๊ฒผ์„ ๋•Œ ์ˆ˜์ •ํ• ๋ ค๋ฉด ์•Œ๊ณ ๋Š” ๊ฐ€์•ผ ํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ™์•„์„œ,


๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ์ง ๋‹ค๊ณ  ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋„ค.




์šฐ์„ ์€ A star ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ์ข€ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•  ๊ฑฐ ๊ฐ™์€๋ฐ,ย 


http://egloos.zum.com/cozycoz/v/9748811


์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ์€ ์—ฌ๊ธฐ ๊ฐ€๋ผ.


๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๋„ ์—ฌ๊ธฐ ์„ค๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ์ง  ๊ฑฐ๋ผ์„œ ์ € ๊ธ€์„ ์ฝ๊ณ  ์˜จ ๋†ˆ์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ์ด์•ผ๊ธฐํ• ๊ฑฐ๋‹ค.




0. ์ž๋ฃŒ๊ตฌ์กฐ


ย - ๊ฒŒ์ž„๋งค๋‹ˆ์ €์™€ ๋งต ๊ตฌ์กฐ.


์ผ๋‹จ ๊ฒŒ์ž„ ๋งค๋‹ˆ์ €์—์„œ๋Š” ๋ณ„ ๊ฑฐ ์—†์–ด.ย 


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682e7494cb403442fa0d1e8e707


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdcd5245486cdc402c1c7bdc6a431c2a9368c547c59a8ec8b


๋‚˜๋Š” Grid์—๋‹ค๊ฐ€ ๊ฒŒ์ž„๋ฉ”๋‹ˆ์ € ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•ด ๋†“์•˜๊ณ , public tilemap์—๋‹ค๊ฐ€ ์ €๊ธฐ ๋ณด์ด๋Š” Tilemap์„ ๊ทธ๋ƒฅ ๋“œ๋ž˜๊ทธ ํ•ด์„œ ๋ถ™์˜€์–ด.


๊ทธ ๋‹ค์Œ์— TileNode ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์— ํ•œ๋ฒˆ ๋ณต์‚ฌํ•ด ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ผ์ง€.




viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdcd5245486cdc402c1c7bdc6f239ba469c83aa7cc4347af1


์ตœ๋Œ€ํ•œ ์‹ฌํ”Œํ•˜๊ฒŒ.




๋‚˜๋จธ์ง€๋Š” ์ „๋ถ€ Astar์— ๋•Œ๋ ค๋ฐ•์•˜๋Š”๋ฐ, ๊ฑฐ๊ธฐ ์ฝ”๋“œ๊ฐ€ ์กด๋‚˜ ๋งŽ์Œ.





์ž๋ฃŒ๊ตฌ์กฐ - Astar ์•Œ๊ณ ๋ฆฌ์ฆ˜



viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682ee471bb30d462fabd1e8e707


์™ ์ง€ ๋”ฑ ๋ณด๋ฉด ์šฐ์„ ์ˆœ์œ„ ํ ์ฒ˜๋Ÿผ ์ƒ๊ธด ๋ฌด์—‡์ธ๊ฐ€๋ž‘, ๋งต์„ ๊ทธ๋ฆฐ ๊ฒƒ ์ฒ˜๋Ÿผ ์ƒ๊ธด ๋ฌด์—‡์ธ๊ฐ€๊ฐ€ ๋ณด์ด์ง€?


AStar ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊นŒ๋จน๊ณ  ์˜จ ์‚ฌ๋žŒ์€ ์ € ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€์„œ ์—ฐ๊ฒฐ๋œ ํŽ˜์ด์ง€์—์„œ opened list์™€ closed list๊ฐ€ ๋ฌด์Šจ ๋œป์ธ์ง€๋ฅผ ๋‹ค์‹œ ๋ณด๊ณ  ์˜ค์‹œ๊ณ ...


opened list์— ์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” F๋น„์šฉ(์‹œ์ž‘์  ~ย ํ˜„์žฌ์ง€์ ๊นŒ์ง€์˜ ์ด๋™๊ฑฐ๋ฆฌ + ํ˜„์žฌ์ง€์ ~์ข…๋ฃŒ์ ๊นŒ์ง€ ์ด๋™๊ฑฐ๋ฆฌ)์— ๋”ฐ๋ผ์„œ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ์•ผ.


๊ฒฐ๋ก ์ ์œผ๋กœ F ๋น„์šฉ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋˜๋‹ˆ๊นŒ, ์ ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค F ๋น„์šฉ์— ๋”ฐ๋ผ์„œ ์ •๋ ฌํ•ด ๋‘๋ฉด ํŽธํ•˜๊ฒ ์ง€.


๊ทธ ๋‹ค์Œ์— closed list์— OpenCloseMap์€ย ๋ฐฐ์—ด์ด์•ผ.



viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682e1494eea0a4223a1d1e8e707


์™œ ์—ฌ๊ธฐ์„œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ–ˆ๋ƒ ํ•˜๋ฉด, ๋‹ค์‹œ ์•„๊นŒ ๋ณธ ํŽ˜์ด์ง€(ย http://egloos.zum.com/cozycoz/v/9748811 )๋กœ ๋Œ์•„๊ฐ€์„œ


5,6๋ฒˆ ํ•ญ๋ชฉ์„ ๋ณด๋ฉด "์ธ์ ‘ ์‚ฌ๊ฐํ˜•"์ด๋ผ๋Š” ๋ง์ด ๋ณด์ด์ง€?


๊ดœํžˆ ์šฐ์„ ์ˆœ์œ„ ํ๋‚˜ ๋ฆฌ์ŠคํŠธ๊ฐ™์€ ๊ดด๋ž„ํ•œ ๊ฑฐ ์“ฐ๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š”, ๋น ๋ฅด๊ณ  ์ˆœ์„œ๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉดย 


์ธ์ ‘ํ•œ ์‚ฌ๊ฐํ˜•์„ ์ฐพ๊ธด ํ›จ์”ฌ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—ย ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ–ˆ์–ด.ย 


X,Y๊ฐ’์— +- 1 ํ•˜๋ฉด ๊ทธ๋งŒ์ด์ž–์•„?



์ €๊ธฐ ๋ณด์ด๋Š” NodeInfo๋Š” ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ class๋Œ€์‹ ์— struct๋ฅผ ์ผ์–ด.


ย  ย  public struct NodeInfo

ย  ย  {

ย  ย  ย  ย  public bool isClosed;

ย  ย  ย  ย  public bool isOpened;

ย  ย  ย  ย  public PathNode node;

ย  ย  }


node์— PathNode์˜ ref๋ฅผ ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด์ฉ”์ˆ˜ ์—†์ด PathNode๋Š” class๋ฅผ ์จ์•ผ ํ–ˆ์ง€.ย 



viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682b6184be25e4022f3d1e8e707


์กด๋‚˜ ์“ธ๋ชจ์—†์ด ์  ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ ๊ตฌ์กฐ๊ฐ€ 4๊ฐœ๋‚˜ ๋˜๋Š”๋ฐ,


๊ทธ ์ค‘์— PathNode์™€ NodeInfo๋Š” AStar ๋‚ด๋ถ€์—์„œ๋งŒ ์—ฐ์‚ฐ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๊ณ ,


์‹ค์ œ ํƒ€์ผ๋งต๊ณผ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” Point์™€ TileNode๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์–ด.




1. ๊ธธ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜


์•„๊นŒ๋ถ€ํ„ฐ ๊ณ„์† ์ฐธ๊ณ ํ•œ ํŽ˜์ด์ง€์ธ (ย http://egloos.zum.com/cozycoz/v/9748811 )์—์„œ๋Š” ๋ญ”๊ฐ€ ์–ด๋ ต๊ฒŒ ์„ค๋ช…ํ•ด ๋†จ์–ด.


ํŠนํžˆ 5,6๋ฒˆ ๋‹จ๊ณ„์— ๊ฐ€๋ฉด ์ฃผ์ˆ ์‚ฌ๊ฐ€ ์ˆ ์ณ๋จน๊ณ  ์ฃผ์ˆ  ์“ฐ๋Š” ๊ฒƒ ๋งˆ๋ƒฅ ๋ฌธ์žฅ์˜ ์ฃผ์ˆ ๊ด€๊ณ„๊ฐ€ ์ข†๊ฐ™์ด ๊ผฌ์ด๋ฉด์„œ ์„ค๋ช…์ด ๊ฐœํŒ์ด ๋จ.



๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๊ฑฐ ํ† ๋Œ€๋กœ ์กด๋‚˜ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด ์ค€๋‹ค.


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682e1474db40b4a29abd1e8e707


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682b14849e40a4778aad1e8e707



๋ณด๋ฉด 2,3๋ฒˆ ์—†์ง€? ์ž˜ ๋Œ์•„๊ฐ.



์šฐ์„ ์ ์œผ๋กœ ์•Œ์•„์•ผ ํ•  ๊ฑด opened list์™€ closed list์˜ ๊ฐœ๋…์ด์•ผ.


opened list๋Š” ๋‚ด๊ฐ€ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ๊ฐ ์…€๋“ค.


closed list๋Š” ํƒ์ƒ‰์ด ๋๋‚˜์„œ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์…€๋“ค์ž„.






AStar ๊ธธ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋Œ€๋žต์ ์ธ ๊ตฌ์กฐ๋Š”ย ๋‹ค์Œ๊ณผ ๊ฐ™์•„.


1. ์‹œ์ž‘ ์ง€์ ์„ย ํƒ์ƒ‰ํ•  ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(opened list)์— ๋„ฃ์Œ.


2. ํƒ์ƒ‰ํ•  ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(opened list)์—์„œ F๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ๊ฐ€์žฅ ๋‚ฎ์€ F๋ฅผ ๊ฐ€์ง„ ์…€(โ–ก)์„ ์„ ํƒํ›„ ์ œ๊ฑฐ(pop).

ย  (์ด ์‹œ์ ์—์„œ opened list == null ์ด๋ฉด ํƒ์ƒ‰ ์‹คํŒจ, break)


3.ย โ–ก๋Š” ์„ ํƒ๋˜์—ˆ์œผ๋‹ˆ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ํ•„์š”์—†๋Š” ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(closed list)์— ๋„ฃ์Œ.


4.ย โ–ก์— ์ธ์ ‘ํ•œ ์…€๋“ค(์ƒ,ํ•˜,์ขŒ,์šฐ,(+๋Œ€๊ฐ์„ 4๋ฐฉํ–ฅ)) ์ค‘์—์„œ,ย 

ย  ย ๋ฒฝ์ด ์•„๋‹Œ(์ด๋™ ๊ฐ€๋Šฅํ•œ) && ์—ด๋ ค ์žˆ์ง€ ์•Š์€ && ๋‹ซํ˜€ ์žˆ์ง€ ์•Š์€ ์…€(โ– )๋“ค์„ opened list์— ๋„ฃ์Œ.

ย  ย ์ด ์…€(โ– ) ๋“ค์€ย โ–ก๋ฅผ ๋ถ€๋ชจ๋กœ ๊ฐ€์ง.


5.ย โ– ์— ์ธ์ ‘ํ•œ ์…€๋“ค(์ƒ,ํ•˜,์ขŒ,์šฐ,(+๋Œ€๊ฐ์„ 4๋ฐฉํ–ฅ)) ์ค‘์—์„œ,ย 

ย  ย opened list์— ์žˆ๋Š” &&ย โ–ก๋ณด๋‹ค G ๊ฐ’์ด ์ž‘์€ ์…€(โ˜†)์ด ์žˆ๋‹ค๋ฉด,ย โ– ์˜ย ๋ถ€๋ชจ๋ฅผย โ˜†๋กœ ๋ฐ”๊ฟˆ.


6.ย ํƒ์ƒ‰ํ•  ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(opened list)์— ์ตœ์ข…์ง€์ ์ด ํฌํ•จ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ›„, ํฌํ•จ๋˜์—ˆ๋‹ค๋ฉด ํƒ์ƒ‰ ์„ฑ๊ณต-์ข…๋ฃŒ / ์•„๋‹ˆ๋ผ๋ฉด 2๋ฒˆ๋ถ€ํ„ฐ ๋ฐ˜๋ณต.




๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค๋ช… ๋“ค์–ด๊ฐ„๋‹ค?


1.ย ์‹œ์ž‘ ์ง€์ ์„ย ํƒ์ƒ‰ํ•  ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(opened list)์— ๋„ฃ์Œ.


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682b2474eb1594322a7d1e8e707


ย ์—ฌ๊ธฐ์„œ opened list์—๋งŒ ๋„ฃ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ openclosemap์—๋„ ๋„ฃ์€ ์ด์œ ๋Š”,


ย priority queue์—์„œ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ ํƒ์ƒ‰(์œ„์—์„œ์˜ 5๋ฒˆ ๊ณผ์ •)์„ ํ•˜๊ธฐ์—๋Š” ์—ฐ์‚ฐ ์†๋„๊ฐ€ ํ›จ์”ฌ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์ž„.


๋ฌผ๋ก , G ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋Ÿฌ๊ธฐ์—๋Š” ๋‹ค์‹œ ์ •๋ ฌํ•ด ์ค˜์•ผ ํ•˜๋Š” ๊ณผ์ •์ด ๋˜ ํ•„์š”ํ•ด ์ง€๋ฏ€๋กœ


๊ทธ๋ƒฅ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๋งต์—๋‹ค ๋•Œ๋ ค๋ฐ•๋Š” ์ชฝ์ด ๋‚ซ๋”๋ผ๊ณ .





2. ํƒ์ƒ‰ํ•  ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(opened list)์—์„œ F๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ๊ฐ€์žฅ ๋‚ฎ์€ F๋ฅผ ๊ฐ€์ง„ ์…€(โ–ก)์„ ์„ ํƒํ›„ ์ œ๊ฑฐ(pop).

ย  (์ด ์‹œ์ ์—์„œ opened list == null ์ด๋ฉด ํƒ์ƒ‰ ์‹คํŒจ, break)



viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdcd5245486cdc402c1c7bdc6a36819ff7f7916d7359a301a


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdcd5245486cdc402c1c7bdc6f0317250cf8c0c2740c979cd


viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682ee491de60d4a2dabd1e8e707


์‚ฌ์‹ค push๋‹จ๊ณ„์—์„œ ์ด๋ฏธ sort๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค...





3.ย โ–ก๋Š” ์„ ํƒ๋˜์—ˆ์œผ๋‹ˆ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ํ•„์š”์—†๋Š” ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(closed list)์— ๋„ฃ์Œ.


ํŒจ์Šค.




4.ย โ–ก์— ์ธ์ ‘ํ•œ ์…€๋“ค(์ƒ,ํ•˜,์ขŒ,์šฐ,(+๋Œ€๊ฐ์„ 4๋ฐฉํ–ฅ)) ์ค‘์—์„œ,ย 

ย  ย ๋ฒฝ์ด ์•„๋‹Œ(์ด๋™ ๊ฐ€๋Šฅํ•œ) && ์—ด๋ ค ์žˆ์ง€ ์•Š์€ && ๋‹ซํ˜€ ์žˆ์ง€ ์•Š์€ ์…€(โ– )๋“ค์„ opened list์— ๋„ฃ์Œ.

ย  ย ์ด ์…€(โ– ) ๋“ค์€ย โ–ก๋ฅผ ๋ถ€๋ชจ๋กœ ๊ฐ€์ง.


์ด๊ฑด ์ข€ ์ฝ”๋“œ๊ฐ€ ๊ธธ๋‹ค. ์Šค์ƒท์€ ํŒจ์Šคํ•˜๊ณ ...


public void SetChildren(LinkedList<PathNode> children, Point target, OpenCloseMap mapSpace)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  if (CanBeChild(X - 1, Y, mapSpace))

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  children.AddLast(new PathNode(X - 1, Y, this, target));

ย  ย  ย  ย  ย  ย  ย  ย  mapSpace.Open(children.Last.Value);

ย  ย  ย  ย  ย  ย  }

ย  ย  ย  ย  ย  ย  if (CanBeChild(X + 1, Y, mapSpace))

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  children.AddLast(new PathNode(X + 1, Y, this, target));

ย  ย  ย  ย  ย  ย  ย  ย  mapSpace.Open(children.Last.Value);

ย  ย  ย  ย  ย  ย  }

....


๋Œ€์ถฉ ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์ผ๋Š”๋ฐ, for๋ฌธ์„ ์•ˆ ์“ฐ๊ณ  ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ์ด์œ ๋Š” ์ƒ/ํ•˜/์ขŒ/์šฐ ๋งŒ ํ•  ๊ฒƒ์ธ๊ฐ€, ๋Œ€๊ฐ์„ ๊นŒ์ง€ ํ•  ๊ฒƒ์ธ๊ฐ€์˜ ์ฃผ์„์ฒ˜๋ฆฌ๊ฐ€ ํŽธํ•ด์„œ์•ผ.


ย  ย  ย  ย  private bool CanBeChild(int posX, int posY, OpenCloseMap mapSpace)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  if (mapSpace.IsInMap(posX, posY) && !mapSpace.IsClosed(posX, posY) && !mapSpace.IsOpened(posX, posY)) return true;

ย  ย  ย  ย  ย  ย  else return false;

ย  ย  ย  ย  }


์ข†๋„ ๋ณ„๊ฑฐ ์—†์Œ.ย 





5.ย โ– ์— ์ธ์ ‘ํ•œ ์…€๋“ค(์ƒ,ํ•˜,์ขŒ,์šฐ,(+๋Œ€๊ฐ์„ 4๋ฐฉํ–ฅ)) ์ค‘์—์„œ,ย 

ย  ย opened list์— ์žˆ๋Š” &&ย โ–ก๋ณด๋‹ค G ๊ฐ’์ด ์ž‘์€ ์…€(โ˜†)์ด ์žˆ๋‹ค๋ฉด,ย โ– ์˜ย ๋ถ€๋ชจ๋ฅผย โ˜†๋กœ ๋ฐ”๊ฟˆ.


์ด ๋ถ€๋ถ„์ด ํ•ต์‹ฌ์ด์ง€.


ย  ย  private void SetG()

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  if (Parent != null) G = Parent.G + GetShortestCostToTarget(Parent);

ย  ย  ย  ย  ย  ย  else G = 0;

ย  ย  ย  ย  }

ย  ย  ย  ย  private void SetH(Point target)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  if (target != null) H = GetShortestCostToTarget(target);

ย  ย  ย  ย  ย  ย  else H = 0;

ย  ย  ย  ย  }

ย  ย public int GetShortestCostToTarget(int targetXpos, int targetYpos)

ย  ย {

ย  ย  ย  ย  ย  ย  int Xlength = Math.Abs(targetXpos - X);

ย  ย  ย  ย  ย  ย  int Ylength = Math.Abs(targetYpos - Y);

ย  ย  ย  ย  ย  ย  int diagonalLength = (Xlength > Ylength) ? Ylength : Xlength;

ย  ย  ย  ย  ย  ย  int straightLength = ((Xlength > Ylength) ? Xlength : Ylength) - diagonalLength;


ย  ย  ย  ย  ย  ย  return (Xlength + Ylength) * straightCost;//using only straight

ย  ย  ย  ย  ย  ย  //return straightLength * straightCost + diagonalLength * diagonalCost;(using diagonal)

ย  ย }


๊ทผ๋ฐ ๋ณ„ ๊ฑฐ ์—†์Œ.

F๋Š” ์ „์ฒด ๊ฑฐ๋ฆฌ

G๋Š” ์‹œ์ž‘์ง€์ ~์ด ์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ

H๋Š” ์ด ์ ~์ข…๋ฃŒ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ(์˜ˆ์ƒ๊ฐ’)์ž–์•„.


G๋Š” ๋ถ€๋ชจ์˜ G ๊ฐ’์—๋‹ค๊ฐ€, ๋ถ€๋ชจ๊นŒ์ง€์˜ ๊ฐ€์žฅ ์งง์€ ๊ฑฐ๋ฆฌ๋ฅผ ๊ทธ๋ƒฅ ๋”ํ•ด ์ฃผ๋ฉด ๋‹ค์•ผ. ์™œ๋ƒํ•˜๋ฉด ๋ถ€๋ชจ๋Š” ํ•ญ์ƒ ๋ฐ”๋กœ ์˜†์— ์žˆ๋Š” ์‚ฌ๊ฐํ˜•์ด๊ฑฐ๋“ .

์ƒ์ˆ˜๊ฐ’ ๋Œ€์‹ ์— ๊ฐ€์žฅ ์งง์€ ๊ฑฐ๋ฆฌ๋ฅผ ๋”ํ•ด ์ค€ ์ด์œ ๋Š”, ์ƒํ•˜์ขŒ์šฐ๋งŒ ์“ธ ๊ฒƒ์ธ๊ฐ€, ๋Œ€๊ฐ์„ ๊นŒ์ง€ ์“ธ ๊ฒƒ์ธ๊ฐ€์— ๋”ฐ๋ผ์„œ ๊ณ„์‚ฐ ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ด์•ผ.




6.ย ํƒ์ƒ‰ํ•  ์…€๋“ค์ด ๋ชจ์ธ ๋ฆฌ์ŠคํŠธ(opened list)์— ์ตœ์ข…์ง€์ ์ด ํฌํ•จ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ›„, ํฌํ•จ๋˜์—ˆ๋‹ค๋ฉด ํƒ์ƒ‰ ์„ฑ๊ณต-์ข…๋ฃŒ / ์•„๋‹ˆ๋ผ๋ฉด 2๋ฒˆ๋ถ€ํ„ฐ ๋ฐ˜๋ณต.



viewimage.php?id=2abcdd23dad63db0&no=29bcc427bd8677a16fb3dab004c86b6fad513288d8b12350365821b430ef7a6ae98cdc917404e0c8c009cfc3bca0a63b0682e41819e402162cf7d1e8e707


4,5,6์€ ์„ค๋ช…์„ ์กด๋‚˜ ๋Œ€์ถฉ๋Œ€์ถฉ ํ•œ ๊ฑฐ ๊ฐ™์€๋ฐ, ๊ทธ๋Ÿด ์ˆ˜ ๋ฐ–์— ์—†๋Š”๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๋Š” ํฌ๊ฒŒ ๋ณ„ ๊ฑฐ ์—†์—ˆ์ง€๋งŒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ณผ์ •์ด ํž˜๋“ค์—ˆ๊ฑฐ๋“ .


๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์„ ํƒํ•œ ๊ฑธ ์ ์šฉ์‹œํ‚ค๋Š” ๋„์ค‘์— ์—๋Ÿฌ๊ฐ€ ์ข€ ํ„ฐ์กŒ์—ˆ๊ณ .



๋™์˜์ƒ ์ž˜ ์˜ฌ๋ผ๊ฐ”๋‚˜ ๋ชจ๋ฅด๊ฒ ๋„ค. ์ด๋งŒ ์ž์•ผ์ง€.ย 


๋‹ค์Œ์—๋Š” ์Šฌ์Šฌ ๋งต ์ €์žฅ์šฉ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋งต ์—๋””ํ„ฐ UI๋ฅผ ๋งŒ๋“ค์–ด์•ผ๊ฒ ๋„ค.