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