E D R , A S I H C RSS

Mine Finder

1. ์†Œ๊ฐœ

  • ์ด๋ฆ„ : Mine Finder
  • ์ฐธ์—ฌ : ๊ฐ•์„์ฒœ (99, 1002)
  • ๊ธฐ๊ฐ„ : 2002. 2. 10 ~ 2.23 (๋ฌธ์„œํ™” ์ž‘์—…๊ณผ์ • ํฌํ•จํ•ด์„œ.. 2์ฃผ ๊ฑธ๋ฆด๋“ฏ.)
  • ๋ชฉํ‘œ : ์œˆ๋„์šฐ์˜ ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์ง์ ‘ ๋Œ€ํ™”, ์ง€๋ขฐ๋ฅผ ์Šค์Šค๋กœ ์ฐพ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ ๋‹ค.
  • ๊ฐœ๋ฐœํˆด : Visual C++ 6.0, cppunit 1.62, SPY++, ์ง€๋ขฐ์ฐพ๊ธฐ 2000, 98๋ฒ„์ „
  • ๋™๊ธฐ : ์‹ฌ์‹ฌํ•ด์„œ. ์†๋ชฉ์ €๋ ค์„œ. -_-;
  • ๊ฐœ๋ฐœ๋ฐฉ๋ฒ• : XP ์˜ ์ผ๋ถ€๋ถ„ ์†Œํญ์ ์šฉ.
  • ์‹œ์Šคํ…œ : ๋“€๋ก  1G 256RAM WIN 2000

2. ๊ณ„ํš

2.1. schedule

ํŠน๋ณ„ํžˆ ์žก์€๋ฐ” ์—†์Œ. --;
2์›” 16์ผ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์™„๋ฃŒ. 2์›” 23์ผ๊นŒ์ง€ ๋ฌธ์„œํ™” ์™„๋ฃŒ.
  • ๋ชฉํ‘œ์ˆ˜์ • - ๋œปํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ๋กœ. -_-; 2์›” 28์ผ. ๋ง์ผ๊นŒ์ง€๋Š” ์–ด๋–ป๊ฒŒ๋“ ! --;

2.2. ๊ธฐ๋Šฅ spec

  • ์œˆ98, ์œˆ2000 ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ ์ง€์› (ํ˜„์žฌ 2000 ์€ ์ œ๋Œ€๋กœ ์ง€์›. 98 ์ชฝ ํ˜ธํ™˜์„ฑ ๋†’์ด๊ธฐ์ค‘)
  • ์ถ”ํ›„ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค์งˆ ๊ฒฝ์šฐ '๋ˆˆ' ๋ถ€๋ถ„๊ณผ '์ง€๋Šฅ' ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋นผ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ถ๋ฆฌ.
    • '๋ˆˆ' ํ•ด๋‹น ๋ถ€๋ถ„ - ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋ถ€ํ„ฐ ๋น„ํŠธ๋งต์„ ์–ป์–ด ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฃจํ‹ด ๊ด€๋ จ๋ถ€. ํ˜„์žฌ bitmap 1:1 matching ๋ถ€๋ถ„์ด ๊ฐ€์žฅ ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ๋ถ€๋ถ„์œผ๋กœ ํ™•์ธ๋จ์— ๋”ฐ๋ผ, ๊ฐ€์žฅ ๊ฐœ์„ ํ•ด์•ผ ํ•  ๋ถ€๋ถ„.
    • '์ง€๋Šฅ' ํ•ด๋‹น ๋ถ€๋ถ„ - ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ํ•ด์•ผ ํ•  ํ–‰๋™์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€๋ถ„. ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋Š” ์œ ํ•œ์ƒํƒœ๋จธ์‹ ์„ ๋ˆ๋‹ค.
      • ์ถ”ํ›„ DP ๋กœ ํ™•์žฅ๋œ๋‹ค๋ฉด StrategyPattern ๊ณผ StatePattern ๋“ฑ์ด ์ด์šฉ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ. ์ด๋Š” ์ถ”ํ›„ Refactoring ํ•ด ๋‚˜๊ฐ€๋ฉด์„œ ์ƒ๊ฐํ•ด๋ณผ ์‚ฌํ•ญ. ํ”„๋กœ๊ทธ๋žจ์ด ์ข€ ๋” ์ปค์ง€๊ณ  Refactoring ์ด ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด DLL ๋ถ€๋ถ„์œผ๋กœ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์„๋“ฏ. ('๋น ์ ธ๋‚˜์™€์•ผ ํ•  ์ƒํ™ฉ์ด ์ƒ๊ธธ๋“ฏ' ์ด ๋” ์ •ํ™•ํ•˜์ง€๋งŒ. -_-a)

3. ์ง„ํ–‰ ์ƒํ™ฉ

  • 2์›” 10์ผ
    • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์œˆ๋„์šฐ ํ•ธ๋“ค์„ ์–ป๊ณ  ํ•ด๋‹น ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด์–ด์„œ ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ํ•˜๋Š” ๋ฃจํ‹ด ๊ด€๋ จ SpikeSolution. (์•„.. UnitTest ์ฝ”๋“œ ๋„ฃ๊ธฐ๊ฐ€ ์• ๋งคํ•ด์„œ ์•ˆ๋„ฃ์—ˆ๋‹ค. ๊ถ๋ฆฌํ•ด๋ด์•ผ ํ•  ๋ถ€๋ถ„๊ฐ™๋‹ค.)
    • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์œˆ๋„์šฐ ํ•ธ๋“ค์„ ์–ป์€๋’ค DC๋ฅผ ์–ป์€ํ›„ ํ™”๋ฉด ์บก์ณ. ๊ทธ๋ฆฌ๊ณ  ์บก์ณํ•œ ๋น„ํŠธ๋งต์„ ๊ทผ๊ฑฐ๋กœ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฃจํ‹ด ๊ด€๋ จ SpikeSolution
  • 2์›” 11์ผ
    • Main Design, Algorithm 1์ฐจ ์™„์„ฑ. ์–ด๋А์ •๋„ Refactoring์˜ ์ถ”๊ตฌ.
  • 2์›” 13์ผ
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™” ๊ถ๋ฆฌ. 3๊ฐ€์ง€์ •๋„ ๋Œ€์•ˆ ๋ชจ์ƒ‰.
    • 98 ๋ฒ„์ „์˜ ์ง€๋ขฐ์ฐพ๊ธฐ์™€ 2000 ๋ฒ„์ „์˜ ์ง€๋ขฐ์ฐพ๊ธฐ๊ฐ€ ๋น„ํŠธ๋งต๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ฌ๋ผ์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ์–ด๋А์ •๋„ ํ•ด๊ฒฐ.
    • ํ˜„์žฌ ์†๋„
      • Begineer mode ์ตœ๊ณ ๊ธฐ๋ก 1์ดˆ, ํ‰๊ท  4-7์ดˆ.
      • Middle mode ์ตœ๊ณ ๊ธฐ๋ก 21์ดˆ, ํ‰๊ท  30~50์ดˆ ์•ˆ์ชฝ.
      • Expert mode ์ตœ๊ณ ๊ธฐ๋ก 151์ดˆ. ๋‹จ, ๊นฐ ์ˆ˜ ์žˆ๋Š” ํ™•๋ฅ  ๋‚ฎ์Œ. -_-; ์•„. ํ™•๋ฅ ๋†’์€ ์ฐ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•˜๋‹ค๋Š”. --;
  • 2์›” 26์ผ
    • ๋„ํ๋จผํŠธ ์ถ”๊ฐ€์ค‘. (์ผ์ฃผ์ผ์„ ํ‘ธ์šฑ ๋†€์•˜๋‹ค๋Š”. -_-;)
  • 2์›” 27์ผ
    • Expert mode 51์ดˆ, Middle mode 11์ดˆ ๊ธฐ๋ก. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๊ด€์  ์žก์Œ. (ํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ๊นฐ ์ˆ˜ ์žˆ๋Š” ํ™•๋ฅ  ๋‚ฎ์Œ)
  • 2์›” 28์ผ, 3์›” 1์ผ
    • Expert mode ๊นฐ ์ˆ˜ ์žˆ๋Š” ํ™•๋ฅ ์„ ๋†’์ž„. ์ตœ์ ํ™”๋‚ด์—์„œ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์€ ๋” ํž˜๋“ค๋“ฏ. 98๊ณผ์˜ ํ˜ธํ™˜์„ฑ ํ–ฅ์ƒ๋ฌธ์ œ ํ•ด๊ฒฐ์ดํ›„ ์ข…๋ฃŒ ์˜ˆ์ •.
  • 3์›” 1์ผ ์ข…๋ฃŒ.

4. ์ข…๋ฃŒํ›„ ๊ฐ์ƒ๊ธฐ(?)

  • ๋””์ž์ธ ๋ถ€๋ถ„์—์„œ์˜ TFP์˜ ์ค‘์š”์„ฑ์„ ๋†“์นœ๊ฒƒ์ด ํ™”๊ทผ์ด ๋˜์—ˆ๋‹ค๋Š”. -_-; ์ถ”ํ›„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ€๋ถ„์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด์„œ TFP๋ฅผ ๊ฒŒ์„๋ฆฌ ํ•œ ์ ๊ณผ ํ”„๋กœ๊ทธ๋žจ ๋Œ์•„๊ฐ„๋‹ค๋Š” ์ ์—์„œ์˜ ์ฆ๊ฑฐ์›€์— ์‹œ๊ฐ„๋‚ญ๋น„๊ฐ€ ์ข€ ์‹ฌํ–ˆ๋‹ค๋Š”..~
  • ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ๋ฌธ์ œ์˜€๋‹ค๋ฉด ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๋ฉด ์•ˆ๋  ์ผ์ด์ง€๋งŒ. -_-; ์žฅ๋‚œ๊ฐ ๊ฐ€์ง€๊ณ  ๋…ธ๋Š” ๊ธฐ๋ถ„์œผ๋กœ ํ•œ ์ผ์ด์˜€๋˜์ง€๋ผ.~ ๊ทธ๋ฆฌ ๋ฌด๊ฒŒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ํ•œ ์ผ์ด ์•„๋‹Œ ๊ด€๊ณ„๋กœ ํŠน๋ณ„ํžˆ ๋‚˜์˜์ง„ ์•Š์•˜๋‹ค.
  • ํ˜„์‹ค์—์„œ ๊ฐ€์ƒ์œผ๋กœ ๋‹ค์‹œ ํ˜„์‹ค๋กœ. ์•”ํŠผ '1002 ๋ณด๊ธฐ์— ์ข‹์•˜๋”๋ผ'. ์—ฌ์ „ํžˆ ๋ฉ์ฒญํ•œ ๋„˜์ด๊ณ  ์ฃผ์‚ฌ์œ„ ๋˜์ง€๋Š” ๋„˜์ด์ง€๋งŒ (์˜คํ˜ธ.. Random Open ๋•Œ ์ฃผ์‚ฌ์œ„ ๋Œ๋ฆฌ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„ฃ์„๊นŒ. ^^;)
  • ์ง€๊ธˆ์ฏค ๋‹ค์‹œ ์งœ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด TFP๋ฅผ ์ข€ ๋” ์ œ๋Œ€๋กœ ์ถ”๊ตฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ๋„ ๊ฐ™๋‹ค. (์ด ์ ์—์„œ TFP๋ฅผ ํ• ๋•Œ SpikeSolution ์— ๋Œ€ํ•œ ์–ด๋А์ •๋„์˜ ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์„ ๋‘๋Š” ์ ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ดˆ๊ธฐ SpikeSolution ์œผ๋กœ ํ•ด๋‹น ๋ถ€๋ถ„์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋Œ€๊ฐ• ํ•ด๋ณด๊ณ , Test๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ตฌ์ฒดํ™”ํ•˜๊ธฐ.)
  • CppUnit ๋ฅผ ์“ธ๋•Œ์—๋Š” MFC ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด static ์œผ๋กœ ๋งํ‚น์ด ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ข€ ๋” ์‚ดํŽด๋ด์•ผ๊ฒ ๋‹ค.

5. ์ฐธ์กฐ ๋ฌธ์„œ

  • MSDN
----
์˜ํ˜„ ํ˜• ์‹ ๊ธฐํ•ด~ ใ…Žใ…Žใ…Ž bitmap data๋กœ ์ˆซ์ž๋“ค๊ณผ ๊ฑฐ์‹œ๊ธฐ๋“ค์„ ๊ตฌ๋ถ„ํ•œ๊ฑด๊ฐ€..ใ…กใ…กa.. spy ์ข‹๊ตฌ๋งŒ..

ํ•ด์„ฑ ์˜ค์˜ค.. Artificial Intelligence.. -_- ๊ทผ๋ฐ ์ € ์ŠคํŽ ๋ง์ด ๋งž๋‚˜..

1002 ๋ญ. ์–ด์ฐจํ”ผ ๋…ธ๊ฐ€๋‹ค๋ฅผ ํ•ด๋„ ์ปดํ„ฐ๊ฐ€ ํ•˜๋Š” ๊ฒƒ์„. -_-v ์ด๋กœ์„œ ์ฆ๊ธฐ๊ฒŒ ๋˜๋Š” ๊ฒŒ์ž„์ด ํ•˜๋‚˜ ์ค„์–ด๋ฒ„๋ฆฌ๋Š”๊ฑด๊ฐ€. --;; A.I. ๋ผ๊ณ  ๋ถ™์ด๊ธฐ์—” ๋„ˆ๋ฌด ๋‹จ์ˆœํ•ด์„œ ์ข€ ์ชฝ ํŒ”๋ฆฌ๋Š”๊ตฐ. --;


6. Opening

์Šต๊ด€์„ฑ์œผ๋กœ ์—ฌ๋Š” ํ”„๋กœ๊ทธ๋žจ Best: 1. Explorer 2. ํ”„๋ฆฌ์…€ 3. ์ง€๋ขฐ์ฐพ๊ธฐ. -_-;

NSISIde ์†Œ์Šค๋ฅผ ๋งŒ์ง€์ž‘ ๊ฑฐ๋ฆฌ๋˜์ค‘ ํ”ผ๊ณคํ•ด์„œ ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์กฐ์˜ด ๋ฌด๋ฆฌ๋ฅผ ํ–ˆ๋Š”์ง€(?) ์†๋ชฉ์ด ์ €๋ ค์˜ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ 'ํฝ' ํ•˜๊ณ  ๋™์‹œ ๋‹ค๋ฐœ์ ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ์˜ˆ์ „์— ํ•™๊ต์—์„œ ์—ด๋ ธ๋˜ '์„ ๋ฐฐ๋‹˜๋“ค๊ณผ์˜ ๋งŒ๋‚จ' ์—์„œ ์†Œํ”„ํŠธ์บ ํ”„์— ์žˆ๋Š” ํ™˜๊ตญ์„ ๋ฐฐ๊ฐ€ ํ–ˆ๋˜ ๋ง์ด์˜€๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ญ๋ผ๊ณ  ์ƒ๊ฐํ•˜์„ธ์š”? ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ต์ด ๋‚˜์˜ฌ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์ €๋Š” ํ˜„์‹ค์„ธ๊ณ„์— ์žˆ๋Š” ๊ฒƒ๋“ค์„ ๊ฐ€์ƒ์„ธ๊ณ„๋กœ ๋ชจ๋ธ๋งํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์–ด์š”.

์ž.. ๋…ธ๊ฐ€๋‹ค๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ๋‚˜์˜ ์ €๋ ค์˜ค๋Š” ์†๋ชฉ์„ ๋ชจ๋ธ๋งํ•ด๋ณด์ž. -_-..

7. User Story

  • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์€ ์œˆ๋„์šฐ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•œ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” Begineer Mode ๋งŒ์„ ์ง€์›ํ•œ๋‹ค.
  • ์ปดํ“จํ„ฐ๋Š” ํ˜„์žฌ์˜ ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ ์ƒํ™ฉ์„ ์•Œ์•„์„œ ํŒ๋‹จํ•˜๊ณ , ํ•ด๋‹น ํ–‰๋™์„ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘์ง€์‹œํ‚ค๊ฑฐ๋‚˜ ์ง€๋ขฐ๋ฅผ ๋‹ค ์ฐพ์„๋•Œ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์ง„ํ–‰์‹œํ‚จ๋‹ค.

8. ๊ฐ„๋‹จ ์ž‘์—… ์ค€๋น„

  1. Spy++
  2. Visual C++ (2๊ฐœ ์—ด์–ด๋‘๊ณ  ์“ด๋‹ค. ํ•˜๋‚˜๋Š” ํ•ด๋‹น ๋ถ€๋ถ„๋ถ€๋ถ„ ์—ฐ์Šต์šฉ ์ฝ”๋“œ ๋งŒ๋“ค ๊ณณ. ํ•˜๋‚˜๋Š” ๋ฉ”์ธ์†Œ์Šค ๋งŒ๋“ค ๊ณณ)
  3. ์ธ๋ฑ์Šค ์นด๋“œ & ํ•„๊ธฐ๊ตฌ - CRC ๋ฅผ ์“ฐ๊ฑด UserStory๋ฅผ ์“ฐ๊ฑด..~ ๋‹จ,
  4. ์ง€๋ขฐ์ฐพ๊ธฐ
  5. CppUnit - ์ด๋ฒˆ ํ”Œ๋ฐ๋•Œ ์œˆ๋„์šฐ ๋ฉ”์„ธ์ง€ ๊ด€๋ จ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด์„œ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ๋ชปํ–ˆ๋‹ค. (์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์ „ํ†ต์ ์ธ Manual Test๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ๋ฐ–์—. GUI Testing ๊ด€๋ จ ๊ธ€์„ ๋” ์ฝ์–ด๋ด์•ผ ๊ฒ ๋‹ค. ์•„์ง ๋” ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค.) ๋‹จ, ๋‚˜์ค‘์— ๋น„ํŠธ๋งต ๋ถ„์„๋ถ€๋ถ„ & Refactoring ์‹œ์— TFP ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

9. Start. ์–ด๋””์„œ ๋ถ€ํ„ฐ ์žก์•„๊ฐˆ๊นŒ.. ๋ฐ์ดํ„ฐ ๋ชจ์œผ๊ธฐ

๊ธ€์Œ”. ๋ฌด์—‡๋ถ€ํ„ฐ ํ•ด ๋‚˜๊ฐ€์•ผ ํ•  ๊ฒƒ์ธ๊ฐ€. ์ผ๋‹จ์€ ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด์—ฌ์•ผ ํ•˜๊ณ , ์ง€๋ขฐ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ํ•„์š”ํ• ํ…Œ๊ณ .. ์šฐ์–ด. ์ •์‹ ์—†๋‹ค. ์ผ๋‹จ์€ ์ƒ๊ฐ๋‚˜๋Š” ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ํ•˜๋‚˜ํ•˜๋‚˜ ์žก์•„๋ด์•ผ๊ฒ ๋‹ค.

์ผ๋‹จ, ์†Œ์œ„ ๋งํ•˜๋Š” '๊บผ๋ฆฌ' ๋“ค์„ ์ฐพ๊ธฐ ์œ„ํ•ด Spy++ ์„ ์‹คํ–‰์‹œ์ผฐ๋‹ค.



์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์œˆ๋„์šฐํด๋ž˜์Šค ์ด๋ฆ„์ด '์ง€๋ขฐ ์ฐพ๊ธฐ' ์˜€๋‹ค. ์œˆ๋„์šฐ OS ์˜ ํŠน์ง•์ƒ ํ•ด๋‹น ์œˆ๋„์šฐ ํ•ธ๋“ค๊ฐ„ ๋ฉ”์„ธ์ง€์˜ ๋ฐœ์ƒ์— ๋”ฐ๋ผ ํ•ด๋‹น ์œˆ๋„์šฐํ”„๋กœ์‹œ์ €์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค. ํ•ด๋‹น ์œˆ๋„์šฐ ํ•ธ๋“ค์€ ์œˆ๋„์šฐ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์•„๋Š” ์ด์ƒ FindWindow ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ฐพ์œผ๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

๊ฐ๊ฐ ๋ฉ”๋‰ด๋“ค์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด Message ๋ฅผ ์บก์ณํ•ด๋ดค๋‹ค.



beginner ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”๋‰ดํด๋ฆญ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”์„ธ์ง€๋Š” WM_COMMAND ์ด๊ณ , ID๋Š” wParam ์œผ๋กœ 521์ด ๋‚ ๋ผ๊ฐ„๋‹ค. ์ฆ‰, ํ•ด๋‹น ๋ฉ”๋‰ด์˜ ID๊ฐ€ 521 ์ธ ๊ฒƒ์ด๋‹ค. (์šฐ๋ฆฌ๋Š” ์ปจํŠธ๋กค ์•„์ด๋””๋ฅผ ์“ฐ์ง€๋งŒ ์ด๋Š” resource.h ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ ์ „๋ถ€ #define ๋งคํฌ๋กœ ์ •์˜์ด๋‹ค.) ๊ฐ๊ฐ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ, 521,522,523 ์ด์˜€๋‹ค.

์ง€๋ขฐ ๋ฒ„ํŠผ์„ ์—ด๊ณ  ๊นƒ๋ฐœ์ฒดํฌ๋ฅผ ์œ„ํ•œ ๋งˆ์šฐ์Šค ํด๋ฆญ์‹œ์—” WM_LBUTTONDOWN, WM_RBUTTONDOWN ์ด๊ณ , ๋‹จ ? ์ฒดํฌ๊ด€๋ จ ์˜ต์…˜์ด ๋ฌธ์ œ์ด๋‹ˆ ์ด๋Š” ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ์ด๋‹ค. ๋งˆ์šฐ์Šคํด๋ฆญ์€ ํ•ด๋‹น Client ๋ถ€๋ถ„ ์ขŒํ‘œ๋ฅผ ์ž˜ ์žฌ์–ด์„œ ์ด๋ฅผ lParam ์— ๋„˜๊ฒจ์ฃผ๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

์†์— ๋Œ€ํ•œ ๋ชจ๋ธ๋ง์ด์—ฌ์„œ ๊ทธ๋Ÿฐ์ง€ ์†์—๋งŒ ์ง‘์ฐฉํ•˜๊ฒŒ ๋˜์—ˆ๊ตฐ. -_-; ์ด ์ผ์„ ์œ„ํ•ด์„œ๋Š” ์†, ๋ˆˆ, ๋จธ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ฒ ๋Š”๋ฐ. ๋งˆ์šฐ์Šค ๋…ธ๊ฐ€๋‹ค๋ฅผ ์œ„ํ•œ ์†, ํ•ด๋‹น ์ง€๋ขฐ์ฐพ๊ธฐ ์ƒํƒœ๋ฅผ ๋ด์•ผ ํ•  ๋ˆˆ, ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ํŒ๋‹จ, ์ง€์‹œ๋ฅผ ํ•ด์•ผ ํ•  ๋จธ๋ฆฌ์˜ ๋ชจ๋ธ๋ง. (๋‹จ, ์—ฌ๊ธฐ์— ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์กฐ๊ฑด์„ ๋ถ™์ธ๋‹ค๋ฉด '์ง€๋ขฐ์ฐพ๊ธฐํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ' ์ด๋ผ๋Š” ๋ง์ด ๋ถ™๊ฒ ์ง€๋งŒ.)

๋ˆˆ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์€ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ.. ํ•˜๋‚˜๋Š” ์‹ ์ด ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ํ•˜๋‚˜๋Š” ์‚ฌ๋žŒ์ด ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. -_-; ์ฆ‰, ํ•˜๋‚˜๋Š” ์ง์ ‘ ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ถ€๋ถ„์„ ์–ป์–ด๋‚ธ ๋’ค, ๊ทธ์ค‘์— ๋ฐฐ์—ด์— ํ•ด๋‹น๋˜๋Š” ๋ถ€๋ถ„ (์–ด๋–ค ๋ฐ์ดํ„ฐ๊ตฌ์กฐ์ผ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๋ฐฐ์—ด์ผ ๊ฒƒ ๊ฐ™๋‹ค. -_-;)์„ ์–ป์–ด๋‚ด์„œ ๋ณด๋˜์ง€, ์•„๋‹ˆ๋ฉด ์‚ฌ๋žŒ์ฒ˜๋Ÿผ ํ™”๋ฉด์„ ๋ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์• ์„ํ•˜๊ฒŒ๋„ ๋‚˜๋Š” ์ง€๋ขฐ์ฐพ๊ธฐ์˜ ์ฐฝ์กฐ์ž๋„ ์•„๋‹ˆ๊ณ  ์œˆ๋„์šฐ์˜ ์ฐฝ์กฐ์ž๋Š” ๋”๋”์šฑ ์•„๋‹ˆ๋ฏ€๋กœ. -_-; ํ›„์ž๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋œ๋‹ค.

์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ์œˆ๋„์šฐ ํ•ธ๋“ค์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์œˆ๋„์šฐ์— ๋Œ€ํ•œ DC๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. DC๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด, BitBlt ์„ ์ด์šฉ, ๋น„ํŠธ๋งต์„ ๋ฉ”๋ชจ๋ฆฌDC ์ชฝ์œผ๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์„ํ…Œ๋‹ˆ๊นŒ. (๊ฐ„๋‹จํ•œ ์บก์ณ ํ”„๋กœ๊ทธ๋žจ์‹œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.) ๋‹จ, ํ™”๋ฉด์„ ๋ณต์‚ฌํ•˜๋ ค๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์— ๊ฐ€๋ ค์ง€๋ฉด ์•ˆ๋˜๊ฒ ๋‹ค.

๋จธ๋ฆฌ๋Š”? ์ง€๋ขฐ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ•ด๋‹น๋˜๋Š” ๋ถ€๋ถ„์€. ์œผํ~ ๋‚˜์ค‘์—. -_-; ๋Œ€๊ฐ• ์ด์ฏค ํ•ด์„œ ๊ฐ ๋ถ€๋ถ„๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋งž๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์งฐ๋‹ค.

  • 1์ฐจ์ผ๋ถ€๋ถ„์ฝ”๋“œ - ์†๊ณผ ๋ˆˆ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ฝ”๋“œ๋“ค ๋ชจ์Œ. ๊ทธ๋ฆฌ๊ณ  ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•˜๋Š” ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด Delegation ์‹œ๋„. (CMinerControler ํด๋ž˜์Šค๋Š” ์ฒ˜์Œ '๋ง‰ ์ง ' ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ์ง€๋ขฐ์ฐพ๊ธฐ ์ œ์–ด๋ถ€๋ถ„ ํ•จ์ˆ˜๋“ค์„ ํด๋ž˜์Šคํ™”ํ•œ๊ฒƒ์ž„)

10. User Story & Engineering Task

์—ฌ๊ธฐ์„œ๋Š” Task Estmiate ๋ฅผ ์ƒ๋žตํ–ˆ๋‹ค. (๊ทธ๋ƒฅ ๋ง‰ ๋‚˜๊ฐ„์ง€๋ผ. ^^;)
  • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์€ ์œˆ๋„์šฐ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด์žฅ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•œ๋‹ค.
    • ํ˜„์žฌ ์—ด๋ ค์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ค‘์—์„œ ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ์œˆ๋„์šฐ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์ฐพ์•„๋‚ธ๋‹ค.
    • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ์กฐ์ž‘ํ•œ๋‹ค. (Mode ๋ณ€ํ™˜, ์žฌ์‹œ์ž‘, ์ง€๋ขฐ์ฒดํฌ, ๋นˆ์นธ ์—ด๊ธฐ ๋“ฑ)
      • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ํ•ด๋‹น ํ–‰๋™ Message๋ฅผ ๋ณด๋‚ธ๋‹ค.
    • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์˜ ํ™”๋ฉด์„ Capture, ๋ถ„์„ํ•œ๋’ค ๋ฐ์ดํ„ฐํ™”ํ•œ๋‹ค.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” Begineer Mode ๋งŒ์„ ์ง€์›ํ•œ๋‹ค.
  • ์ปดํ“จํ„ฐ๋Š” ํ˜„์žฌ์˜ ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ ์ƒํ™ฉ์„ ์•Œ์•„์„œ ํŒ๋‹จํ•˜๊ณ , ํ•ด๋‹น ํ–‰๋™์„ ๊ฒฐ์ •ํ•œ๋‹ค.
    • ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ ๋น„ํŠธ๋งต ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ์ˆ˜์น˜๋ฐ์ดํ„ฐํ™”ํ•œ๋‹ค.
      • ๊ฒŒ์ž„ ์‹œ์ž‘ & ๊ฒŒ์ž„์ค‘์ธ ์ƒํƒœ ํ™•์ธ
      • ๊ฒŒ์ž„ ์‹คํŒจ์ธ ์ƒํƒœ ํ™•์ธ
      • ๊ฒŒ์ž„ ํด๋ฆฌ์–ด์ธ ์ƒํƒœ ํ™•์ธ
      • ๋นˆ์นธ, ๊นƒ๋ฐœ์ฒดํฌ, ์ˆซ์ž๋“ค ๋“ฑ Cell๋“ค์— ๋Œ€ํ•œ ์ƒํƒœ ํ™•์ธ
    • ์ง€๋ขฐ์ฐพ๊ธฐ ํŒ๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“ ๋‹ค.
      • ๊นƒ๋ฐœ ์ฒดํฌ๋ฅผ ํ•ด์•ผ ํ•  ๋•Œ
      • ๋นˆ์นธ์„ ์—ด์–ด์•ผ ํ•  ๋•Œ
      • ๋นˆ์นธ ์ฐ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•  ๋•Œ

  • ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘์ง€์‹œํ‚ค๊ฑฐ๋‚˜ ์ง€๋ขฐ๋ฅผ ๋‹ค ์ฐพ์„๋•Œ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์ง„ํ–‰์‹œํ‚จ๋‹ค.
    • ๊ฒŒ์ž„ ์‹คํŒจ์ธ ์ƒํƒœ์— ๋Œ€ํ•œ ํ™•์ธํ•˜๊ธฐ.
    • ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋„๋ก ์กฐ์ž‘ํ•˜๊ธฐ.

11. First

  • 1์ฐจ์ œ์ž‘์†Œ์Šค
    • ์œ ์˜ : ์ด๋•Œ๋Š” Windows ME, Windows 2000 ์ด์ƒ์—์„œ๋งŒ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋‹ค. (์ง€๋ขฐ์ฐพ๊ธฐ ๋น„ํŠธ๋งต์ด 98๊ณผ ๋‹ค๋ฅด๋‹ค)
    • ๊ธฐ๋ก : ์ดˆ๊ธ‰ 8-9์ดˆ, ์ค‘๊ธ‰ 90-100์ดˆ, ๊ณ ๊ธ‰์ชฝ์€ ๋„ˆ๋ฌด ๋А๋ ค์„œ ํ…Œ์ŠคํŠธ ํฌ๊ธฐ. -_-;

์ฒ˜์Œ์—๋Š” ์ „์ฒด์— ๋Œ€ํ•œ ํ™˜๊ฒฝ์„ค์ •์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
CMinerBitmapAnalyzer ๋น„ํŠธ๋งต์„ ๋ถ„์„, ๋ฐ์ดํ„ฐํ™”ํ•œ๋‹ค.
CMinerController ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ํ™”๋ฉด ์บก์ณ, ๋ชจ๋“œ๋ณ€ํ™˜, ๋ฒ„ํŠผ ํด๋ฆญ ๋“ฑ์˜ ์ œ์–ด๋ฅผ ํ•œ๋‹ค
CMineSweeper ์‹ค์งˆ์ ์ธ ๋‘๋‡Œ์— ํ•ด๋‹น๋˜๋Š” ๋ถ€๋ถ„. CMinerController ์™€ CMinerBitampAnalyzer ๋ฅผ ๋ฉค๋ฒ„๋กœ ๊ฐ€์ง€๋ฉฐ, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒŒ์ž„์ƒํ™ฉ๋ถ„์„, ์ง€๋ขฐ์ฐพ๊ธฐ๊ด€๋ จ ํŒ๋‹จ ๋“ฑ์„ ํ•œ๋‹ค

์ผ์ข…์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ํ•˜๋Š” ์บ๋ฆญํ„ฐ์™€ ๊ฐ™๋‹ค. ํƒ€์ด๋จธ๊ฐ€ Key Frame ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฑธ์–ด์ฃผ๊ณ , ํ•ด๋‹น Key Frame ์—๋Š” ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•œ ํŒ๋‹จ์„ ํ•œ๋’ค ๋™์ž‘์„ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” 1์ดˆ๋งˆ๋‹ค MineSweeper ์˜ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
~cpp 
void CMinerFinderDlg::OnButtonStart() 
{
	// TODO: Add your control notification handler code here
	m_mineSweeper.Start ();
	SetTimer (1000, 100, NULL);
}

void CMinerFinderDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	int nRet = Excute ();
	if (nRet == MINERMODE_CLEAR) 
		KillTimer (1000);
	
	CDialog::OnTimer(nIDEvent);
}

void CMinerFinderDlg::OnButtonStop() 
{
	// TODO: Add your control notification handler code here
	KillTimer (1000);
}

int CMinerFinderDlg::Excute ()
{
	return m_mineSweeper.Excute ();
}

MineSweeper ์˜ Excute ์˜ ๋ฐฉ๋ฒ•์€ ์ผ์ข…์˜ ์œ ํ•œ ์ƒํƒœ ๋จธ์‹ ์˜ ํ˜•ํƒœ์ด๋‹ค. ๋‹จ์ง€ Switch ~ Case ๋งŒ ์“ฐ์ง€ ์•Š์•˜์„๋ฟ์ด์ง€๋งŒ. ๊ทธ๋ฆฌ ํฐ ์žฅ์ ์ด ๋ณด์ด์ง€๋Š” ์•Š์€ ๊ด€๊ณ„๋กœ ์ผ๋‹จ์€ ๊ทธ๋ƒฅ ์ด๋ ‡๊ฒŒ.


~cpp 
int CMineSweeper::Excute ()
{
	CBitmap* pBitmap = CaptureClient ();

	ConvertBitmapToGameMode (pBitmap);
	ConvertBitmapToData (pBitmap);

	if (m_nCurrentGameMode == MINERMODE_GAMEOVER) {
		Start ();
		return m_nCurrentGameMode;
	}

	// Todo : Matrix ๋ฅผ ๊ทผ๊ฑฐ๋กœ ํ•˜์—ฌ ํ•  ์ผ์˜ ์„ค์ •.
	// ํ•  ์ผ : 
	int nRet = 0;

	CMinerFinderDlg* pDlg = (CMinerFinderDlg*)m_pDlg;
	
	//		Flag ์˜ ์ฒดํฌ. ํšŸ์ˆ˜์„ธ๊ธฐ.
	nRet = CheckFlag ();
	if (nRet) {
		pDlg->PrintStatus ("Action : CheckFlag - %d rn", nRet);
		return m_nCurrentGameMode;
	}

	//		Open. ํšŸ์ˆ˜์„ธ๊ธฐ.
	nRet = OpenBlocks ();
	if (nRet) {
		pDlg->PrintStatus ("Action : OpenBlocks - %d rn", nRet);
		return m_nCurrentGameMode;
	}

	//		์ฐ๊ธฐ. --;
	RandomOpen ();
	pDlg->PrintStatus ("Action : Random Open rn");

	return m_nCurrentGameMode;
}

11.1. Profiling

~cpp 
Profile: Function timing, sorted by time
Date:    Tue Feb 26 19:16:26 2002


Program Statistics
------------------
    Command line at 2002 Feb 26 19:00: "F:WorkingTempMinerFinderDebugMinerFinder" 
    Total time: 223521.679 millisecond
    Time outside of functions: 28.613 millisecond
    Call depth: 23
    Total functions: 660
    Total hits: 37532338
    Function coverage: 52.1%
    Overhead Calculated 5
    Overhead Average 5

Module Statistics for minerfinder.exe
-------------------------------------
    Time in module: 223493.066 millisecond
    Percent of time in module: 100.0%
    Functions in module: 660
    Hits in module: 37532338
    Module function coverage: 52.1%

        Func          Func+Child           Hit
        Time   %         Time      %      Count  Function
---------------------------------------------------------
   86270.513  38.6    86270.513  38.6 18252086 CDC::GetPixel(int,int) (mfc42d.dll)
   53966.631  24.1   223296.921  99.9      855 CWinThread::PumpMessage(void) (mfc42d.dll)
   28819.313  12.9   150892.058  67.5    93243 CMinerBitmapAnalyzer::CompareBitmapBlock(class CDC *,class CDC *,int,int,int,int,class CDC *,int,int) (minerbitmapanalyzer.obj)
   18225.064   8.2    61776.601  27.6  9126043 CMinerBitmapAnalyzer::CompareBitmapPixel(class CDC *,class CDC *,int,int,unsigned long) (minerbitmapanalyzer.obj)
   17577.168   7.9    17577.168   7.9  9126043 CDC::SetPixel(int,int,unsigned long) (mfc42d.dll)
    5146.101   2.3    53721.330  24.0      104 CMineSweeper::CheckFlag(void) (minesweeper.obj)
    4748.690   2.1     4974.806   2.2       74 CMineSweeper::OpenBlocks(void) (minesweeper.obj)
    2496.582   1.1     2506.333   1.1       27 CMineSweeper::RandomOpen(void) (minesweeper.obj)
    1504.775   0.7     1504.775   0.7    85245 CDC::DeleteDC(void) (mfc42d.dll)
     944.596   0.4      944.596   0.4    85245 CDC::CreateCompatibleDC(class CDC *) (mfc42d.dll)
     492.930   0.2   111257.841  49.8    32492 CMinerBitmapAnalyzer::ConvertBitmapToBlock(int,int) (minerbitmapanalyzer.obj)
     383.392   0.2      383.392   0.2    85245 CDC::SelectObject(class CBitmap *) (mfc42d.dll)
     348.243   0.2      348.243   0.2    42702 CWnd::ReleaseDC(class CDC *) (mfc42d.dll)
     326.552   0.1      326.552   0.1      221 CWnd::SetWindowTextA(char const *) (mfc42d.dll)
     294.378   0.1      295.578   0.1     2619 CWnd::DefWindowProcA(unsigned int,unsigned int,long) (mfc42d.dll)
     251.949   0.1      251.949   0.1    42702 CWnd::GetDC(void) (mfc42d.dll)
     201.741   0.1      225.112   0.1      221 CEdit::LineScroll(int,int) (mfc42d.dll)
     184.900   0.1      184.900   0.1   208404 CMineSweeper::GetData(int,int) (minesweeper.obj)
     155.178   0.1    42649.225  19.1     9944 CMinerBitmapAnalyzer::ConvertBitmapToNumber(int,int) (minerbitmapanalyzer.obj)
     134.201   0.1   154139.803  69.0      157 CMineSweeper::ConvertBitmapToData(class CBitmap *) (minesweeper.obj)

์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ๊ฐ€์žฅ ๋งŽ์ด ํ˜ธ์ถœ๋˜์–ด ์‹œ๊ฐ„์„ ์ ์œ ํ•˜๋Š” ๊ฒƒ์€ GetPixel์™€ PumpMessage์ด๋‹ค. mfc์˜ ํ•จ์ˆ˜์™€ ์œˆ๋„์šฐ ๋ฉ”์„ธ์ง€๋“œ๋ฆฌ๋ธ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค ํ•˜๋”๋ผ๋„, ํ•ด๋‹น ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ•๊ตฌํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

GetPixel ์€ ์–ด๋””์„œ ํ˜ธ์ถœ๋ ๊นŒ? Edit->Find in Files ๋ฅผ ํ•˜๋ฉด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋‚ด์—์„œ GetPixel์ด ์“ฐ์ธ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.
~cpp 
Searching for 'GetPixel'...
F:WorkingTempMinerFinderMinerBitmapAnalyzer.cpp(65):	if (bmpdc->GetPixel (bmpStartX,bmpStartY) != rgbColor)
F:WorkingTempMinerFinderMinerBitmapAnalyzer.cpp(135):			rgb = screendc->GetPixel (nX+nBi,nY+nBj);
2 occurrence(s) have been found.

GetPixel์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™”๋ฉด ์บก์ณ๋กœ ์–ป์€ ๋น„ํŠธ๋งต์— ๋Œ€ํ•ด ๋น„๊ตํ•˜์—ฌ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์ž„์„ ํŒ๋…ํ•˜๋Š” ๋ถ€๋ถ„์— ์“ฐ์˜€๋‹ค.
~cpp 
BOOL CMinerBitmapAnalyzer::CompareBitmapPixel (CDC* pDC, CDC* bmpdc, int bmpStartX, int bmpStartY, COLORREF rgbColor) 
{
	if (bmpdc->GetPixel (bmpStartX,bmpStartY) != rgbColor)
		return FALSE;
	else
		return TRUE;
}

BOOL CMinerBitmapAnalyzer::CompareBitmapBlock (CDC* pDC, CDC* screendc, int nX, int nY, int nWidth, int nHeight, CDC* bmpdc, int nSrcX, int nSrcY)
{
	int nBi, nBj;
	COLORREF rgb;

	for (nBi=0;nBi<nWidth;nBi++) {
		for (nBj=0;nBj<nHeight;nBj++) {
			rgb = screendc->GetPixel (nX+nBi,nY+nBj);
			pDC->SetPixel (nX+nBi,nY+nBj,rgb);
			
			if (!CompareBitmapPixel (pDC, bmpdc, nSrcX + nBi, nSrcY + nBj, rgb)) return FALSE;
		}
	}

	return TRUE;
}
์ฆ‰, ์ € ํ•จ์ˆ˜๋“ค์„ ์ตœ์ ํ™” ์‹œํ‚ค๋˜์ง€, ์•„๋‹ˆ๋ฉด ์ € ํ•จ์ˆ˜๋“ค์ด ํ˜ธ์ถœ๋˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

12. Second - ์ตœ์ ํ™”์˜ ์‹œ๋„

  • 2์ฐจ์ œ์ž‘์†Œ์Šค
    • ์œ ์˜ : ์—ฌ์ „ํžˆ Windows ME, Windows 2000 ์ด์ƒ์—์„œ๋งŒ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋‹ค. (์ง€๋ขฐ์ฐพ๊ธฐ ๋น„ํŠธ๋งต์ด 98๊ณผ ๋‹ค๋ฅด๋‹ค)
    • ๊ธฐ๋ก : ์ดˆ๊ธ‰ 2-3์ดˆ, ์ค‘๊ธ‰ 21~40์ดˆ, ๊ณ ๊ธ‰์ชฝ์€ ๋„ˆ๋ฌด ๋А๋ ค์„œ ํ…Œ์ŠคํŠธ ํฌ๊ธฐ. -_-;
    • ๋ฐ˜์„ฑ : ์ฐจ๋ผ๋ฆฌ ์ˆœ์ˆ˜ TFP ๋กœ ํ•ด ๋‚˜๊ฐˆ๊ฑธ ๊ทธ๋žฌ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ œ๋Œ€๋กœ ๋ชป๋‚ด์—ˆ๋‹ค. (์•„.. ํƒ€์„ฑ์— ์ –์œผ๋ฉด ์•ˆ๋˜๊ฑด๋งŒ. --; TFP์ค‘ ๋ง‰ํž๋•Œ ์˜ˆ์ „๋ฐฉ์‹์œผ๋กœ ํ”Œ๋ฐํ•˜๋ ค๊ณ  ํ•˜๋Š”๊ฒŒ ๋ฌธ์ œ์ด๋‹ค. -_-;)

12.1. ์ตœ์ ํ™” ๋ฐฉ์•ˆ์˜ ๊ถ๋ฆฌ

๋ชฉํ‘œ๋Š” Func time ์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ํ•จ์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ ๊ทธ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•.
  • ๋น„ํŠธ๋งต์˜ ์ข…๋ฅ˜๊ฐ€ ํ•œ์ •์ ์ด๋ผ๋Š” ์ ์—์„œ ์ฐฉ์•ˆ, Block ์ „์ฒด์— ๋Œ€ํ•œ ๋น„๊ต๋Œ€์‹  ํ•œ์ค„์— ๋Œ€ํ•œ ๋น„๊ต๋กœ ๋ฐ”๊ฟจ๋‹ค. (๋ธ”๋Ÿญ๋งˆ๋‹ค ์ˆซ์ž๋“ค์˜ ์ƒ‰์ด ๋‹ค๋ฅด๋ฏ€๋กœ, ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์†๋„ ํ–ฅ์ƒ์„ ์ด๋Œ์–ด ๋‚ผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.)

~cpp 
BOOL CMinerBitmapAnalyzer::CompareBitmapCenterLine (CDC* screendc, int nX, int nY, int nWidth, int nHeight, CDC* bmpdc, int nSrcX, int nSrcY)
{
	int nBi, nBj;
	COLORREF rgb;
	nBj = int(nHeight / 2);

	// for optimizing...
	for (nBi=int(nWidth / 4);nBi<nWidth-int(nWidth / 4);nBi++) {
		rgb = screendc->GetPixel (nX+nBi,nY+nBj);
	
		if (!CompareBitmapPixel (bmpdc, nSrcX + nBi, nSrcY + nBj, rgb)) return FALSE;
	}

	return TRUE;
}
  • Flag ์ฒดํฌ๋ถ€๋ถ„ ํšจ์œจํ™” - ๊ธฐ์กด์˜ ๋ฐฉ์‹์€ Flag ์„ ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•˜๊ณ  ๋‚œ ๋’ค, ๋‹ค์‹œ ์ „์ฒด ๋น„ํŠธ๋งต์„ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ์‹์ด์˜€๋‹ค. ์ด์— ๋Œ€ํ•ด Flag ๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ํ•œ๊บผ๋ฒˆ์— ์ฒดํฌํ•˜๋„๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜์ •ํ–ˆ๋‹ค. ์ด๋Š” ์ „์ฒด ๋น„ํŠธ๋งต์„ ์ฝ์–ด์˜ค๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ์ฃผ๋ฏ€๋กœ, ํšจ์œจ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

~cpp 
int CMineSweeper::CheckFlag ()
{
	int nCount = 0;
	int nCheckCount = 0;

	CMinerFinderDlg* pDlg = (CMinerFinderDlg*)m_pDlg;

	for (int i=0;i<m_nArrMaxY;i++) {
		for (int j=0;j<m_nArrMaxX;j++) {
			if (IsNumber (GetData (j,i))) {
				// ์ˆซ์ž์ธ ๊ฒฝ์šฐ. 
				nCount = GetAroundClosedCount (j,i) + GetAroundFlagCount (j,i);

				if (nCount == GetData(j,i) && GetAroundClosedCount (j,i)) {
					SetFlagsAround (j,i);
					
					// CBitmap* pBitmap = CaptureClient ();
					// ConvertBitmapToData (pBitmap);

					nCheckCount ++;
				}
			}
		}
	}

	return nCheckCount;
}

13. Third - ์ตœ์ ํ™” ์‹œ๋„ 2

  • 3์ฐจ์ œ์ž‘์†Œ์Šค
  • ์ง€์—ญ ์šฐ์„  ๊ฒ€์ƒ‰๋ฒ• - ์ด๋ฒคํŠธ๋ฅผ ๋นจ๋ฆฌ ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•. ์ด์ „์— ์ง€๋ขฐ์ฒดํฌ๋ฅผ ํ•˜๊ฑฐ๋‚˜ ๋นˆ์นธ์„ ์—ฐ ๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰๋ฒ”์œ„๋ฅผ ์ ์  ๋„“ํ˜€๊ฐ€๋Š” ๋ฐฉ๋ฒ•
  • ๋ฌธ์ œ์ ์˜ ๋ฐœ์ƒ - windows 98 ์ดํ•˜๋ฒ„์ „์˜ ์ง€๋ขฐ์ฐพ๊ธฐ ๋น„ํŠธ๋งต๋ถ€๋ถ„
  • 4์ฐจ์ œ์ž‘์†Œ์Šค
  • windows 98 ์ดํ•˜ ๋ฒ„์ „ ์ง€๋ขฐ์ฐพ๊ธฐ ์ง€์›. (์™„๋ฒฝํ•˜์ง„ ์•Š์Œ)

14. Fourth - ์ตœ์ ํ™” ์‹œ๋„ 3

  • 5์ฐจ์ œ์ž‘์†Œ์Šค
  • ์ดˆ๋ฐ˜ ๋ฌด์ฐจ๋ณ„ ์ฐ๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ
  • Status ํ‘œ์‹œ์ฐฝ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ง€์›Œ์ฃผ๊ธฐ - ์ง„ํ–‰์ƒํ™ฉ์ด ๊ธธ์–ด์ง€๋ฉด ๊ธธ์–ด์งˆ์ˆ˜๋ก ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค.
  • Open Block ์— ๋Œ€ํ•ด์„œ ํ•œ๊บผ๋ฒˆ์— ์ผ๊ด„์ฒ˜๋ฆฌ - ์˜์™ธ๋กœ ํšจ๊ณผ๊ฐ€ ๋†’์€ ๋ฐฉ๋ฒ• (๊ถ๊ทน์ ์œผ๋กœ๋Š” Excute ์ˆ˜ํ–‰ ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ์ฃผ๋ฏ€๋กœ)
  • ์ถ”ํ›„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๊ถ๋ฆฌ
    • ์ง€์—ญ ์šฐ์„  ๋น„ํŠธ๋งต ๋ถ„์„ & ๋ฐ์ดํ„ฐํ™” - ๋ฌด์กฐ๊ฑด ์ „์ฒด ๋น„ํŠธ๋งต์„ ๋ฐ์ดํ„ฐํ™” ํ•˜๋Š”๋Œ€์‹ , ํƒ์ƒ‰ํ•˜๋ ค๋Š” ๊ธฐ์ ์„ ์žก๊ณ  ๊ทธ ๊ธฐ์ ์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฐ์ดํ„ฐํ™”ํ•˜๋ ค๋Š” ๋ฒ”์œ„๋ฅผ ๋„“ํ˜€๊ฐ€๋Š” ๋ฐฉ๋ฒ•
    • Random Open ์— ๋Œ€ํ•œ ํ™•๋ฅ  ๋†’์ด๊ธฐ ๋ฐฉ๋ฒ• ๊ถ๋ฆฌ
      • ํ•ด๋‹น ๋นˆ์นธ๋“ค์— ๋Œ€ํ•ด์„œ ์ฃผ์œ„์˜ ์ˆซ์ž๋“ค์˜ ํ•ฉ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๋นˆ์นธ์„ ์—ฌ๋Š” ๊ฒƒ.
    • Smart Random Open - ํ˜„์žฌ ์—ด ์ˆ˜ ์žˆ๋Š” Cell ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ Random Open ํšŸ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ์‹

15. Fifth - ์ตœ์ ํ™” ์‹œ๋„ 4

  • 6์ฐจ์ œ์ž‘์†Œ์Šค
  • Random Open ์— ๋Œ€ํ•œ ํ™•๋ฅ  ๋†’์ด๊ธฐ ์‹œ๋„ - ํ•ด๋‹น ๋นˆ์นธ๋“ค์— ๋Œ€ํ•ด์„œ ์ฃผ์œ„์˜ ์ˆซ์ž๋“ค์˜ ํ•ฉ์ด ๊ฐ€์žฅ ๋‚ฎ์€ ๋นˆ์นธ์„ 50%์˜ ํ™•๋ฅ ๋กœ ์—ด๊ธฐ ์‹œ๋„. ๋น„๊ต์  ๋นˆ์นธ์„ ์—ฌ๋Š” ํ™•๋ฅ ์ด ๋†’์•„์ง€๊ธด ํ–ˆ๋‹ค. (๋‹จ, ์˜๋ฏธ์—†๋Š” ๊ณณ์ด ์—ด๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋Š”์ ์—์„œ ๊ฐœ์„ ์˜ ์—ฌ์ง€ํ•„์š”)
  • Smart Random Open - ํ˜„์žฌ ์—ด ์ˆ˜ ์žˆ๋Š” Cell ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ Random Open ํšŸ์ˆ˜๋ฅผ ์กฐ์ ˆํ•จ. ์ „์ฒด Cell ์ˆ˜์˜ 1/8 ๋น„์œจ.
  • 98ํ˜ธํ™˜๋ฒ„๊ทธ์ˆ˜์ •์†Œ์Šค

16. Thread

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ•์„์ฒœ๋‹˜. ์—ฌ๊ธฐ ์ด๋ ‡๊ฒŒ ๊ธ€ ์“ฐ๋Š”๊ฒŒ ๋งž๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.
๊ฒ€์ƒ‰์„ ํ•˜๋‹ค๊ฐ€ ์šฐ์—ฐํžˆ MineFinder ํŽ˜์ด์ง€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋‹นํžˆ ์žฌ๋ฏธ์žˆ๋”๊ตฐ์š”, ์†Œ์Šค๋ฅผ ๋ฌด์ฒ™ ๊น”๋”ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋งŒ๋“œ์…”์„œ ๋ฌด์ฒ™ ์ธ์ƒ๊นŠ๊ฒŒ ๋ดค์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฆ„์ด ์•„๋‹ˆ์˜ค๋ผ ์งˆ๋ฌธ์ด ์žˆ์–ด์„œ ์ด๋ ‡๊ฒŒ ๊ธ€์„ ๋‚จ๊น๋‹ˆ๋‹ค. ์ง€๋ขฐ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ ๋ธ”๋Ÿญ์˜ ์ƒํƒœ๋ฅผ ๋น„ํŠธ๋งต์œผ๋กœ ๋น„๊ต๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ง€๋ขฐ์ฐพ๊ธฐ ์œˆ๋„์šฐ์˜ ๋น„ํŠธ๋งต ๋ฐ์ดํƒ€๋ฅผ ์–ด๋–ป๊ฒŒ ์ถ”์ถœํ•˜์…จ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์œˆ๋„์šฐ ์ดˆ๋ณด๋ผ์„œ ๊ทธ๋Ÿฐ์ง€ ๋ชฐ๋ผ๋„ ๋ฌด์ฒ™ ๊ถ๊ธˆํ•˜๋„ค์š”. ๊ทธ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฅธ ์‘์šฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์–ผ๋งˆ๋“  ์‘์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ์š”. ๋‹ต๋ณ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. --๋™์šฐ

๊ด€์‹ฌ์žˆ๊ฒŒ ๋ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ^^ ์ œ๊ฐ€ ํ•œ ๋น„ํŠธ๋งต ๋ฐ์ดํ„ฐ ์ถ”์ถœ ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์ธ ์œˆ๋„์šฐ ์บก์ฒ˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์›๋ฆฌ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. FindWindow ๋ฅผ ์ด์šฉ, ์ง€๋ขฐ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์œˆ๋„์šฐ ํ•ธ๋“ค์„ ์–ป์€๋’ค, ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ์œˆ๋„์šฐ์˜ ๋น„ํŠธ๋งต์„ ์–ป์–ด๋‚ด๋Š” ๊ฒƒ์ด์ง€์š”. ๊ธฐํƒ€ ์ œ์ž‘ ๊ณผ์ •๊ณผ ์•„์ด๋””์–ด๋Š” MineFinder ํŽ˜์ด์ง€์— ์„œ์ˆ ํ•ด๋†“์•˜์Šต๋‹ˆ๋‹ค. --1002

๋‹ต๋ณ€ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์งˆ๋ฌธ๋“œ๋ฆฌ๊ณ ์ž ํ–ˆ๋˜ ํฌ์ธํŠธ๋Š” GetClientRect API๋ฅผ ํ†ตํ•ด ์œˆ๋„์šฐ์˜ ํด๋ผ์ด์–ธํŠธ ์˜์—ญ์„ ๊ฐ€์ ธ์™€์„œ ์‹ค์ œ ๋น„๊ตํ•˜๋Š” IDB_BITMAP_MINES ๋น„ํŠธํƒญ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ง์”€๋“œ๋ฆฐ ๊ฒƒ์ด์˜€์Šต๋‹ˆ๋‹ค. IDB_BITMAP_MINES ๋น„ํŠธ๋งต ๋ฆฌ์†Œ์Šค๋„ GetClientRect ๋ฅผ ํ†ตํ•ด ์ถ”์ถœํ•˜์‹ ๊ฑด๊ฐ€์š”? ๋งŒ์•ฝ ๊ทธ API๋กœ ์ถ”์ถœํ•˜์…จ๋‹ค๊ณ  ํ•ด๋„ ํด๋ผ์ด์–ธํŠธ ์˜์—ญ ์ „์ฒด๊ฐ€ ์บก์ณ๊ฐ€ ๋˜์—ˆ์„ ํ…๋ฐ ์ˆซ์ž์™€ ๋ฒ„ํŠผ๋“ฑ์„ ํ”ฝ์…€ ๋‹จ์œ„๋กœ ์–ด๋–ป๊ฒŒ ์ถ”์ถœํ•ด์„œ IDB_BITMAP_MINES ๋ฆฌ์†Œ์Šค๋กœ ๋งŒ๋“œ์…จ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. MineFinder ํŽ˜์ด์ง€์—๋Š” IDB_BITMAP_MINES ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ด์•ผ๊ธฐ๋Š” ์—†์–ด์„œ์š”. --๋™์šฐ

๋ฆฌ์†Œ์Šค ํ™”์ผ์€ ๊ทธ๋ƒฅ ํ™”๋ฉด์บก์ณํ•œ ๋’ค ํฌํ† ์ƒต์—์„œ ์ž˜๋ž์Šต๋‹ˆ๋‹ค. ;) (์ข€ ๋…ธ๊ฐ€๋‹ค ํ‹ฑํ•˜์ง€๋งŒ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹๊นŒ ํ•˜๋Š” ์ƒ๊ฐ. 2๋…„์ „ ์ผ์ด์—ฌ์„œ ์ •ํ™•ํžˆ ๊ธฐ์–ต ์•ˆ๋‚˜์ง€๋งŒ 95์šฉ ์ง€๋ขฐ์ฐพ๊ธฐ์™€ 2000์šฉ ์ง€๋ขฐ์ฐพ๊ธฐ 2๋ฒˆ ์ž‘์—…ํ–ˆ์—ˆ์„๊ฒ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ๊ทธ๋ฆผ์ด ๋‹ค๋ฅด๊ณ  ์ด๋ฏธ์ง€์ขŒํ‘œ๋„ ์กฐ๊ธˆ์€ ๋‹ฌ๋ผ์„œ. ^^)--1002

๊ฐ•์„์ฒœ๋‹˜. MineFinder๋ฅผ win32 API๋กœ ์ปจ๋ฒ„์ „ ํ•ด์„œ ์ œ ํ™ˆํŽ˜์ด์ง€์— ์ฝ”๋“œ ๋ถ„์„ ๊ฐ•์ขŒ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์›์ €์ž์™€ ์›์ž‘ ํŽ˜์ด์ง€์˜ ๋งํฌ๋ฅผ ๋ถ„๋ช…ํžˆ ํ‘œ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ win32 API ๋ฒ„์ „์œผ๋กœ ์ˆ˜์ •ํ•ด์„œ ์ œ ํ™ˆํŽ˜์ด์ง€์— ๊ฒŒ์‹œ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„์ง€์š”. ์„์ฒœ๋‹˜์˜ ํ—ˆ๊ฐ€๋ฅผ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. --๋™์šฐ

์ถœ์ฒ˜(๋งํฌ)๋งŒ ํ‘œ๊ธฐํ•˜์‹œ๋ฉด ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ํ™ˆํŽ˜์ด์ง€ ๋งํฌ์ฃผ์„ธ์š”. ^^ (ํ˜น์‹œ ์ „์— ์ง€๋ขฐ์ฐพ๊ธฐ ์–ด์…ˆ๋ ˆ๋ฒจ์—์„œ ๋ถ„์„ํ•˜์—ฌ MineFinder ๋งŒ๋“œ์‹  ๋ถ„์ด์‹ ๊ฐ€์š”? ์ €๋Š” ์ธ๊ฐ„๊นŒ์ง€๋งŒ ๋ชจ๋ธ๋ง ํ–ˆ์ง€๋งŒ, ์‹ ์„ ๋ชจ๋ธ๋งํ•œ. ^^;) --1002

์ €์˜ ํ™ˆํŽ˜์ด์ง€๋Š” http://ssrnet.snu.ac.kr/~leedw ์ž…๋‹ˆ๋‹ค. MineFInder๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๊ตฌ์š”, ์ง€๋ขฐ์ฐพ๊ธฐ๋ฅผ ๋””์Šค์–ด์…ˆ๋ธ”๋งํ•ด์„œ ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ๋งต ์•ˆ์˜ 0x1005700 ๋ฒˆ์ง€๊ฐ€ ์ง€๋ขฐ์ฐพ๊ธฐ์˜ ์ „์ฒด ์ƒํƒœ ๋งต ๋ฐฐ์—ด์ด๋ž€๊ฑด ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ณณ ๋งต ์ƒํƒœ ๋ฐฐ์—ด์—์„œ 7๋ฒˆ์งธ ๋น„ํŠธ๊ฐ€ 1๋กœ ์…‹ํŒ…๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์— ํ•ด๋‹น๋˜๋Š” x, y์ขŒํ‘œ๊ฐ€ ์ง€๋ขฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์ด์ง€์š”. ๊ทธ๋ž˜์„œ ์ง€๋ขฐ์ฐพ๊ธฐ ๋งตํ•ต์„ ๋งŒ๋“ค์—ˆ๋”๋žฌ์Šต๋‹ˆ๋‹ค. ์ €๋Š” 'ํ•ด๋ถ€ํ•™์ž'๋ฅผ ๋ชจ๋ธ๋ง ํ–ˆ๋‹ค๊ณ ํ•˜๋ฉด ๋˜๊ฒ ๋„ค์š”. ์–ด์จŒ๋“  ํ—ˆ๋ฝํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :) --๋™์šฐ

์กฐ๋™์˜์ด๊ฐ€ ์ค‘๊ธ‰์œผ๋กœ 19์ดˆ๋„ ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค;; ์–ด๋””์„œ 05ํ•™๋ฒˆ์ค‘์— ๊น€์†Œํ˜„์ด๋ผ๋Š” ์นœ๊ตฌ๊ฐ€ ์†์œผ๋กœ ์ดˆ๊ธ‰ 10์ดˆ ์•ˆํŒ์ด ๋‚˜์˜จ๋‹ค๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. - ํ†ฑ์•„๋ณด๋‹ค
์ดˆ๊ธ‰์€ ๋‚˜๋„ 9์ดˆ๊นŒ์ง„ ํ•ด๋ดค์Œ. ๊ทธ๋ž˜๋„ ๋‚ด๊ฐ€ ๋ณธ ์ตœ๊ณ ๋Š” 97์˜ ํฌ์ง„๋ˆ„๋‹˜.; (๊ณ ๊ธ‰ 50-60์ดˆ๋Œ€) --1002

----
ํ”„๋กœ์ ํŠธ๋ถ„๋ฅ˜
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:45
Processing time 0.0217 sec