ttqDlg.cpp
上传用户:hlqcw8
上传日期:2007-01-08
资源大小:438k
文件大小:14k
源码类别:

棋牌游戏

开发平台:

Visual C++

  1. // ttqDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ttq.h"
  5. #include "ttqDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. extern HBITMAP hBmp,hbmmp;
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CTtqDlg dialog
  14. CTtqDlg::CTtqDlg(CWnd* pParent /*=NULL*/)
  15. {
  16. //{{AFX_DATA_INIT(CTtqDlg)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  20. itn=0; itnu=0; itnd=0;
  21. Tzq.m_cwnd=this;
  22. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  23. }
  24. BEGIN_MESSAGE_MAP(CTtqDlg, CWnd)
  25. //{{AFX_MSG_MAP(CTtqDlg)
  26. ON_WM_PAINT()
  27. ON_WM_QUERYDRAGICON()
  28. ON_WM_MOUSEMOVE()
  29. ON_WM_LBUTTONDOWN()
  30. ON_WM_LBUTTONUP()
  31. ON_WM_RBUTTONDOWN()
  32. //}}AFX_MSG_MAP
  33. END_MESSAGE_MAP()
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CTtqDlg message handlers
  36. BOOL CTtqDlg::OnInitDialog()
  37. {
  38. // Set the icon for this dialog.  The framework does this automatically
  39. //  when the application's main window is not a dialog
  40. SetIcon(m_hIcon, TRUE); // Set big icon
  41. SetIcon(m_hIcon, FALSE); // Set small icon
  42. // TODO: Add extra initialization here
  43. return TRUE;  // return TRUE  unless you set the focus to a control
  44. }
  45. // If you add a minimize button to your dialog, you will need the code below
  46. //  to draw the icon.  For MFC applications using the document/view model,
  47. //  this is automatically done for you by the framework.
  48. void CTtqDlg::OnPaint() 
  49. {
  50. CPaintDC dc(this); // device context for painting
  51. HCURSOR hcur;
  52. hcur=LoadCursor(
  53. AfxGetInstanceHandle(),  // handle to application instance
  54. MAKEINTRESOURCE(IDC_CURSOR4) // name string or cursor resource identifier
  55. );
  56. SetCursor(hcur);
  57. // if (hBmp)
  58. // {
  59. BITMAP bm;
  60. GetObject(hBmp, sizeof(bm), &bm);
  61. HDC memdc = CreateCompatibleDC(NULL);
  62. HBITMAP h = (HBITMAP)SelectObject(memdc, hbmmp);
  63. BitBlt( dc.m_hDC,0, 0, bm.bmWidth, bm.bmHeight, memdc, 0, 0, SRCCOPY);
  64. SelectObject(memdc, h);
  65. // SelectObject(memdc, h);
  66. CBitmap bitmapbk,bitmap[6],bitmapb,bitmapc;
  67. CDC dcmemb,dcmem[6],dcmembk,dcmemc;
  68. bitmap[1].LoadBitmap(IDB_BITMAP2);
  69. bitmap[2].LoadBitmap(IDB_BITMAP4);
  70. bitmap[3].LoadBitmap(IDB_BITMAP5);
  71. bitmap[4].LoadBitmap(IDB_BITMAP6);
  72. bitmap[5].LoadBitmap(IDB_BITMAP3);
  73. bitmap[0].LoadBitmap(IDB_BITMAP1);
  74. bitmapbk.LoadBitmap(IDB_BITMAP12);
  75. bitmapb.LoadBitmap(IDB_BITMAP8);
  76. bitmapc.LoadBitmap(IDB_BITMAP10);
  77. dcmem[1].CreateCompatibleDC(&dc);
  78. dcmem[2].CreateCompatibleDC(&dc);
  79. dcmem[3].CreateCompatibleDC(&dc);
  80. dcmem[4].CreateCompatibleDC(&dc);
  81. dcmem[5].CreateCompatibleDC(&dc);
  82. dcmem[0].CreateCompatibleDC(&dc);
  83. dcmemb.CreateCompatibleDC(&dc);
  84. dcmemc.CreateCompatibleDC(&dc);
  85. dcmembk.CreateCompatibleDC(&dc);
  86. dcmem[1].SelectObject(&bitmap[1]);
  87. dcmem[2].SelectObject(&bitmap[2]);
  88. dcmem[3].SelectObject(&bitmap[3]);
  89. dcmem[4].SelectObject(&bitmap[4]);
  90. dcmem[5].SelectObject(&bitmap[5]);
  91. dcmem[0].SelectObject(&bitmap[0]);
  92. dcmembk.SelectObject(&bitmapbk);
  93. dcmemb.SelectObject(&bitmapb);
  94. dcmemc.SelectObject(&bitmapc);
  95. for(int i=0;i<6;i++)
  96. for(int j=0;j<10;j++)
  97. {
  98. if(Tzq.nPlayType[i]!=0)
  99. if(Tzq.aPlace[i][j].pTzq->nColor!=0)
  100. {
  101. if(Tzq.aPlace[i][j].nTestUD==0){
  102. dc.BitBlt(
  103. Tzq.aPlace[i][j].pTzq->n_x-10,
  104. Tzq.aPlace[i][j].pTzq->n_y-10,
  105. 21,21,&dcmembk,0,0,SRCAND);
  106. dc.BitBlt(
  107. Tzq.aPlace[i][j].pTzq->n_x-10,
  108. Tzq.aPlace[i][j].pTzq->n_y-10,
  109. 21,21,&dcmem[i],0,0,SRCPAINT);
  110. }
  111. else{
  112. dc.BitBlt(
  113. Tzq.aPlace[i][j].pTzq->n_x-6,
  114. Tzq.aPlace[i][j].pTzq->n_y-4,
  115. 21,21,&dcmemb,0,0,SRCAND);
  116. dc.BitBlt(
  117. Tzq.aPlace[i][j].pTzq->n_x-6,
  118. Tzq.aPlace[i][j].pTzq->n_y-4,
  119. 21,21,
  120. &dcmemc,0,0,SRCPAINT);
  121. dc.BitBlt(
  122. Tzq.aPlace[i][j].pTzq->n_x-13,
  123. Tzq.aPlace[i][j].pTzq->n_y-13,
  124. 21,21,&dcmembk,0,0,SRCAND);
  125. dc.BitBlt(
  126. Tzq.aPlace[i][j].pTzq->n_x-13,
  127. Tzq.aPlace[i][j].pTzq->n_y-13,
  128. 21,21,&dcmem[i],0,0,SRCPAINT);
  129. }
  130. }
  131. }
  132. if(Tzq.nPlayType[Tzq.nPlaySyst]!=0)
  133. {
  134. dc.BitBlt(
  135. 390-6,
  136. 56-4,
  137. 21,21,&dcmemb,0,0,SRCAND);
  138. dc.BitBlt(
  139. 390-6,
  140. 56-4,
  141. 21,21,
  142. &dcmemc,0,0,SRCPAINT);
  143. dc.BitBlt(
  144. 390-13,
  145. 56-13,
  146. 21,21,&dcmembk,0,0,SRCAND);
  147. dc.BitBlt(
  148. 390-13,
  149. 56-13,
  150. 21,21,&dcmem[Tzq.nPlaySyst],0,0,SRCPAINT);
  151. }
  152. }
  153. // The system calls this to obtain the cursor to display while the user drags
  154. //  the minimized window.
  155. HCURSOR CTtqDlg::OnQueryDragIcon()
  156. {
  157. return (HCURSOR) m_hIcon;
  158. }
  159. LRESULT CTtqDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  160. {
  161. // TODO: Add your specialized code here and/or call the base class
  162. switch (message) 
  163. { case WM_NCHITTEST:
  164. // hdc = BeginPaint (hWnd, &ps);
  165. RECT yj1;
  166. ::GetWindowRect(this->m_hWnd,&yj1);
  167. // CRect yj22;
  168. POINTS yj2=(POINTS)MAKEPOINTS(lParam);
  169. // EndPaint (hWnd, &ps);
  170. if(yj2.x>yj1.left+230&&yj2.x<yj1.left+419&&yj2.y>yj1.top&&yj2.y<yj1.top+20)
  171. return HTCAPTION;
  172. return HTCLIENT;
  173. case WM_KEYDOWN:
  174. if (wParam != VK_ESCAPE)
  175. break;
  176. case WM_DESTROY:
  177. if(this->MessageBox("你真的要退出游戏吗?","跳子棋",MB_OKCANCEL|MB_ICONQUESTION )==IDOK)
  178. PostQuitMessage(0);
  179. break;
  180. default:
  181. return CWnd::WindowProc(message, wParam, lParam);
  182. }
  183. return CWnd::WindowProc(message, wParam, lParam);
  184. }
  185. void CTtqDlg::OnMouseMove(UINT nFlags, CPoint point) 
  186. {
  187. // TODO: Add your message handler code here and/or call default
  188. //新游戏按纽绘制
  189. CClientDC pDC(this);
  190. CRect yj(301,32,360,52);
  191. if(itnd==0)
  192. if(itn==0){
  193. if(yj.PtInRect(point))
  194. {
  195. pDC.SelectStockObject(WHITE_PEN ) ; 
  196. pDC.MoveTo(360,33);
  197. pDC.LineTo(301,33);
  198. pDC.LineTo(301,52);
  199. pDC.SelectStockObject(BLACK_PEN);
  200. pDC.LineTo(360,52);
  201. pDC.LineTo(360,32);
  202. itn=1;
  203. }
  204. }
  205. else{
  206. if(yj.PtInRect(point))
  207. {
  208. }
  209. else{
  210. InvalidateRect(CRect(295,30,370,60),0);
  211. itn=0;
  212. }
  213. }
  214. // MoveWindow(point.x,point.y,453,504,TRUE);
  215. CWnd::OnMouseMove(nFlags, point);
  216. }
  217. void CTtqDlg::OnLButtonDown(UINT nFlags, CPoint point) 
  218. {
  219. // TODO: Add your message handler code here and/or call default
  220. //新游戏按纽绘制
  221. CClientDC pDC(this);
  222. CRect yj(301,32,360,52);
  223. if(itnd==0){
  224. if(yj.PtInRect(point))
  225. {
  226. pDC.SelectStockObject(BLACK_PEN);
  227. pDC.MoveTo(360,33);
  228. pDC.LineTo(301,33);
  229. pDC.LineTo(301,52);
  230. pDC.SelectStockObject(WHITE_PEN ) ;
  231. pDC.LineTo(360,52);
  232. pDC.LineTo(360,32);
  233. itnd=1;
  234. SetCapture();
  235. }
  236. }
  237. //判断是否点击退出游戏
  238. CRect rclose(420,0,437,19);
  239. if(rclose.PtInRect(point))
  240. {
  241. if(this->MessageBox("你真的要退出游戏吗?","跳子棋",MB_OKCANCEL|MB_ICONQUESTION )==IDOK)
  242. PostQuitMessage(0);
  243. }
  244. //判断是否点击棋子
  245. CRect rgn;
  246. if(Tzq.nPlayType[Tzq.nPlaySyst]==1)
  247. {
  248. if(this->nqztempud==0||tempplace.pTzq==Tzq.pPlace->pTzq)
  249. {
  250. for(int i=0;i<10;i++)
  251. {
  252. rgn=CRect(
  253. Tzq.aPlace[Tzq.nPlaySyst][i].pTzq->n_x-9,
  254. Tzq.aPlace[Tzq.nPlaySyst][i].pTzq->n_y-9,
  255. Tzq.aPlace[Tzq.nPlaySyst][i].pTzq->n_x+9,
  256. Tzq.aPlace[Tzq.nPlaySyst][i].pTzq->n_y+9);
  257. if(rgn.PtInRect(point))
  258. if(Tzq.pPlace!=NULL){
  259. Tzq.pPlace->nTestUD=0;
  260. this->InvalidateRect(
  261. CRect(
  262. Tzq.pPlace->pTzq->n_x-15,
  263. Tzq.pPlace->pTzq->n_y-15,
  264. Tzq.pPlace->pTzq->n_x+17,
  265. Tzq.pPlace->pTzq->n_y+17),0);
  266. }
  267. Tzq.pPlace=&Tzq.aPlace[Tzq.nPlaySyst][i];
  268. this->tempplace.pTzq=Tzq.pPlace->pTzq;
  269. TM=TRUE;
  270. Tzq.pPlace->nTestUD=1;
  271. this->InvalidateRect(
  272. CRect(
  273. Tzq.pPlace->pTzq->n_x-15,
  274. Tzq.pPlace->pTzq->n_y-15,
  275. Tzq.pPlace->pTzq->n_x+17,
  276. Tzq.pPlace->pTzq->n_y+17),0);
  277. }
  278. }
  279. if(Tzq.pPlace==NULL)
  280. return;
  281. this->nqztempud=1;
  282. }
  283. if(this->nqztempud!=0)
  284. {
  285. BOOL TempYn=FALSE;
  286. int tempQZ=Tzq.qzsetel(point);
  287. if(Tzq.aTzqFull[tempQZ].nColor==0)
  288. for(int it=0;it<6;it++)
  289. {
  290. TempYn=Tzq.StepPath(Tzq.pPlace,&Tzq.aTzqFull[tempQZ],it);
  291. if(TempYn==TRUE)
  292. break;
  293. }
  294. //刷新视
  295. if(TempYn==TRUE)
  296. {
  297. Tzq.pPlace->pTzq->nColor=0;
  298. this->InvalidateRect(
  299. CRect(
  300. Tzq.pPlace->pTzq->n_x-15,
  301. Tzq.pPlace->pTzq->n_y-15,
  302. Tzq.pPlace->pTzq->n_x+17,
  303. Tzq.pPlace->pTzq->n_y+17),0);
  304. Tzq.pPlace->pTzq=&Tzq.aTzqFull[tempQZ];
  305. Tzq.pPlace->pTzq->nColor=Tzq.nPlaySyst+1;
  306. this->InvalidateRect(
  307. CRect(
  308. Tzq.pPlace->pTzq->n_x-15,
  309. Tzq.pPlace->pTzq->n_y-15,
  310. Tzq.pPlace->pTzq->n_x+17,
  311. Tzq.pPlace->pTzq->n_y+17),0);
  312. }
  313. // if(Tzq.pPlace->pTzq
  314. }
  315. }
  316. CWnd::OnLButtonDown(nFlags, point);
  317. }
  318. void CTtqDlg::OnLButtonUp(UINT nFlags, CPoint point) 
  319. {
  320. // TODO: Add your message handler code here and/or call default
  321. //新游戏确定
  322. CRect yj(301,32,360,52);
  323. if(itnd==1){
  324. InvalidateRect(CRect(295,30,370,60),0);
  325. itnd=0;
  326. if(yj.PtInRect(point))
  327. {
  328. NewGame();
  329. Invalidate(0);
  330. }
  331. ReleaseCapture();
  332. }
  333. CWnd::OnLButtonUp(nFlags, point);
  334. }
  335. void CTtqDlg::OnRButtonDown(UINT nFlags, CPoint point) 
  336. {
  337. // TODO: Add your message handler code here and/or call default
  338. //下子确定
  339. CRect rgn;
  340. BOOL bpbb;
  341. int sss;
  342. sss=0;
  343. bpbb=0;
  344. if(Tzq.pPlace==NULL)
  345. return;
  346. for(int i=0;i<Tzq.pPlace->nPlaceArray.GetSize();i++){
  347. rgn= CRect(
  348. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_x-9,
  349. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_y-9,
  350. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_x+9,
  351. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_y+9);
  352. if(rgn.PtInRect(point))
  353. {
  354. if((Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].nArea==(Tzq.nPlaySyst+1))
  355. ||(Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].nArea==0)
  356. ||(Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].nArea==((Tzq.nPlaySyst+3>=6)?(Tzq.nPlaySyst-3):(Tzq.nPlaySyst+3))+1))
  357. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].nColor=Tzq.nPlaySyst+1;;//Tzq.pPlace->pTzq->nColor;
  358. if(Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].nQz!=Tzq.pPlace->pTzq->nQz)
  359. Tzq.pPlace->pTzq->nColor=0;
  360. this->InvalidateRect(
  361. CRect(
  362. Tzq.pPlace->pTzq->n_x-15,
  363. Tzq.pPlace->pTzq->n_y-15,
  364. Tzq.pPlace->pTzq->n_x+17,
  365. Tzq.pPlace->pTzq->n_y+17),0);
  366. Tzq.pPlace->pTzq=&Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]];
  367. TM=0;
  368. Tzq.pPlace->nTestUD=0;
  369. this->InvalidateRect(
  370. CRect(
  371. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_x-15,
  372. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_y-15,
  373. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_x+17,
  374. Tzq.aTzqFull[Tzq.pPlace->nPlaceArray[i]].n_y+17),0);
  375. bpbb=TRUE ;
  376. sss=1;
  377. break;
  378. }
  379. }
  380. }
  381. if((Tzq.pPlace->pTzq->nArea==(Tzq.nPlaySyst+1))
  382. ||(Tzq.pPlace->pTzq->nArea==0)
  383. ||(Tzq.pPlace->pTzq->nArea==((Tzq.nPlaySyst+3>=6)?(Tzq.nPlaySyst-3):(Tzq.nPlaySyst+3))+1))
  384. if(Tzq.pPlace->pTzq!=this->tempplace.pTzq)
  385. {
  386. bpbb=TRUE ;
  387. sss=1;
  388. Tzq.pPlace->nTestUD=0;
  389. this->InvalidateRect(
  390. CRect(
  391. Tzq.pPlace->pTzq->n_x-15,
  392. Tzq.pPlace->pTzq->n_y-15,
  393. Tzq.pPlace->pTzq->n_x+17,
  394. Tzq.pPlace->pTzq->n_y+17),0);
  395. this->tempplace.pTzq=NULL;
  396. }
  397. if(sss==1)
  398. {
  399. if(bpbb)
  400. Tzq.pPlace=NULL;
  401. int ffff=1,fff1=1;
  402. int tend;
  403. tend=Tzq.nPlaySyst+3;
  404. if(tend>5)
  405. tend=Tzq.nPlaySyst-3;
  406. for(int abqq=0;abqq<10;abqq++)
  407. {
  408. if(Tzq.aPlace[Tzq.nPlaySyst][abqq].pTzq->nArea!=tend+1)
  409. ffff=0;
  410. }
  411. if(ffff==1){
  412. CString yj;
  413. yj.Format("!!!玩家%d",Tzq.nPlaySyst+1);
  414. yj+="下完!!!";
  415. MessageBox(yj,"跳子棋");
  416. // newgame();
  417. // this->Invalidate(0);
  418. Tzq.nPlayType[Tzq.nPlaySyst]=0;
  419. }
  420. int nti=0;
  421. for(int t=0;t<6;t++)
  422. {
  423. nti+=Tzq.nPlayType[t];
  424. }
  425. if(nti==0)
  426. return;
  427. for(Tzq.qzc=0;Tzq.qzc<6;Tzq.qzc++)
  428. Tzq.ChessFull();
  429. this->nqztempud=0;
  430. sss=0;
  431. Tzq.nPlaySyst++;
  432. Tzq.nPlaySyst%=6;
  433. while(Tzq.nPlayType[Tzq.nPlaySyst]==0)
  434. {
  435. Tzq.nPlaySyst++;
  436. Tzq.nPlaySyst%=6;
  437. }
  438. Tzq.GameStep();
  439. }
  440. CWnd::OnRButtonDown(nFlags, point);
  441. }
  442. CTtqDlg::NewGame()
  443. {
  444. m_straEndName.RemoveAll();
  445. this->nqztempud=0;
  446. CNewGame newgame;
  447. TM=0;
  448. Tzq.nPlaySyst=0;
  449. newgame.m_Play1=1;
  450. newgame.m_Play2=0;
  451. newgame.m_Play3=0;
  452. newgame.m_Play4=2;
  453. newgame.m_Play5=0;
  454. newgame.m_Play6=0;
  455. newgame.m_PlayType=0;
  456. newgame.m_PlayName="新玩家";
  457. newgame.m_PlayAdd="";
  458. int nResponse = newgame.DoModal();
  459. if (nResponse == IDOK)
  460. {
  461. // TODO: Place code here to handle when the dialog is
  462. //  dismissed with OK
  463. Tzq.NewGame();
  464. Tzq.nPlayType[0]=newgame.m_Play1;
  465. Tzq.nPlayType[1]=newgame.m_Play2;
  466. Tzq.nPlayType[2]=newgame.m_Play3;
  467. Tzq.nPlayType[3]=newgame.m_Play4;
  468. Tzq.nPlayType[4]=newgame.m_Play5;
  469. Tzq.nPlayType[5]=newgame.m_Play6;
  470. Tzq.SetTF_nColor();
  471. this->Invalidate(1);
  472. int tzplay=6;
  473. for(Tzq.qzc=0;Tzq.qzc<6;Tzq.qzc++)
  474. Tzq.ChessFull();
  475. while(!Tzq.nPlayType[newgame.m_PlayBegin-1])
  476. {
  477. newgame.m_PlayBegin++;
  478. if(newgame.m_PlayBegin>6)
  479. newgame.m_PlayBegin=1;
  480. tzplay--;
  481. if(tzplay==0)break;
  482. }
  483. Tzq.nPlaySyst=newgame.m_PlayBegin-1;
  484. if(Tzq.nPlaySyst>=0&&Tzq.nPlaySyst<=5)
  485. if(Tzq.nPlayType[Tzq.nPlaySyst]!=0)
  486. {
  487. Tzq.BeginGame=TRUE;
  488. Tzq.GameStep();
  489. }
  490. }
  491. else if (nResponse == IDCANCEL)
  492. {
  493. // TODO: Place code here to handle when the dialog is
  494. //  dismissed with Cancel
  495. }
  496. }