fiveView.cpp
上传用户:kkzhu_0
上传日期:2007-01-05
资源大小:214k
文件大小:10k
源码类别:

棋牌游戏

开发平台:

Visual C++

  1. // fiveView.cpp : implementation of the CFiveView class
  2. //
  3. #include "stdafx.h"
  4. #ifdef _DEBUG
  5. #define new DEBUG_NEW
  6. #undef THIS_FILE
  7. static char THIS_FILE[] = __FILE__;
  8. #endif
  9. #define ID_TIME_TEMP 13
  10. //////////////////////////////////////////////////////////////////////////////
  11. int CFiveView::m_Yingcount = 0;
  12. int CFiveView::m_Pingcount = 0;
  13. int CFiveView::m_Shucount  = 0;
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CFiveView
  16. IMPLEMENT_DYNCREATE(CFiveView, CView)
  17. BEGIN_MESSAGE_MAP(CFiveView, CView)
  18. //{{AFX_MSG_MAP(CFiveView)
  19. ON_WM_LBUTTONUP()
  20. ON_WM_TIMER()
  21. ON_WM_PAINT()
  22. ON_WM_ERASEBKGND()
  23. ON_WM_CREATE()
  24. ON_WM_SETCURSOR()
  25. //}}AFX_MSG_MAP
  26. END_MESSAGE_MAP()
  27. /////////////////////////////////////////////////////////////////////////////
  28. // CFiveView construction/destruction
  29. CFiveView::CFiveView()
  30. {
  31. // TODO: add construction code here
  32. m_pFive=NULL;
  33. m_Flags = TRUE;
  34. }
  35. CFiveView::~CFiveView()
  36. {
  37. }
  38. //BOOL CFiveView::PreCreateWindow(CREATESTRUCT& cs)
  39. //{
  40. // TODO: Modify the Window class or styles here by modifying
  41. //  the CREATESTRUCT cs
  42. // return CView::PreCreateWindow(cs);
  43. //}
  44. void CFiveView::DrawTable( CDC&dc )
  45. {
  46. int i;
  47. int W,D;
  48. CRect rect;
  49. GetClientRect( &rect );
  50. W = min(rect.right - rect.left,rect.bottom-rect.top );
  51. D = W/(FIVE_MAX_LINE+1);
  52. rect.left--;
  53. rect.right++;
  54. rect.top--;
  55. rect.bottom++;
  56. // dc.Rectangle( rect );
  57. dc.SelectObject(CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)));
  58. dc.Rectangle( D-1,D-1,D*FIVE_MAX_LINE+2,D*FIVE_MAX_LINE+2 );
  59.     for( i = 0;i < FIVE_MAX_LINE;i++ )
  60. {
  61. dc.MoveTo( D,D*(i+1) );
  62. dc.LineTo( D*FIVE_MAX_LINE,D*(i+1) );
  63. dc.MoveTo( D*(i+1),D );
  64. dc.LineTo( D*(i+1),D*FIVE_MAX_LINE );
  65. }
  66. }
  67. void CFiveView::DrawSub( CDC& dc,int m,int n,BOOL f )
  68. {
  69. CBrush brush;
  70. int W,D;
  71. CRect rect;
  72. GetClientRect( &rect );
  73. W = min(rect.right - rect.left,rect.bottom-rect.top );
  74. D = W/(FIVE_MAX_LINE+1);
  75. m_m = m+1;
  76. m_n = n+1;
  77. if( m_m == m&&m_n == n )
  78. {
  79. brush.CreateSolidBrush( RGB(255,0,0) );
  80. }else
  81. if( f == TRUE )
  82. brush.CreateSolidBrush( RGB(0,0,0) );
  83. else
  84. brush.CreateSolidBrush( RGB(255,255,255));
  85. dc.SelectObject( &brush );
  86. dc.Ellipse( D*(m+1) - D/2,D*(n+1) -D/2,D*(m+1) +D/2,D*(n+1) +D/2);
  87. }
  88. BOOL CFiveView::GetPosition( int x,int y ,int& m,int& n)
  89. {
  90. CBrush brush;
  91. int W,D;
  92. CRect rect;
  93. GetClientRect( &rect );
  94. W = min(rect.right - rect.left,rect.bottom-rect.top );
  95. D = W/(FIVE_MAX_LINE+1);
  96. m = x/D+0.5;
  97. n = y/D+0.5;
  98. if( m < 15&&m>= 0 &&n<15&&n>=0 )
  99. return TRUE;
  100. else
  101. return FALSE;
  102. }
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CFiveView drawing
  105. void CFiveView::OnDraw(CDC* pDC)
  106. {
  107. /*
  108. int i,j;
  109. CFive five;
  110. char Nf;
  111. //////////////////////////////////////////////////////////////////////
  112. CDC dc;
  113. CBitmap map;
  114. CBitmap*oldmap;
  115. int W;
  116. CRect rect;
  117. GetClientRect( &rect );
  118. W = min(rect.right - rect.left,rect.bottom-rect.top );
  119. CFiveDoc* pDoc = GetDocument();
  120. ASSERT_VALID(pDoc);
  121. dc.CreateCompatibleDC(pDC);
  122. map.CreateCompatibleBitmap( pDC, W,W );
  123. oldmap=(CBitmap*)dc.SelectObject( &map );
  124. DrawTable( dc );
  125. for( i = 0;i< FIVE_MAX_LINE;i++ )
  126. for( j = 0;j< FIVE_MAX_LINE;j++ )
  127.   {
  128.       Nf = five.GetSubPosition( i,j );
  129.   if( Nf == 'W' )
  130.   DrawSub( dc,i,j,FALSE );
  131.   else if( Nf == 'B' )
  132.   DrawSub( dc,i,j,TRUE );
  133.       }
  134. pDC->BitBlt( 0,0,W,W,&dc,0,0,SRCCOPY );
  135. dc.SelectObject( oldmap );
  136. // TODO: add draw code for native data here
  137. */
  138. /////////////////////////////////////////////////////////////////////////
  139. }
  140. /////////////////////////////////////////////////////////////////////////////
  141. // CFiveView diagnostics
  142. #ifdef _DEBUG
  143. void CFiveView::AssertValid() const
  144. {
  145. CView::AssertValid();
  146. }
  147. void CFiveView::Dump(CDumpContext& dc) const
  148. {
  149. CView::Dump(dc);
  150. }
  151. CFiveDoc* CFiveView::GetDocument() // non-debug version is inline
  152. {
  153. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFiveDoc)));
  154. return (CFiveDoc*)m_pDocument;
  155. }
  156. #endif //_DEBUG
  157. /////////////////////////////////////////////////////////////////////////////
  158. // CFiveView message handlers
  159. void CFiveView::OnLButtonUp(UINT nFlags, CPoint point) 
  160. {
  161. // TODO: Add your message handler code here and/or call default
  162. int m,n,rev,r;
  163. if( m_pFive == NULL )
  164. {
  165. if( GetPosition( point.x,point.y,m,n ) )
  166. {
  167. m_pFive = new CFive();
  168. rev = m_pFive -> WzqTest( m,n );
  169. if( AssertTest( rev ) == FALSE )
  170. {
  171. MessageBeep( 0 );
  172. m_m = m;
  173. m_n = n;
  174. Invalidate();
  175. UpdateWindow();
  176. r = m_pFive -> WzqRun( m,n );
  177. if(r == WZQ_NOTHREAD )
  178. {
  179. delete m_pFive;
  180. m_pFive = NULL;
  181. m_m = m;
  182. m_n = n;
  183. Invalidate();
  184. UpdateWindow();
  185. MessageBeep( 0 );
  186. rev = m_pFive -> WzqEndTest();
  187. AssertTest( rev );
  188. }else if( r == WZQ_ERROR )
  189. {
  190.     delete m_pFive;
  191.     m_pFive = NULL;
  192. AfxMessageBox( "WzqRun WZQ_ERROR" );
  193. }else
  194. {
  195. SetTimer(ID_TIME_TEMP,200,NULL );
  196. }
  197. }
  198. else
  199. {
  200. delete m_pFive;
  201. ResetPane();
  202. m_pFive = NULL;
  203.     m_m = m;
  204.     m_n = n;
  205.     Invalidate();
  206.     UpdateWindow();
  207.     MessageBeep( 0 );
  208. KillTimer(ID_TIME_TEMP);
  209. }
  210. }
  211. }
  212. // else
  213. // {
  214. // if( WaitForSingleObject( m_pFive->m_hThread,0 ) == WAIT_OBJECT_0 )
  215. // {
  216. // m_pFive->GetCurStep(m,n);
  217. // rev = m_pFive -> WzqEndTest();
  218. // AssertTest( rev );
  219. // delete m_pFive;
  220. // m_pFive = NULL;
  221. // MessageBeep( 0 );
  222. // }
  223. // }
  224. CView::OnLButtonUp(nFlags, point);
  225. }
  226. BOOL CFiveView::AssertTest( int rev )
  227. {
  228. CCountDlg dlg( this );
  229. switch( rev )
  230. {
  231. case WZQ_I:
  232. // ::MessageBox( NULL,"WZQ_I","",MB_OK );
  233. if( m_Flags ==TRUE )
  234. {
  235. m_Shucount++;
  236. m_Flags = FALSE;
  237. }
  238. dlg.m_Bai = m_Shucount;
  239. dlg.m_Yin = m_Yingcount;
  240. dlg.m_Ping= m_Pingcount;
  241. dlg.m_Text= WZQ_I;
  242. dlg.DoModal();
  243. return TRUE;
  244. case WZQ_YOU:
  245. // ::MessageBox(NULL, "WZQ_YOU","",MB_OK );
  246. if( m_Flags == TRUE )
  247. {
  248. m_Yingcount++;
  249. m_Flags = FALSE;
  250. }
  251. dlg.m_Bai = m_Shucount;
  252. dlg.m_Yin = m_Yingcount;
  253. dlg.m_Ping= m_Pingcount;
  254. dlg.m_Text= WZQ_YOU;
  255. dlg.DoModal();
  256. return TRUE;
  257. case WZQ_PING:
  258. // ::MessageBox( NULL,"WZQ_PING","",MB_OK );
  259. if( m_Flags == TRUE )
  260. {
  261. m_Pingcount++;
  262. m_Flags = FALSE;
  263. }
  264. dlg.m_Bai = m_Shucount;
  265. dlg.m_Yin = m_Yingcount;
  266. dlg.m_Ping= m_Pingcount;
  267. dlg.m_Text= WZQ_PING;
  268. dlg.DoModal();
  269. return TRUE;
  270. case WZQ_ERROR:
  271.             AfxMessageBox( "WZQ_ERROR" );
  272. return TRUE;
  273. case WZQ_HAVE:
  274. return TRUE;
  275. }
  276. return FALSE;
  277. }
  278. BOOL CFiveView::PreTranslateMessage(MSG* pMsg) 
  279. {
  280. // TODO: Add your specialized code here and/or call the base class
  281. if( m_pFive != NULL )
  282. {
  283. if( WaitForSingleObject( m_pFive->m_hThread,0 ) == WAIT_OBJECT_0 )
  284. {
  285. int m,n,rev;
  286. m_pFive->GetCurStep(m,n);
  287. rev = m_pFive -> WzqEndTest();
  288. ResetPane();
  289. delete m_pFive;
  290. m_pFive = NULL;
  291. m_m = m;
  292. m_n = n;
  293. Invalidate();
  294. UpdateWindow();
  295. MessageBeep( 0 );
  296. AssertTest( rev );
  297. KillTimer(ID_TIME_TEMP);
  298. }
  299. }
  300. return CView::PreTranslateMessage(pMsg);
  301. }
  302. void CFiveView::ResetPane()
  303. {
  304. CMainFrame* pwnd;
  305. pwnd = (CMainFrame*)AfxGetMainWnd();
  306. if( pwnd != NULL )
  307. {
  308. if( pwnd->IsKindOf( RUNTIME_CLASS( CMainFrame )))
  309. {
  310. pwnd->m_wndStatusBar.SetPaneText( 1,"        " );
  311. pwnd->m_wndStatusBar.SetPaneText( 2,"        " );
  312. pwnd->m_wndStatusBar.SetPaneText( 3,"        " );
  313. }
  314. }
  315. }
  316. long GetForCount()
  317. {
  318. CFive five;
  319. long rev,temp;
  320. int breadth,deep,thread,delta,i,c;
  321.     five.GetParam( breadth,deep,thread,delta );
  322. rev = breadth;
  323. i = breadth;
  324. temp = breadth;
  325. c = 1;
  326. while( i>0&&c<deep)
  327. {
  328. temp = i*temp;
  329. rev = temp + rev;
  330. i = i - delta;
  331. c++;
  332. }
  333. return rev/breadth;
  334. }
  335. void CFiveView::OnTimer(UINT nIDEvent) 
  336. {
  337. // TODO: Add your message handler code here and/or call default
  338. CMainFrame* pwnd;
  339. pwnd = (CMainFrame*)AfxGetMainWnd();
  340. if( pwnd != NULL )
  341. {
  342. if( pwnd->IsKindOf( RUNTIME_CLASS( CMainFrame )))
  343. {
  344. TCHAR Buf[20];
  345. if( m_pFive != NULL )
  346. {
  347. int i;
  348. i = (m_pFive.JingDuCount*100)/GetForCount();
  349. if( i > 100 )
  350. i = 100;
  351. wsprintf( Buf,"%d%c",i,'%' );
  352. pwnd->m_wndStatusBar.SetPaneText( 1,Buf );
  353. wsprintf( Buf,"%d",m_pFive->ThreadCount );
  354. pwnd->m_wndStatusBar.SetPaneText( 2,Buf );
  355. wsprintf( Buf,"%luKb",m_pFive->MemoryCount*400/1024);
  356. pwnd->m_wndStatusBar.SetPaneText( 3,Buf );
  357. }
  358. }
  359. }
  360. CView::OnTimer(nIDEvent);
  361. }
  362. void CFiveView::OnPaint() 
  363. {
  364. CPaintDC pDC(this); // device context for painting
  365. // TODO: Add your message handler code here
  366. int i,j;
  367. CFive five;
  368. char Nf;
  369. //////////////////////////////////////////////////////////////////////
  370. CDC dc;
  371. CBitmap map;
  372. CBitmap*oldmap;
  373. int W,H;
  374. CRect rect;
  375. GetClientRect( &rect );
  376. W = rect.right - rect.left;
  377. H = rect.bottom-rect.top;
  378. CFiveDoc* pDoc = GetDocument();
  379. ASSERT_VALID(pDoc);
  380. dc.CreateCompatibleDC(&pDC);
  381. map.CreateCompatibleBitmap( &pDC, W,H );
  382. oldmap=(CBitmap*)dc.SelectObject( &map );
  383. dc.Rectangle(-1,-1,W+1,H+1 ); 
  384. DrawTable( dc );
  385. for( i = 0;i< FIVE_MAX_LINE;i++ )
  386. for( j = 0;j< FIVE_MAX_LINE;j++ )
  387.   {
  388.       Nf = five.GetSubPosition( i,j );
  389.   if( Nf == 'W' )
  390.   DrawSub( dc,i,j,FALSE );
  391.   else if( Nf == 'B' )
  392.   DrawSub( dc,i,j,TRUE );
  393.       }
  394. pDC.BitBlt( 0,0,W,H,&dc,0,0,SRCCOPY );
  395. dc.SelectObject( oldmap );
  396. // Do not call CView::OnPaint() for painting messages
  397. }
  398. BOOL CFiveView::OnEraseBkgnd(CDC* pDC) 
  399. {
  400. // TODO: Add your message handler code here and/or call default
  401. // return CView::OnEraseBkgnd(pDC);
  402. return 1;
  403. }
  404. int CFiveView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  405. {
  406. if (CView::OnCreate(lpCreateStruct) == -1)
  407. return -1;
  408. // TODO: Add your specialized creation code here
  409. SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR_MAIN));
  410. ShowCursor( TRUE );
  411. return 0;
  412. }
  413. BOOL CFiveView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  414. {
  415. // TODO: Add your message handler code here and/or call default
  416. SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR_MAIN));
  417. // ShowCursor( TRUE );
  418. return TRUE;//CView::OnSetCursor(pWnd, nHitTest, message);
  419. }