MainFrm.cpp
上传用户:tjwfgggs
上传日期:2022-06-07
资源大小:4331k
文件大小:6k
源码类别:

其他游戏

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "Eight.h"
  5. #include "EightDoc.h"
  6. #include "MainFrm.h"
  7. #include "NineBox.h"
  8. #include "ProcMtd.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CMainFrame
  16. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  17. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  18. //{{AFX_MSG_MAP(CMainFrame)
  19. ON_WM_CREATE()
  20. ON_COMMAND(ID_MOVE_DOWN, OnMoveDown)
  21. ON_COMMAND(ID_MOVE_LEFT, OnMoveLeft)
  22. ON_COMMAND(ID_MOVE_RIGHT, OnMoveRight)
  23. ON_COMMAND(ID_MOVE_UP, OnMoveUp)
  24. ON_COMMAND(ID_NEW, OnNew)
  25. ON_COMMAND(ID_RESET, OnReset)
  26. ON_COMMAND(ID_AI_P, OnAiP)
  27. ON_WM_CHAR()
  28. ON_WM_TIMER()
  29. ON_WM_ACTIVATE()
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. static UINT indicators[] =
  33. {
  34. ID_SEPARATOR,           // status line indicator
  35. ID_INDICATOR_CAPS,
  36. ID_INDICATOR_NUM,
  37. ID_INDICATOR_SCRL,
  38. };
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CMainFrame construction/destruction
  41. CMainFrame::CMainFrame()
  42. {
  43. // TODO: add member initialization code here
  44. }
  45. CMainFrame::~CMainFrame()
  46. {
  47. }
  48. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  49. {
  50. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  51. return -1;
  52. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  53. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  54. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  55. {
  56. TRACE0("Failed to create toolbarn");
  57. return -1;      // fail to create
  58. }
  59. if (!m_wndStatusBar.Create(this) ||
  60. !m_wndStatusBar.SetIndicators(indicators,
  61.   sizeof(indicators)/sizeof(UINT)))
  62. {
  63. TRACE0("Failed to create status barn");
  64. return -1;      // fail to create
  65. }
  66. // TODO: Delete these three lines if you don't want the toolbar to
  67. //  be dockable
  68. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  69. EnableDocking(CBRS_ALIGN_ANY);
  70. DockControlBar(&m_wndToolBar);
  71. return 0;
  72. }
  73. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  74. {
  75. if( !CFrameWnd::PreCreateWindow(cs) )
  76. return FALSE;
  77. // TODO: Modify the Window class or styles here by modifying
  78. //  the CREATESTRUCT cs
  79. cs.x=250;
  80. cs.y=150;
  81. cs.cx=500;
  82. cs.cy=500;
  83. cs.lpszName="八数码游戏";
  84. cs.style = WS_OVERLAPPED | WS_CAPTION 
  85. | WS_SYSMENU | WS_MINIMIZEBOX;
  86. return TRUE;
  87. }
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CMainFrame diagnostics
  90. #ifdef _DEBUG
  91. void CMainFrame::AssertValid() const
  92. {
  93. CFrameWnd::AssertValid();
  94. }
  95. void CMainFrame::Dump(CDumpContext& dc) const
  96. {
  97. CFrameWnd::Dump(dc);
  98. }
  99. #endif //_DEBUG
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CMainFrame message handlers
  102. void CMainFrame::OnMoveDown() 
  103. {
  104. // TODO: Add your command handler code here
  105. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  106. NineBox* obj=doc->GetBoxObj();
  107. obj->MoveDown();
  108. doc->UpdateAllViews(0);
  109. }
  110. void CMainFrame::OnMoveLeft() 
  111. {
  112. // TODO: Add your command handler code here
  113. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  114. NineBox* obj=doc->GetBoxObj();
  115. obj->MoveLeft();
  116. doc->UpdateAllViews(0);
  117. }
  118. void CMainFrame::OnMoveRight() 
  119. {
  120. // TODO: Add your command handler code here
  121. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  122. NineBox* obj=doc->GetBoxObj();
  123. obj->MoveRight();
  124. doc->UpdateAllViews(0);
  125. }
  126. void CMainFrame::OnMoveUp() 
  127. {
  128. // TODO: Add your command handler code here
  129. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  130. NineBox* obj=doc->GetBoxObj();
  131. obj->MoveUp();
  132. doc->UpdateAllViews(0);
  133. }
  134. /*
  135.  *建立一个新的可解的8数码问题
  136.  */
  137. void CMainFrame::OnNew() 
  138. {
  139. // TODO: Add your command handler code here
  140. srand(time(0));
  141. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  142. NineBox* obj=doc->GetBoxObj();
  143. obj->ResetValue();
  144. for (int i=0;i<1000;i++)
  145. {
  146. int j=rand()%4;
  147. switch(j) {
  148. case 1:
  149. obj->MoveUp();
  150. break;
  151. case 2:
  152. obj->MoveDown();
  153. break;
  154. case 3:
  155. obj->MoveLeft();
  156. break;
  157. case 0:
  158. obj->MoveRight();
  159. break;
  160. default:;
  161. }
  162. }
  163. doc->UpdateAllViews(0);
  164. obj->SetLastMoveType(-1);
  165. }
  166. /*
  167.  *初试化8数码布局
  168.  */
  169. void CMainFrame::OnReset() 
  170. {
  171. // TODO: Add your command handler code here
  172. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  173. NineBox* obj=doc->GetBoxObj();
  174. obj->ResetValue();
  175. doc->UpdateAllViews(0);
  176. }
  177. /*
  178.  *用过程状态法来求解8数码问题
  179.  */
  180. void CMainFrame::OnAiP() 
  181. {
  182. // TODO: Add your command handler code here
  183. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  184. NineBox* box=doc->GetBoxObj();
  185. obj=new ProcMtd(box);
  186. this->SetTimer(1,500,0);
  187. }
  188. void CMainFrame::do_aip()
  189. {
  190. CEightDoc* doc=(CEightDoc*)this->GetActiveDocument();
  191. NineBox* box=doc->GetBoxObj();
  192. static B_init=false;
  193. int ir=0;
  194. if(!B_init)
  195. {
  196. ir=obj->Init();
  197. }
  198. if(ir==0)
  199. {
  200. B_init=true;
  201. ir=obj->solve();
  202. }
  203. if(ir==0)
  204. {
  205. this->KillTimer(1);
  206. delete obj;obj=0;
  207. }
  208. //--------------------------
  209. switch(ir)
  210. {
  211. case 1:
  212. box->MoveUp();
  213. break;
  214. case 2:
  215. box->MoveDown();
  216. break;
  217. case 3:
  218. box->MoveLeft();
  219. break;
  220. case 4:
  221. box->MoveRight();
  222. break;
  223. default:;
  224. }
  225. doc->UpdateAllViews(0);
  226. //---------------------------------
  227. }
  228. void CMainFrame::OnTimer(UINT nIDEvent) 
  229. {
  230. switch(nIDEvent)
  231. {
  232. case 1:
  233. do_aip();
  234. break;
  235. default:;
  236. }
  237. CFrameWnd::OnTimer(nIDEvent);
  238. }