xiangqi.cpp
上传用户:lcjhgg
上传日期:2022-06-30
资源大小:5k
文件大小:23k
源码类别:

棋牌游戏

开发平台:

Visual C++

  1. // 象棋2View.cpp : implementation of the CMy2View class
  2. //
  3. #include "stdafx.h"
  4. #include "象棋2.h"
  5. #include "象棋2Doc.h"
  6. #include "象棋2View.h"
  7. #include <mmsystem.h> 
  8. #include "resource.h"
  9. #pragma comment(lib,"winmm.lib")
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CMy2View
  17. IMPLEMENT_DYNCREATE(CMy2View, CView)
  18. BEGIN_MESSAGE_MAP(CMy2View, CView)
  19. //{{AFX_MSG_MAP(CMy2View)
  20. ON_WM_LBUTTONDOWN()
  21. ON_COMMAND(IDC_CXKS, OnCxks)
  22. ON_COMMAND(IDC_BC, OnBc)
  23. ON_COMMAND(IDC_DK, OnDk)
  24. ON_COMMAND(IDC_1, On1)
  25. ON_COMMAND(IDC_2, On2)
  26. ON_COMMAND(IDC_3, On3)
  27. ON_WM_CREATE()
  28. //}}AFX_MSG_MAP
  29. // Standard printing commands
  30. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  31. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  32. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  33. END_MESSAGE_MAP()
  34. /////////////////////////////////////////////////////////////////////////////
  35. // CMy2View construction/destruction
  36. CMy2View::CMy2View()
  37. {
  38. // TODO: add construction code here
  39. m_qp.LoadBitmap (IDB_QP);
  40. m_qp1.LoadBitmap (IDB_QP1);
  41. m_qp2.LoadBitmap (IDB_QP2);
  42. m_bjt.LoadBitmap (IDB_BJT);
  43. m_hj.LoadBitmap (IDB_HJ);
  44. m_hs.LoadBitmap (IDB_HS);
  45. m_hx.LoadBitmap (IDB_HX);
  46. m_hm.LoadBitmap (IDB_HM);
  47. m_hc.LoadBitmap (IDB_HC);
  48. m_hb.LoadBitmap (IDB_HB);
  49. m_hp.LoadBitmap (IDB_HP);
  50. m_xd1.LoadBitmap (IDB_XD1);
  51. m_hj1.LoadBitmap (IDB_HJ1);
  52. m_hs1.LoadBitmap (IDB_HS1);
  53. m_hx1.LoadBitmap (IDB_HX1);
  54. m_hm1.LoadBitmap (IDB_HM1);
  55. m_hc1.LoadBitmap (IDB_HC1);
  56. m_hb1.LoadBitmap (IDB_HB1);
  57. m_hp1.LoadBitmap (IDB_HP1);
  58. for(int i=0;i<9;i++)
  59. {
  60. for(int j=0;j<10;j++)
  61. map[i][j]=0;
  62. }
  63. map[0][0]=52;
  64. map[1][0]=42;
  65. map[2][0]=32;
  66. map[3][0]=22;
  67. map[4][0]=1;
  68. map[5][0]=21;
  69. map[6][0]=31;
  70. map[7][0]=41;
  71. map[8][0]=51;
  72. map[1][2]=61;
  73. map[7][2]=62;
  74. map[0][3]=71;
  75. map[2][3]=72;
  76. map[4][3]=73;
  77. map[6][3]=74;
  78. map[8][3]=75;
  79. map[0][9]=-52;
  80. map[1][9]=-42;
  81. map[2][9]=-32;
  82. map[3][9]=-22;
  83. map[4][9]=-1;
  84. map[5][9]=-21;
  85. map[6][9]=-31;
  86. map[7][9]=-41;
  87. map[8][9]=-51;
  88. map[1][7]=-61;
  89. map[7][7]=-62;
  90. map[0][6]=-71;
  91. map[2][6]=-72;
  92. map[4][6]=-73;
  93. map[6][6]=-74;
  94. map[8][6]=-75;
  95. xx=10;
  96. yy=11;
  97. xdh=0;
  98. xd=0;
  99. hongxian=0;
  100. qpt=0;
  101. }
  102. CMy2View::~CMy2View()
  103. {
  104. }
  105. BOOL CMy2View::PreCreateWindow(CREATESTRUCT& cs)
  106. {
  107. // TODO: Modify the Window class or styles here by modifying
  108. //  the CREATESTRUCT cs
  109. return CView::PreCreateWindow(cs);
  110. }
  111. /////////////////////////////////////////////////////////////////////////////
  112. // CMy2View drawing
  113. void CMy2View::OnDraw(CDC* pDC)
  114. {
  115. CMy2Doc* pDoc = GetDocument();
  116. ASSERT_VALID(pDoc);
  117. CDC Dc;
  118. if(Dc.CreateCompatibleDC(pDC)==FALSE)
  119.       AfxMessageBox("Can't create DC");
  120.  Dc.SelectObject(m_bjt);
  121.  pDC->BitBlt(0,0,660,660,&Dc,0,0,SRCCOPY);
  122.   switch (qpt)
  123.   {
  124.    case 0: Dc.SelectObject(m_qp);break;
  125.    case 1: Dc.SelectObject(m_qp2);break;
  126.    case 2: Dc.SelectObject(m_qp1);break;   
  127.   }
  128.    pDC->BitBlt(25,25,660,660,&Dc,0,0,SRCCOPY);
  129.           
  130. for(int n=0;n<9;n++)
  131. for(int j=0;j<10;j++)
  132. {
  133. if(map[n][j]==1)
  134. {
  135. Dc.SelectObject(m_hj);
  136. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  137. }
  138. if(map[n][j]==21)
  139. {
  140. Dc.SelectObject(m_hs);
  141. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  142. }
  143. if(map[n][j]==22)
  144. {
  145. Dc.SelectObject(m_hs);
  146. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  147. }
  148. if(map[n][j]==31)
  149. {
  150. Dc.SelectObject(m_hx);
  151. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  152. }
  153. if(map[n][j]==32)
  154. {
  155. Dc.SelectObject(m_hx);
  156. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  157. }
  158. if(map[n][j]==41)
  159. {
  160. Dc.SelectObject(m_hm);
  161. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  162. }
  163. if(map[n][j]==42)
  164. {
  165. Dc.SelectObject(m_hm);
  166. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  167. }
  168. if(map[n][j]==51)
  169. {
  170. Dc.SelectObject(m_hc);
  171. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  172. }
  173. if(map[n][j]==52)
  174. {
  175. Dc.SelectObject(m_hc);
  176. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  177. }
  178. if(map[n][j]==61)
  179. {
  180. Dc.SelectObject(m_hp);
  181. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  182. }
  183. if(map[n][j]==62)
  184. {
  185. Dc.SelectObject(m_hp);
  186. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  187. }
  188. if(map[n][j]==71||map[n][j]==72||map[n][j]==73||map[n][j]==74||map[n][j]==75)
  189. {
  190. Dc.SelectObject(m_hb);
  191. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  192. }
  193. if(map[n][j]==-1)
  194. {
  195. Dc.SelectObject(m_hj1);
  196. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  197. }
  198. if(map[n][j]==-21)
  199. {
  200. Dc.SelectObject(m_hs1);
  201. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  202. }
  203. if(map[n][j]==-22)
  204. {
  205. Dc.SelectObject(m_hs1);
  206. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  207. }
  208. if(map[n][j]==-31)
  209. {
  210. Dc.SelectObject(m_hx1);
  211. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  212. }
  213. if(map[n][j]==-32)
  214. {
  215. Dc.SelectObject(m_hx1);
  216. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  217. }
  218. if(map[n][j]==-41)
  219. {
  220. Dc.SelectObject(m_hm1);
  221. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  222. }
  223. if(map[n][j]==-42)
  224. {
  225. Dc.SelectObject(m_hm1);
  226. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  227. }
  228. if(map[n][j]==-51)
  229. {
  230. Dc.SelectObject(m_hc1);
  231. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  232. }
  233. if(map[n][j]==-52)
  234. {
  235. Dc.SelectObject(m_hc1);
  236. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  237. }
  238. if(map[n][j]==-61)
  239. {
  240. Dc.SelectObject(m_hp1);
  241. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  242. }
  243. if(map[n][j]==-62)
  244. {
  245. Dc.SelectObject(m_hp1);
  246. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  247. }
  248. if(map[n][j]==-71||map[n][j]==-72||map[n][j]==-73||map[n][j]==-74||map[n][j]==-75)
  249. {
  250. Dc.SelectObject(m_hb1);
  251. pDC->BitBlt(n*40+30,j*40+30,160,160,&Dc,0,0,SRCCOPY);
  252. }
  253. }
  254.            
  255.     
  256. if(xd==1)
  257. {
  258.            if  (xdh>=0)
  259.    {
  260. pDC->TextOut (450,100,"黑已选!!!!!!!!!!!!!!!!");
  261.            if(xdh==1)
  262.    {
  263.             Dc.SelectObject(m_hj);
  264. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  265.    }
  266.            if(xdh==1)
  267.    {
  268.             Dc.SelectObject(m_hj);
  269. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  270.    }
  271.            if(xdh>1&&xdh<30)
  272.    {
  273.             Dc.SelectObject(m_hs);
  274. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  275.    } 
  276.        if(xdh>30&&xdh<40)
  277.    {
  278.             Dc.SelectObject(m_hx);
  279. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  280.    } 
  281.        if(xdh>40&&xdh<50)
  282.    {
  283.             Dc.SelectObject(m_hm);
  284. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  285.    } 
  286.     if(xdh>50&&xdh<60)
  287.    {
  288.             Dc.SelectObject(m_hc);
  289. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  290.    } 
  291.     if(xdh>60&&xdh<70)
  292.    {
  293.             Dc.SelectObject(m_hp);
  294. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  295.    } 
  296.     if(xdh>70&&xdh<80)
  297.    {
  298.             Dc.SelectObject(m_hb);
  299. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  300.    } 
  301.    }
  302.    else
  303.    {
  304.                     pDC->TextOut (450,100,"红已选!!!!!!!!!!!!!!!!");
  305.            if(xdh==-1)
  306.    {
  307.             Dc.SelectObject(m_hj1);
  308. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  309.    }
  310.            if(xdh==-1)
  311.    {
  312.             Dc.SelectObject(m_hj1);
  313. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  314.    }
  315.            if(xdh<-20&&xdh>-30)
  316.    {
  317.             Dc.SelectObject(m_hs1);
  318. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  319.    } 
  320.        if(xdh<-30&&xdh>-40)
  321.    {
  322.             Dc.SelectObject(m_hx1);
  323. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  324.    } 
  325.        if(xdh<-40&&xdh>-50)
  326.    {
  327.             Dc.SelectObject(m_hm1);
  328. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  329.    } 
  330.     if(xdh<-50&&xdh>-60)
  331.    {
  332.             Dc.SelectObject(m_hc1);
  333. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  334.    } 
  335.     if(xdh<-60&&xdh>-70)
  336.    {
  337.             Dc.SelectObject(m_hp1);
  338. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  339.    } 
  340.     if(xdh<-70&&xdh>-80)
  341.    {
  342.             Dc.SelectObject(m_hb1);
  343. pDC->BitBlt(450,120,160,160,&Dc,0,0,SRCCOPY);
  344.    } 
  345.    }
  346. }
  347. else
  348. {
  349.  if  (hongxian==0)
  350.    {
  351. pDC->TextOut (450,100,"黑方请选!!!!!!!!!!!!!!!!");
  352.    }
  353.    else
  354.    {
  355.                     pDC->TextOut (450,100,"红方请选!!!!!!!!!!!!!!!!");
  356.    }
  357. }
  358.    
  359. // TODO: add draw code for native data here
  360. }
  361. /////////////////////////////////////////////////////////////////////////////
  362. // CMy2View printing
  363. BOOL CMy2View::OnPreparePrinting(CPrintInfo* pInfo)
  364. {
  365. // default preparation
  366. return DoPreparePrinting(pInfo);
  367. }
  368. void CMy2View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  369. {
  370. // TODO: add extra initialization before printing
  371. }
  372. void CMy2View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  373. {
  374. // TODO: add cleanup after printing
  375. }
  376. /////////////////////////////////////////////////////////////////////////////
  377. // CMy2View diagnostics
  378. #ifdef _DEBUG
  379. void CMy2View::AssertValid() const
  380. {
  381. CView::AssertValid();
  382. }
  383. void CMy2View::Dump(CDumpContext& dc) const
  384. {
  385. CView::Dump(dc);
  386. }
  387. CMy2Doc* CMy2View::GetDocument() // non-debug version is inline
  388. {
  389. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMy2Doc)));
  390. return (CMy2Doc*)m_pDocument;
  391. }
  392. #endif //_DEBUG
  393. /////////////////////////////////////////////////////////////////////////////
  394. // CMy2View message handlers
  395. void CMy2View::OnLButtonDown(UINT nFlags, CPoint point) 
  396. {
  397. CDC *pDC=GetDC();
  398. CDC Dc;
  399. if(Dc.CreateCompatibleDC(pDC)==FALSE)
  400.       AfxMessageBox("Can't create DC");
  401.  //是否在棋盘内 
  402. if ( point.x>30&&point.x<380&&point.y>30&&point.y<410)
  403. int px=(point.x-30)/40;
  404. int py=(point.y-30)/40;
  405.   for(int i=0 ; i<20;i++)
  406.   {
  407.     for (int j=0 ; j<20;j++)
  408. {
  409.        m[i][j]=0;
  410. }
  411.   }
  412. if(hongxian==0)
  413. {
  414. if( map[(point.x-30)/40][(point.y-30)/40]>0   )
  415. {
  416. PlaySound(MAKEINTRESOURCE(IDR_WAVE11),GetModuleHandle(NULL),SND_ASYNC | SND_RESOURCE );
  417.    xdh=map[(point.x-30)/40][(point.y-30)/40];
  418.     xx=(point.x-30)/40;
  419.     yy=(point.y-30)/40;
  420. Dc.SelectObject(m_xd1);
  421. pDC->BitBlt((point.x-30)/40*40+30,(point.y-30)/40*40+30,160,160,&Dc,0,0,SRCCOPY);
  422.    
  423. xd=1;
  424. Invalidate();
  425. }
  426. if(map[xx][yy]==1)//将的限定
  427. {
  428.   if(xx>3)
  429.   {
  430.     m[xx-1][yy]=1;
  431.   }
  432.   if(xx<5)
  433.   {
  434. m[xx+1][yy]=1;
  435.   }
  436.   if(yy>0)
  437.   {
  438. m[xx][yy-1]=1;
  439.   }
  440.   if(yy<2)
  441.   {
  442. m[xx][yy+1]=1;
  443.   }
  444. }                 //将的限定
  445. if(map[xx][yy]==21||map[xx][yy]==22)//士的限定
  446. {
  447.   if(xx<5&&yy<2)
  448.   {
  449. m[xx+1][yy+1]=1;
  450.   }
  451.   if(xx>3&&yy>0)
  452.   {
  453. m[xx-1][yy-1]=1;
  454.   }
  455.   if(yy>0&&xx<5)
  456.   {
  457. m[xx+1][yy-1]=1;
  458.   }
  459.   if(yy<2&&xx>3)
  460.   {
  461. m[xx-1][yy+1]=1;
  462.   }
  463. }                                     //士的限定
  464. if(map[xx][yy]==31||map[xx][yy]==32)//相得限定
  465. {
  466.    if(xx>0&&yy<4&&map[xx-1][yy+1]==0)
  467.    {
  468.      m[xx-2][yy+2]=1;
  469.    }
  470.    if(xx<8&&yy<4&&map[xx+1][yy+1]==0)
  471.    {
  472. m[xx+2][yy+2]=1;
  473.    }
  474.    if(yy>0&&xx>0&&map[xx-1][yy-1]==0)
  475.    {
  476. m[xx-2][yy-2]=1;
  477.    }
  478.    if(yy>0&&xx<8&&map[xx+1][yy-1]==0)
  479.    {
  480. m[xx+2][yy-2]=1;  
  481.    } 
  482. }                                         //相得限定       
  483. if(map[xx][yy]==41 || map[xx][yy]==42)//马得限定
  484. {
  485.    if(xx<8 && yy<9 && map[xx][yy+1]==0) //右下
  486.    {
  487.      m[xx+1][yy+2]=1;
  488.    }
  489.    if(xx<8 && yy<9 && map[xx+1][yy]==0)
  490.    {
  491.     m[xx+2][yy+1]=1;//右下
  492.    }
  493.    if(yy>0 && xx<8 && map[xx+1][yy]==0)        //you上
  494.    {
  495. m[xx+2][yy-1]=1;
  496.    }
  497.    if(yy>0 && xx<8 && map[xx][yy-1]==0)
  498.    {
  499. m[xx+1][yy-2]=1;   //you上
  500.    } 
  501. //??????????????????????????????????
  502.    if(yy>0 && xx>1 && map[xx-1][yy]==0)        //zuo上
  503.    {
  504. // m[xx-2][yy-1]=1;//有问题
  505. m[xx-2][yy-1]=1; 
  506.    }
  507.    if(yy>0 && xx>0 && map[xx][yy-1]==0)
  508.    {
  509. m[xx-1][yy-2]=1;   //zuo上
  510.    } 
  511.     if(yy<9 && xx>0 && map[xx-1][yy]==0)        //zuoxia
  512. {
  513. m[xx-2][yy+1]=1;
  514. }
  515.     if(yy<9 && xx>0 && map[xx][yy+1]==0)
  516. {
  517.  m[xx-1][yy+2]=1;   //zuoxia
  518. }                                         //马得限定       
  519.  
  520.                                             
  521. if(map[xx][yy]==51 || map[xx][yy]==52)///车得限定 
  522. {
  523.  int i1=1;
  524.  while(map[xx-i1][yy]==0 )//左
  525.  {
  526.    m[xx-i1][yy]=1;
  527.    i1+=1;
  528.  }
  529.  m[xx-i1][yy]=1;
  530.  int i2=1;
  531.  while(map[xx+i2][yy]==0 )//you
  532.  {
  533. m[xx+i2][yy]=1;
  534. i2+=1;
  535.  }
  536. m[xx+i2][yy]=1;
  537. int i3=1;
  538.  while(map[xx][yy-i3]==0 )//shang
  539.  {
  540. m[xx][yy-i3]=1;
  541. i3+=1;
  542.  }
  543.  m[xx][yy-i3]=1;
  544.  int i4=1;
  545.  while(map[xx][yy+i4]==0 )//xia
  546.  {
  547. m[xx][yy+i4]=1;
  548. i4+=1;
  549.  }
  550.  m[xx][yy+i4]=1;
  551. }
  552. if(map[xx][yy]==61 || map[xx][yy]==62)///炮得限定 
  553. {
  554.  int i1=1;
  555.  while(map[xx-i1][yy]==0 /*&& xx-i1>0*/)//左
  556.  {
  557.    m[xx-i1][yy]=1;
  558.    i1+=1;
  559.  }
  560.  while((xx-i1-1)>-1)
  561.  {
  562.    if(map[xx-i1-1][yy]<0)
  563.    {
  564.     m[xx-i1-1][yy]=1;
  565.     i1+=10;
  566.    }
  567.    i1+=1;
  568.  }
  569. int i2=1;
  570.   while(map[xx+i2][yy]==0 /*&& xx+i2<8*/)//you
  571.   {
  572. m[xx+i2][yy]=1;
  573. i2+=1;
  574.   }
  575. while((xx+i2+1)<10)
  576.  {
  577.    if(map[xx+i2+1][yy]<0)
  578.    {
  579.     m[xx+i2+1][yy]=1;
  580. i2+=10;
  581.    }
  582.    i2+=1;
  583.  }
  584. int i3=1;
  585.   while(map[xx][yy-i3]==0 /*&& xx-i3>0*/)//shang
  586.   {
  587. m[xx][yy-i3]=1;
  588. i3+=1;
  589.   }
  590. while((yy-i3-1)>-1)
  591.  {
  592.    if(map[xx][yy-i3-1]<0)
  593.    {
  594.     m[xx][yy-i3-1]=1;
  595. i3+=10;
  596.    }
  597.    i3+=1;
  598.  }
  599.  int i4=1;
  600.   while(map[xx][yy+i4]==0  /*&& xx+i4<9*/)//xia
  601.   {
  602. m[xx][yy+i4]=1;
  603. i4+=1;
  604.   }
  605. while((yy+i4+1)<11)
  606.  {
  607.    if(map[xx][yy+i4+1]<0)
  608.    {
  609.     m[xx][yy+i4+1]=1;
  610. i4+=10;
  611.    }
  612.    i4+=1;
  613.  }
  614. }
  615. if(map[xx][yy]==71||map[xx][yy]==72||map[xx][yy]==73||map[xx][yy]==74||map[xx][yy]==75)//兵的限定
  616. {
  617.  if(yy>4)
  618.  {
  619.     m[xx-1][yy]=1;
  620. m[xx+1][yy]=1;
  621.  }
  622. m[xx][yy+1]=1;
  623.               //的限定
  624. }
  625. if(xd==1 && map[(point.x-30)/40][(point.y-30)/40]<=0 && m[(point.x-30)/40][(point.y-30)/40]==1 )
  626. {
  627.   map[xx][yy]=0;
  628.   map[(point.x-30)/40][(point.y-30)/40]=xdh;
  629.   xdh=0;
  630.   xd=0;
  631.   hongxian=1 ;
  632. PlaySound(MAKEINTRESOURCE(IDR_WAVE11),GetModuleHandle(NULL),SND_ASYNC | SND_RESOURCE );
  633.  for(int i=0 ; i<20;i++)
  634.  {
  635.   for (int j=0 ; j<20;j++)
  636.   {
  637.     m[i][j]=0;
  638.   }
  639.  }
  640. Invalidate();
  641. }
  642. ////////////////////////////////////////////////////////////////////
  643. }
  644. if(hongxian==1)
  645. {
  646. if( map[px=(point.x-30)/40][py=(point.y-30)/40]<0  )
  647. {
  648. PlaySound(MAKEINTRESOURCE(IDR_WAVE11),GetModuleHandle(NULL),SND_ASYNC | SND_RESOURCE );
  649.    xdh=map[(point.x-30)/40][(point.y-30)/40];
  650.     xx=(point.x-30)/40;
  651.     yy=(point.y-30)/40;
  652. Dc.SelectObject(m_xd1);
  653. pDC->BitBlt((point.x-30)/40*40+30,(point.y-30)/40*40+30,160,160,&Dc,0,0,SRCCOPY);
  654.    
  655. xd=1;
  656. Invalidate();
  657. }
  658. if(map[xx][yy]==-1)//将的限定
  659. {
  660. if(xx>3)
  661. {
  662. m[xx-1][yy]=1;
  663. }
  664. if(xx<5)
  665. {
  666. m[xx+1][yy]=1;
  667. }
  668. if(yy>7)
  669. {
  670. m[xx][yy-1]=1;
  671. }
  672. if(yy<9)
  673. {
  674. m[xx][yy+1]=1;
  675. }
  676. }              //将的限定
  677. if(map[xx][yy]==-21||map[xx][yy]==-22)//士的限定
  678. {
  679. if(xx<5&&yy<9)
  680. {
  681. m[xx+1][yy+1]=1;
  682. }
  683. if(xx>3&&yy>7)
  684. {
  685. m[xx-1][yy-1]=1;
  686. }
  687. if(yy>7&&xx<5)
  688. {
  689. m[xx+1][yy-1]=1;
  690. }
  691. if(yy<7&&xx>3)
  692. {
  693. m[xx-1][yy+1]=1;
  694. }
  695. }                                     //士的限定
  696. if(map[xx][yy]==-31||map[xx][yy]==-32)//相得限定
  697. {
  698. if(xx>0&&yy<9&&map[xx-1][yy+1]==0)
  699. {
  700. m[xx-2][yy+2]=1;
  701. }
  702. if(xx<8&&yy<9&&map[xx+1][yy+1]==0)
  703. {
  704. m[xx+2][yy+2]=1;
  705. }
  706. if(yy>0&&xx>4&&map[xx-1][yy-1]==0)
  707. {
  708. m[xx-2][yy-2]=1;
  709. }
  710. if(yy>4&&xx<8&&map[xx+1][yy-1]==0)
  711. {
  712. m[xx+2][yy-2]=1;  
  713. }                                         //相得限定       
  714. if(map[xx][yy]==-41 || map[xx][yy]==-42)//马得限定
  715. {
  716. if(xx<8 && yy<9 && map[xx][yy+1]==0) //右下
  717. {
  718. m[xx+1][yy+2]=1;
  719. }
  720. if(xx<8 && yy<9 && map[xx+1][yy]==0)
  721. {
  722. m[xx+2][yy+1]=1;//右下
  723. }
  724. if(yy>0 && xx<8 && map[xx+1][yy]==0)        //you上
  725. {
  726. m[xx+2][yy-1]=1;
  727. }
  728. if(yy>0 && xx<8 && map[xx][yy-1]==0)
  729. {
  730. m[xx+1][yy-2]=1;   //you上
  731. //??????????????????????????????????
  732. if(yy>0 && xx>1 && map[xx-1][yy]==0)        //zuo上
  733. {
  734. // m[xx-2][yy-1]=1;//有问题
  735. m[xx-2][yy-1]=1; 
  736. }
  737. if(yy>0 && xx>0 && map[xx][yy-1]==0)
  738. {
  739. m[xx-1][yy-2]=1;   //zuo上
  740. if(yy<9 && xx>0 && map[xx-1][yy]==0)        //zuoxia
  741. {
  742. m[xx-2][yy+1]=1;
  743. }
  744. if(yy<9 && xx>0 && map[xx][yy+1]==0)
  745. {
  746. m[xx-1][yy+2]=1;   //zuoxia
  747. }                                         //马得限定       
  748.                                              
  749. if(map[xx][yy]==-51 || map[xx][yy]==-52)///车得限定 
  750. {
  751. int i1=1;
  752. while(map[xx-i1][yy]==0 )//左
  753. {
  754.    m[xx-i1][yy]=1;
  755.    i1+=1;
  756. }
  757. m[xx-i1][yy]=1;
  758. int i2=1;
  759. while(map[xx+i2][yy]==0 )//you
  760. {
  761. m[xx+i2][yy]=1;
  762. i2+=1;
  763. }
  764. m[xx+i2][yy]=1;
  765. int i3=1;
  766. while(map[xx][yy-i3]==0 )//shang
  767. {
  768. m[xx][yy-i3]=1;
  769. i3+=1;
  770. }
  771. m[xx][yy-i3]=1;
  772. int i4=1;
  773. while(map[xx][yy+i4]==0  )//xia
  774. {
  775. m[xx][yy+i4]=1;
  776. i4+=1;
  777. }
  778. m[xx][yy+i4]=1;
  779. }
  780. if(map[xx][yy]==-61 || map[xx][yy]==-62)///炮得限定 
  781. {
  782. int i1=1;
  783. while(map[xx-i1][yy]==0 )//左
  784. {
  785.    m[xx-i1][yy]=1;
  786.    i1+=1;
  787. }
  788.  while((xx-i1-1)>-1)
  789.  {
  790.    if(map[xx-i1-1][yy]>0)
  791.    {
  792.     m[xx-i1-1][yy]=1;
  793.     i1+=10;
  794.    }
  795.    i1+=1;
  796.  }
  797. int i2=1;
  798. while(map[xx+i2][yy]==0 )//you
  799. {
  800. m[xx+i2][yy]=1;
  801. i2+=1;
  802. }
  803. while((xx+i2+1)<10)
  804.  {
  805.    if(map[xx+i2+1][yy]>0)
  806.    {
  807.     m[xx+i2+1][yy]=1;
  808. i2+=10;
  809.    }
  810.    i2+=1;
  811.  }
  812. int i3=1;
  813. while(map[xx][yy-i3]==0 )//shang
  814. {
  815. m[xx][yy-i3]=1;
  816. i3+=1;
  817. }
  818. while((yy-i3-1)>-1)
  819.  {
  820.    if(map[xx][yy-i3-1]>0)
  821.    {
  822.     m[xx][yy-i3-1]=1;
  823. i3+=10;
  824.    }
  825.    i3+=1;
  826.  }
  827. int i4=1;
  828. while(map[xx][yy+i4]==0  )//xia
  829. {
  830. m[xx][yy+i4]=1;
  831. i4+=1;
  832. }
  833. while((yy+i4+1)<11)
  834.  {
  835.    if(map[xx][yy+i4+1]>0)
  836.    {
  837.     m[xx][yy+i4+1]=1;
  838. i4+=10;
  839.    }
  840.    i4+=1;
  841.  }
  842. }
  843. if(map[xx][yy]==-71||map[xx][yy]==-72||map[xx][yy]==-73||map[xx][yy]==-74||map[xx][yy]==-75)//兵的限定
  844. {
  845. if(yy<5)
  846. {
  847.     m[xx-1][yy]=1;
  848. m[xx+1][yy]=1;
  849. }
  850. m[xx][yy-1]=1;
  851.               //的限定
  852. }
  853. ////////////////////////////////////////////////////////////////////////
  854. if(xd==1 &&map[(point.x-30)/40][(point.y-30)/40]>=0 && m[(point.x-30)/40][(point.y-30)/40]==1  )
  855. {
  856. PlaySound(MAKEINTRESOURCE(IDR_WAVE11),GetModuleHandle(NULL),SND_ASYNC | SND_RESOURCE );
  857.   map[xx][yy]=0;
  858.   map[(point.x-30)/40][(point.y-30)/40]=xdh;
  859.   xdh=0;
  860.   xd=0;
  861. hongxian=0 ;
  862. Invalidate();
  863. }
  864. }
  865. }
  866. Invalidate();
  867. CView::OnLButtonDown(nFlags, point);
  868. }
  869. void CMy2View::OnCxks() 
  870. {
  871. // TODO: Add your command handler code here
  872. for(int i=0;i<9;i++)
  873. {
  874. for(int j=0;j<10;j++)
  875. map[i][j]=0;
  876. }
  877. map[0][0]=52;
  878. map[1][0]=42;
  879. map[2][0]=32;
  880. map[3][0]=22;
  881. map[4][0]=1;
  882. map[5][0]=21;
  883. map[6][0]=31;
  884. map[7][0]=41;
  885. map[8][0]=51;
  886. map[1][2]=61;
  887. map[7][2]=62;
  888. map[0][3]=71;
  889. map[2][3]=72;
  890. map[4][3]=73;
  891. map[6][3]=74;
  892. map[8][3]=75;
  893. map[0][9]=-52;
  894. map[1][9]=-42;
  895. map[2][9]=-32;
  896. map[3][9]=-22;
  897. map[4][9]=-1;
  898. map[5][9]=-21;
  899. map[6][9]=-31;
  900. map[7][9]=-41;
  901. map[8][9]=-51;
  902. map[1][7]=-61;
  903. map[7][7]=-62;
  904. map[0][6]=-71;
  905. map[2][6]=-72;
  906. map[4][6]=-73;
  907. map[6][6]=-74;
  908. map[8][6]=-75;
  909. xx=10;
  910. yy=11;
  911. xd=0;
  912. hongxian=0;
  913. Invalidate();
  914. }
  915. void CMy2View::OnBc() 
  916. {
  917. //设置保存的文件,后缀名wzq
  918. CFileDialog dlg(FALSE,"wzq",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WZQ)|*.wzq|All Files|*.*||",this);
  919. //如果公共类对话框为确定
  920. if(dlg.DoModal()==IDOK) 
  921. //获取文件名
  922. dlg.GetFileName();
  923. //否则,退出
  924. else
  925. return;
  926. //字符串变量
  927. CString str;
  928. int i,j;
  929.   CStdioFile file;
  930. //如果有问题,退出
  931. if(file.Open(dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::typeText)==0)
  932. {
  933. AfxMessageBox("save error!");
  934. return;
  935. }
  936. //循环把棋盘数组的值写进文件
  937. for(j=0;j<10;j++)
  938. for(i=0;i<9;i++)
  939. {
  940.     if (map[i][j]==0)
  941. {
  942. file.WriteString("0n");
  943. }
  944. if (map[i][j]==1)
  945. {
  946. file.WriteString("1n");
  947. }
  948. if (map[i][j]==21)
  949. {
  950. file.WriteString("21n");
  951. }
  952. if (map[i][j]==22)
  953. {
  954. file.WriteString("22n");
  955. }
  956. if (map[i][j]==31)
  957. {
  958. file.WriteString("31n");
  959. }
  960. if (map[i][j]==32)
  961. {
  962. file.WriteString("32n");
  963. }
  964. if (map[i][j]==41)
  965. {
  966. file.WriteString("41n");
  967. }
  968. if (map[i][j]==42)
  969. {
  970. file.WriteString("42n");
  971. }
  972. if (map[i][j]==51)
  973. {
  974. file.WriteString("51n");
  975. }
  976. if (map[i][j]==52)
  977. {
  978. file.WriteString("52n");
  979. }
  980. if (map[i][j]==61)
  981. {
  982. file.WriteString("61n");
  983. }
  984. if (map[i][j]==62)
  985. {
  986. file.WriteString("62n");
  987. }
  988. if (map[i][j]==71)
  989. {
  990. file.WriteString("71n");
  991. }
  992. if (map[i][j]==72)
  993. {
  994. file.WriteString("72n");
  995. }
  996. if (map[i][j]==73)
  997. {
  998. file.WriteString("73n");
  999. }
  1000. if (map[i][j]==74)
  1001. {
  1002. file.WriteString("74n");
  1003. }
  1004. if (map[i][j]==75)
  1005. {
  1006. file.WriteString("75n");
  1007. }
  1008. //111111111111111111111111111111
  1009. if (map[i][j]==-1)
  1010. {
  1011. file.WriteString("-1n");
  1012. }
  1013. if (map[i][j]==-21)
  1014. {
  1015. file.WriteString("-21n");
  1016. }
  1017. if (map[i][j]==-22)
  1018. {
  1019. file.WriteString("-22n");
  1020. }
  1021. if (map[i][j]==-31)
  1022. {
  1023. file.WriteString("-31n");
  1024. }
  1025. if (map[i][j]==-32)
  1026. {
  1027. file.WriteString("-32n");
  1028. }
  1029. if (map[i][j]==-41)
  1030. {
  1031. file.WriteString("-41n");
  1032. }
  1033. if (map[i][j]==-42)
  1034. {
  1035. file.WriteString("-42n");
  1036. }
  1037. if (map[i][j]==-51)
  1038. {
  1039. file.WriteString("-51n");
  1040. }
  1041. if (map[i][j]==-52)
  1042. {
  1043. file.WriteString("-52n");
  1044. }
  1045. if (map[i][j]==-61)
  1046. {
  1047. file.WriteString("-61n");
  1048. }
  1049. if (map[i][j]==-62)
  1050. {
  1051. file.WriteString("-62n");
  1052. }
  1053. if (map[i][j]==-71)
  1054. {
  1055. file.WriteString("-71n");
  1056. }
  1057. if (map[i][j]==-72)
  1058. {
  1059. file.WriteString("-72n");
  1060. }
  1061. if (map[i][j]==-73)
  1062. {
  1063. file.WriteString("-73n");
  1064. }
  1065. if (map[i][j]==-74)
  1066. {
  1067. file.WriteString("-74n");
  1068. }
  1069. if (map[i][j]==-75)
  1070. {
  1071. file.WriteString("-75n");
  1072. }
  1073.    // bb=map[i][j];
  1074.    // file.Write("%dn",bb);
  1075. }
  1076. //保存当前下棋颜色
  1077. //关闭文件
  1078.   file.Close();
  1079. }
  1080. void CMy2View::OnDk() 
  1081. {
  1082. CFileDialog dlg(TRUE,"wzq",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WZQ)|*.wzq|All Files|*.*||",this);
  1083. if(dlg.DoModal()==IDOK) 
  1084. dlg.GetFileName();
  1085. else
  1086. return;
  1087. CString str;
  1088. int i,j,mm;
  1089. CStdioFile file;
  1090. if(file.Open(dlg.GetFileName(),CFile::modeRead)==0)
  1091. {
  1092. AfxMessageBox("save error!");
  1093. return;
  1094. }
  1095. CArchive ar(&file,CArchive::load);
  1096. for(j=0;j<10;j++)
  1097. for(i=0;i<9;i++)
  1098. {
  1099. ar.ReadString(str);
  1100. sscanf(str,"%d",&mm);
  1101. map[i][j]=mm;
  1102. }
  1103. ar.ReadString(str);
  1104. sscanf(str,"%d",&mm);
  1105. file.Close();
  1106. ar.Close();
  1107. Invalidate(false);
  1108. }
  1109. void CMy2View::On1() 
  1110. {
  1111. qpt=0;
  1112. Invalidate();
  1113. }
  1114. void CMy2View::On2() 
  1115. {
  1116. // TODO: Add your command handler code here
  1117. qpt=1;
  1118. Invalidate();
  1119. }
  1120. void CMy2View::On3() 
  1121. {
  1122. // TODO: Add your command handler code here
  1123. qpt=2;
  1124. Invalidate();
  1125. }
  1126. int CMy2View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  1127. {
  1128. if (CView::OnCreate(lpCreateStruct) == -1)
  1129. return -1;
  1130. return 0;
  1131. }