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