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.0673 sec