Contents
- 1. ์๊ฐ
- 2. ๊ณํ
- 3. ์งํ ์ํฉ
- 4. ์ข ๋ฃํ ๊ฐ์๊ธฐ(?)
- 5. ์ฐธ์กฐ ๋ฌธ์
- 6. Opening
- 7. User Story
- 8. ๊ฐ๋จ ์์ ์ค๋น
- 9. Start. ์ด๋์ ๋ถํฐ ์ก์๊ฐ๊น.. ๋ฐ์ดํฐ ๋ชจ์ผ๊ธฐ
- 10. User Story & Engineering Task
- 11. First
- 12. Second - ์ต์ ํ์ ์๋
- 13. Third - ์ต์ ํ ์๋ 2
- 14. Fourth - ์ต์ ํ ์๋ 3
- 15. Fifth - ์ต์ ํ ์๋ 4
- 16. Thread
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.1. schedule ¶
ํน๋ณํ ์ก์๋ฐ ์์. --;
2์ 16์ผ๊น์ง ํ๋ก๊ทธ๋๋ฐ ์๋ฃ. 2์ 23์ผ๊น์ง ๋ฌธ์ํ ์๋ฃ.
2์ 16์ผ๊น์ง ํ๋ก๊ทธ๋๋ฐ ์๋ฃ. 2์ 23์ผ๊น์ง ๋ฌธ์ํ ์๋ฃ.
- ๋ชฉํ์์ - ๋ปํ์ง ์์ ๋ฌธ์ ๋ก. -_-; 2์ 28์ผ. ๋ง์ผ๊น์ง๋ ์ด๋ป๊ฒ๋ ! --;
2.2. ๊ธฐ๋ฅ spec ¶
- ์98, ์2000 ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ ์ง์ (ํ์ฌ 2000 ์ ์ ๋๋ก ์ง์. 98 ์ชฝ ํธํ์ฑ ๋์ด๊ธฐ์ค)
- ์ถํ ํ๋ก๊ทธ๋จ์ด ์ปค์ง ๊ฒฝ์ฐ '๋' ๋ถ๋ถ๊ณผ '์ง๋ฅ' ๋ถ๋ถ์ ๋ฐ๋ก ๋นผ๋ผ ์ ์๋๋ก ๊ถ๋ฆฌ.
- '๋' ํด๋น ๋ถ๋ถ - ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ผ๋ก๋ถํฐ ๋นํธ๋งต์ ์ป์ด ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๋ฃจํด ๊ด๋ จ๋ถ. ํ์ฌ bitmap 1:1 matching ๋ถ๋ถ์ด ๊ฐ์ฅ ๋ถํ๊ฐ ๋ง์ด ๊ฑธ๋ฆฌ๋ ๋ถ๋ถ์ผ๋ก ํ์ธ๋จ์ ๋ฐ๋ผ, ๊ฐ์ฅ ๊ฐ์ ํด์ผ ํ ๋ถ๋ถ.
- '์ง๋ฅ' ํด๋น ๋ถ๋ถ - ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ทผ๊ฑฐ๋ก ํด์ผ ํ ํ๋์ ๊ฒฐ์ ํ๋ ๋ถ๋ถ. ๊ธฐ๋ณธ์ ์ธ ํํ๋ ์ ํ์ํ๋จธ์ ์ ๋๋ค.
- ์ถํ DP ๋ก ํ์ฅ๋๋ค๋ฉด StrategyPattern ๊ณผ StatePattern ๋ฑ์ด ์ด์ฉ๋ ๊ฒ ๊ฐ์ง๋ง. ์ด๋ ์ถํ Refactoring ํด ๋๊ฐ๋ฉด์ ์๊ฐํด๋ณผ ์ฌํญ. ํ๋ก๊ทธ๋จ์ด ์ข ๋ ์ปค์ง๊ณ Refactoring ์ด ์ด๋ฃจ์ด์ง๋ค๋ฉด DLL ๋ถ๋ถ์ผ๋ก ๋น ์ ธ๋์ฌ ์ ์์๋ฏ. ('๋น ์ ธ๋์์ผ ํ ์ํฉ์ด ์๊ธธ๋ฏ' ์ด ๋ ์ ํํ์ง๋ง. -_-a)
- ์ถํ DP ๋ก ํ์ฅ๋๋ค๋ฉด StrategyPattern ๊ณผ StatePattern ๋ฑ์ด ์ด์ฉ๋ ๊ฒ ๊ฐ์ง๋ง. ์ด๋ ์ถํ Refactoring ํด ๋๊ฐ๋ฉด์ ์๊ฐํด๋ณผ ์ฌํญ. ํ๋ก๊ทธ๋จ์ด ์ข ๋ ์ปค์ง๊ณ Refactoring ์ด ์ด๋ฃจ์ด์ง๋ค๋ฉด DLL ๋ถ๋ถ์ผ๋ก ๋น ์ ธ๋์ฌ ์ ์์๋ฏ. ('๋น ์ ธ๋์์ผ ํ ์ํฉ์ด ์๊ธธ๋ฏ' ์ด ๋ ์ ํํ์ง๋ง. -_-a)
- '๋' ํด๋น ๋ถ๋ถ - ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ผ๋ก๋ถํฐ ๋นํธ๋งต์ ์ป์ด ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๋ฃจํด ๊ด๋ จ๋ถ. ํ์ฌ bitmap 1:1 matching ๋ถ๋ถ์ด ๊ฐ์ฅ ๋ถํ๊ฐ ๋ง์ด ๊ฑธ๋ฆฌ๋ ๋ถ๋ถ์ผ๋ก ํ์ธ๋จ์ ๋ฐ๋ผ, ๊ฐ์ฅ ๊ฐ์ ํด์ผ ํ ๋ถ๋ถ.
3. ์งํ ์ํฉ ¶
- 2์ 10์ผ
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ์๋์ฐ ํธ๋ค์ ์ป๊ณ ํด๋น ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด์ด์ ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ๋ ๋ฃจํด ๊ด๋ จ SpikeSolution. (์.. UnitTest ์ฝ๋ ๋ฃ๊ธฐ๊ฐ ์ ๋งคํด์ ์๋ฃ์๋ค. ๊ถ๋ฆฌํด๋ด์ผ ํ ๋ถ๋ถ๊ฐ๋ค.)
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ์๋์ฐ ํธ๋ค์ ์ป์๋ค DC๋ฅผ ์ป์ํ ํ๋ฉด ์บก์ณ. ๊ทธ๋ฆฌ๊ณ ์บก์ณํ ๋นํธ๋งต์ ๊ทผ๊ฑฐ๋ก ํ์ฌ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๋ฃจํด ๊ด๋ จ SpikeSolution
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ์๋์ฐ ํธ๋ค์ ์ป๊ณ ํด๋น ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด์ด์ ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ๋ ๋ฃจํด ๊ด๋ จ SpikeSolution. (์.. UnitTest ์ฝ๋ ๋ฃ๊ธฐ๊ฐ ์ ๋งคํด์ ์๋ฃ์๋ค. ๊ถ๋ฆฌํด๋ด์ผ ํ ๋ถ๋ถ๊ฐ๋ค.)
- 2์ 11์ผ
- Main Design, Algorithm 1์ฐจ ์์ฑ. ์ด๋์ ๋ Refactoring์ ์ถ๊ตฌ.
- Main Design, Algorithm 1์ฐจ ์์ฑ. ์ด๋์ ๋ Refactoring์ ์ถ๊ตฌ.
- 2์ 13์ผ
- ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ ๊ถ๋ฆฌ. 3๊ฐ์ง์ ๋ ๋์ ๋ชจ์.
- 98 ๋ฒ์ ์ ์ง๋ขฐ์ฐพ๊ธฐ์ 2000 ๋ฒ์ ์ ์ง๋ขฐ์ฐพ๊ธฐ๊ฐ ๋นํธ๋งต๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ ์๊ธฐ๋ ๋ฌธ์ ์ด๋์ ๋ ํด๊ฒฐ.
- ํ์ฌ ์๋
- Begineer mode ์ต๊ณ ๊ธฐ๋ก 1์ด, ํ๊ท 4-7์ด.
- Middle mode ์ต๊ณ ๊ธฐ๋ก 21์ด, ํ๊ท 30~50์ด ์์ชฝ.
- Expert mode ์ต๊ณ ๊ธฐ๋ก 151์ด. ๋จ, ๊นฐ ์ ์๋ ํ๋ฅ ๋ฎ์. -_-; ์. ํ๋ฅ ๋์ ์ฐ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๋ค๋. --;
- Begineer mode ์ต๊ณ ๊ธฐ๋ก 1์ด, ํ๊ท 4-7์ด.
- ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ ๊ถ๋ฆฌ. 3๊ฐ์ง์ ๋ ๋์ ๋ชจ์.
- 2์ 26์ผ
- ๋ํ๋จผํธ ์ถ๊ฐ์ค. (์ผ์ฃผ์ผ์ ํธ์ฑ ๋์๋ค๋. -_-;)
- ๋ํ๋จผํธ ์ถ๊ฐ์ค. (์ผ์ฃผ์ผ์ ํธ์ฑ ๋์๋ค๋. -_-;)
- 2์ 27์ผ
- Expert mode 51์ด, Middle mode 11์ด ๊ธฐ๋ก. ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ์ ๋ํ ๋ค๋ฅธ ๊ด์ ์ก์. (ํ์ง๋ง, ์ฌ์ ํ ๊นฐ ์ ์๋ ํ๋ฅ ๋ฎ์)
- Expert mode 51์ด, Middle mode 11์ด ๊ธฐ๋ก. ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ์ ๋ํ ๋ค๋ฅธ ๊ด์ ์ก์. (ํ์ง๋ง, ์ฌ์ ํ ๊นฐ ์ ์๋ ํ๋ฅ ๋ฎ์)
- 2์ 28์ผ, 3์ 1์ผ
- Expert mode ๊นฐ ์ ์๋ ํ๋ฅ ์ ๋์. ์ต์ ํ๋ด์์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ๋ ํ๋ค๋ฏ. 98๊ณผ์ ํธํ์ฑ ํฅ์๋ฌธ์ ํด๊ฒฐ์ดํ ์ข
๋ฃ ์์ .
- 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. ๊ฐ๋จ ์์ ์ค๋น ¶
- Spy++
- Visual C++ (2๊ฐ ์ด์ด๋๊ณ ์ด๋ค. ํ๋๋ ํด๋น ๋ถ๋ถ๋ถ๋ถ ์ฐ์ต์ฉ ์ฝ๋ ๋ง๋ค ๊ณณ. ํ๋๋ ๋ฉ์ธ์์ค ๋ง๋ค ๊ณณ)
- ์ธ๋ฑ์ค ์นด๋ & ํ๊ธฐ๊ตฌ - CRC ๋ฅผ ์ฐ๊ฑด UserStory๋ฅผ ์ฐ๊ฑด..~ ๋จ,
- ์ง๋ขฐ์ฐพ๊ธฐ
- 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๋ฅผ ๋ณด๋ธ๋ค.
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์๊ฒ ํด๋น ํ๋ Message๋ฅผ ๋ณด๋ธ๋ค.
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ํ๋ฉด์ Capture, ๋ถ์ํ๋ค ๋ฐ์ดํฐํํ๋ค.
- ํ์ฌ ์ด๋ ค์๋ ํ๋ก๊ทธ๋จ ์ค์์ ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ์๋์ฐ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ฐพ์๋ธ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ Begineer Mode ๋ง์ ์ง์ํ๋ค.
- ์ปดํจํฐ๋ ํ์ฌ์ ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ ์ํฉ์ ์์์ ํ๋จํ๊ณ , ํด๋น ํ๋์ ๊ฒฐ์ ํ๋ค.
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ ๋นํธ๋งต ๋ฐ์ดํฐ๋ฅผ ๊ทผ๊ฑฐ๋ก ์์น๋ฐ์ดํฐํํ๋ค.
- ๊ฒ์ ์์ & ๊ฒ์์ค์ธ ์ํ ํ์ธ
- ๊ฒ์ ์คํจ์ธ ์ํ ํ์ธ
- ๊ฒ์ ํด๋ฆฌ์ด์ธ ์ํ ํ์ธ
- ๋น์นธ, ๊น๋ฐ์ฒดํฌ, ์ซ์๋ค ๋ฑ Cell๋ค์ ๋ํ ์ํ ํ์ธ
- ๊ฒ์ ์์ & ๊ฒ์์ค์ธ ์ํ ํ์ธ
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋จ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋ ๋ค.
- ๊น๋ฐ ์ฒดํฌ๋ฅผ ํด์ผ ํ ๋
- ๋น์นธ์ ์ด์ด์ผ ํ ๋
- ๋น์นธ ์ฐ๊ธฐ๋ฅผ ํด์ผ ํ ๋
- ๊น๋ฐ ์ฒดํฌ๋ฅผ ํด์ผ ํ ๋
- ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ ๋นํธ๋งต ๋ฐ์ดํฐ๋ฅผ ๊ทผ๊ฑฐ๋ก ์์น๋ฐ์ดํฐํํ๋ค.
- ์ปดํจํฐ๊ฐ ์คํจํ์ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ค์ ์์ํ์ฌ, ์ฌ์ฉ์๊ฐ ์ค์ง์ํค๊ฑฐ๋ ์ง๋ขฐ๋ฅผ ๋ค ์ฐพ์๋๊น์ง ํ๋ก๊ทธ๋จ์ ๊ณ์ ์งํ์ํจ๋ค.
- ๊ฒ์ ์คํจ์ธ ์ํ์ ๋ํ ํ์ธํ๊ธฐ.
- ํ๋ก๊ทธ๋จ์ ๋ค์ ์์ํ๋๋ก ์กฐ์ํ๊ธฐ.
- ๊ฒ์ ์คํจ์ธ ์ํ์ ๋ํ ํ์ธํ๊ธฐ.
11. First ¶
- 1์ฐจ์ ์์์ค
- ์ ์ : ์ด๋๋ Windows ME, Windows 2000 ์ด์์์๋ง ์คํ๊ฐ๋ฅํ๋ค. (์ง๋ขฐ์ฐพ๊ธฐ ๋นํธ๋งต์ด 98๊ณผ ๋ค๋ฅด๋ค)
- ๊ธฐ๋ก : ์ด๊ธ 8-9์ด, ์ค๊ธ 90-100์ด, ๊ณ ๊ธ์ชฝ์ ๋๋ฌด ๋๋ ค์ ํ
์คํธ ํฌ๊ธฐ. -_-;
- ์ ์ : ์ด๋๋ Windows ME, Windows 2000 ์ด์์์๋ง ์คํ๊ฐ๋ฅํ๋ค. (์ง๋ขฐ์ฐพ๊ธฐ ๋นํธ๋งต์ด 98๊ณผ ๋ค๋ฅด๋ค)
CMinerBitmapAnalyzer | ๋นํธ๋งต์ ๋ถ์, ๋ฐ์ดํฐํํ๋ค. |
CMinerController | ์ง๋ขฐ์ฐพ๊ธฐ ํ๋ก๊ทธ๋จ์ ๋ํ ํ๋ฉด ์บก์ณ, ๋ชจ๋๋ณํ, ๋ฒํผ ํด๋ฆญ ๋ฑ์ ์ ์ด๋ฅผ ํ๋ค |
CMineSweeper | ์ค์ง์ ์ธ ๋๋์ ํด๋น๋๋ ๋ถ๋ถ. CMinerController ์ CMinerBitampAnalyzer ๋ฅผ ๋ฉค๋ฒ๋ก ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์์ํฉ๋ถ์, ์ง๋ขฐ์ฐพ๊ธฐ๊ด๋ จ ํ๋จ ๋ฑ์ ํ๋ค |
~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 (); }
~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)
~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.
~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์ค ๋งํ๋ ์์ ๋ฐฉ์์ผ๋ก ํ๋ฐํ๋ ค๊ณ ํ๋๊ฒ ๋ฌธ์ ์ด๋ค. -_-;)
- ์ ์ : ์ฌ์ ํ Windows ME, Windows 2000 ์ด์์์๋ง ์คํ๊ฐ๋ฅํ๋ค. (์ง๋ขฐ์ฐพ๊ธฐ ๋นํธ๋งต์ด 98๊ณผ ๋ค๋ฅด๋ค)
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์ด ์ํ์ด ๋์จ๋ค๊ณ ๋ค์์ต๋๋ค. - ํฑ์๋ณด๋ค
----
ํ๋ก์ ํธ๋ถ๋ฅ
๊ฒ์์ ํ๋ค๊ฐ ์ฐ์ฐํ MineFinder ํ์ด์ง๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์๋นํ ์ฌ๋ฏธ์๋๊ตฐ์, ์์ค๋ฅผ ๋ฌด์ฒ ๊น๋ํ๊ฒ ์ดํดํ๊ธฐ ์ฝ๋๋ก ๋ง๋์ ์ ๋ฌด์ฒ ์ธ์๊น๊ฒ ๋ดค์ต๋๋ค. ๋ค๋ฆ์ด ์๋์ค๋ผ ์ง๋ฌธ์ด ์์ด์ ์ด๋ ๊ฒ ๊ธ์ ๋จ๊น๋๋ค. ์ง๋ขฐ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์์ ๊ฐ ๋ธ๋ญ์ ์ํ๋ฅผ ๋นํธ๋งต์ผ๋ก ๋น๊ต๋ฅผ ํ๊ณ ์๋๋ฐ ์ง๋ขฐ์ฐพ๊ธฐ ์๋์ฐ์ ๋นํธ๋งต ๋ฐ์ดํ๋ฅผ ์ด๋ป๊ฒ ์ถ์ถํ์ จ๋์ง ๊ถ๊ธํฉ๋๋ค. ์ ๊ฐ ์๋์ฐ ์ด๋ณด๋ผ์ ๊ทธ๋ฐ์ง ๋ชฐ๋ผ๋ ๋ฌด์ฒ ๊ถ๊ธํ๋ค์. ๊ทธ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์์ฉ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ผ๋ง๋ ์์ฉํ ์ ์์ ๊ฒ ๊ฐ์์์. ๋ต๋ณ ๋ถํ๋๋ฆฝ๋๋ค. --๋์ฐ

.png)

.png)
์ด๊ธ์ ๋๋ 9์ด๊น์ง ํด๋ดค์. ๊ทธ๋๋ ๋ด๊ฐ ๋ณธ ์ต๊ณ ๋ 97์ ํฌ์ง๋๋.; (๊ณ ๊ธ 50-60์ด๋) --1002
ํ๋ก์ ํธ๋ถ๋ฅ