上传用户:zhengjing
上传日期:2022-08-08
资源大小:5708k
文件大小:6k
源码类别:

游戏

开发平台:

Visual C++

  1. // 俄罗斯方块View.cpp : implementation of the CMyView class
  2. //
  3. #include "stdafx.h"
  4. #include "俄罗斯方块.h"
  5. #include "俄罗斯方块Doc.h"
  6. #include "俄罗斯方块View.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. #define IDT_TIMER 100
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CMyView
  15. IMPLEMENT_DYNCREATE(CMyView, CView)
  16. BEGIN_MESSAGE_MAP(CMyView, CView)
  17. //{{AFX_MSG_MAP(CMyView)
  18. ON_COMMAND(ID_MENUITEM_STAR, OnMenuitemStar)
  19. ON_WM_TIMER()
  20. ON_WM_KEYDOWN()
  21. ON_UPDATE_COMMAND_UI(ID_MENUITEM_EASY, OnUpdateMenuitemEasy)
  22. ON_COMMAND(ID_MENUITEM_EASY, OnMenuitemEasy)
  23. ON_COMMAND(ID_MENUITEM_NORMAL, OnMenuitemNormal)
  24. ON_UPDATE_COMMAND_UI(ID_MENUITEM_NORMAL, OnUpdateMenuitemNormal)
  25. ON_COMMAND(ID_MENUITEM_HARD, OnMenuitemHard)
  26. ON_UPDATE_COMMAND_UI(ID_MENUITEM_HARD, OnUpdateMenuitemHard)
  27. ON_COMMAND(ID_MENUITEM_OVER, OnMenuitemOver)
  28. ON_UPDATE_COMMAND_UI(ID_MENUITEM_STAR, OnUpdateMenuitemStar)
  29. //}}AFX_MSG_MAP
  30. // Standard printing commands
  31. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  32. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  33. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CMyView construction/destruction
  37. CMyView::CMyView()
  38. {
  39. // TODO: add construction code here
  40. check[0]=1;
  41. check[1]=0;
  42. check[2]=0;
  43. valid=1;
  44. gray=1;
  45. }
  46. CMyView::~CMyView()
  47. {
  48. }
  49. BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
  50. {
  51. // TODO: Modify the Window class or styles here by modifying
  52. //  the CREATESTRUCT cs
  53. return CView::PreCreateWindow(cs);
  54. }
  55. /////////////////////////////////////////////////////////////////////////////
  56. // CMyView drawing
  57. void CMyView::OnDraw(CDC* pDC)
  58. {
  59. CMyDoc* pDoc = GetDocument();
  60. ASSERT_VALID(pDoc);
  61. // TODO: add draw code for native data here
  62. if(!ClaEluosi.startflags)
  63. {
  64.   ClaEluosi.DrawCover(pDC);
  65.   gray=1;
  66. }
  67. }
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CMyView printing
  70. BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
  71. {
  72. // default preparation
  73. return DoPreparePrinting(pInfo);
  74. }
  75. void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  76. {
  77. // TODO: add extra initialization before printing
  78. }
  79. void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  80. {
  81. // TODO: add cleanup after printing
  82. }
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CMyView diagnostics
  85. #ifdef _DEBUG
  86. void CMyView::AssertValid() const
  87. {
  88. CView::AssertValid();
  89. }
  90. void CMyView::Dump(CDumpContext& dc) const
  91. {
  92. CView::Dump(dc);
  93. }
  94. CMyDoc* CMyView::GetDocument() // non-debug version is inline
  95. {
  96. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
  97. return (CMyDoc*)m_pDocument;
  98. }
  99. #endif //_DEBUG
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CMyView message handlers
  102. void CMyView::OnMenuitemStar() 
  103. {
  104. // TODO: Add your command handler code here
  105. gray=0;
  106. pauseflags=0;
  107. ClaEluosi.Start();
  108. CMyApp*pApp=(CMyApp*)AfxGetApp();
  109. SetTimer(IDT_TIMER,500-pApp->speed*200,NULL);
  110. }
  111. void CMyView::OnTimer(UINT nIDEvent) 
  112. {
  113. // TODO: Add your message handler code here and/or call default
  114. if(ClaEluosi.startflags&&!pauseflags)
  115. {
  116. CDC*dc=GetDC();
  117. ClaEluosi.move(2);
  118. ClaEluosi.DrawScore(dc);
  119. ClaEluosi.DrawCover(dc);
  120. ReleaseDC(dc);
  121. return;
  122. }
  123. gray=1;
  124. CView::OnTimer(nIDEvent);
  125. }
  126. void CMyView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  127. {
  128. // TODO: Add your message handler code here and/or call default
  129. if(!ClaEluosi.startflags)
  130. return;
  131. switch(nChar)
  132. {
  133. case VK_UP:
  134. {
  135. if(!pauseflags)
  136. ClaEluosi.move(1);
  137. break;
  138. }
  139. case VK_DOWN:
  140. {
  141. if(!pauseflags)
  142. ClaEluosi.move(2);
  143. break;
  144. }
  145. case VK_LEFT:
  146. {
  147. if(!pauseflags)
  148. ClaEluosi.move(3);
  149. break;
  150. }
  151. case VK_RIGHT:
  152. {
  153. if(!pauseflags)
  154. ClaEluosi.move(4);
  155. break;
  156. }
  157. case VK_SPACE:
  158. {
  159. pauseflags=!pauseflags;
  160. break;
  161. }
  162. }
  163. CDC*dc=GetDC();
  164. ClaEluosi.DrawScore(dc);
  165. ClaEluosi.DrawCover(dc);
  166. ReleaseDC(dc);
  167. CView::OnKeyDown(nChar, nRepCnt, nFlags);
  168. }
  169. void CMyView::OnUpdateMenuitemEasy(CCmdUI* pCmdUI) 
  170. {
  171. // TODO: Add your command update UI handler code here
  172. pCmdUI->SetCheck(check[0]);
  173. pCmdUI->Enable(gray);
  174. }
  175. void CMyView::OnMenuitemEasy() 
  176. {
  177. // TODO: Add your command handler code here
  178. check[0]=!check[0];
  179. if(check[0])
  180. {
  181.        check[2]=0;
  182.        check[1]=0;
  183. }
  184. CMyApp*pApp=(CMyApp*)AfxGetApp();
  185. for(int i=0;i<3;i++)
  186. {
  187. if(check[i])
  188. {
  189. pApp->speed=i;
  190.     valid=1;
  191. ClaEluosi.DrawCover(GetDC());
  192. return;
  193. }
  194. }
  195. valid=0;
  196. }
  197. void CMyView::OnMenuitemNormal() 
  198. {
  199. // TODO: Add your command handler code here
  200. check[1]=!check[1];
  201. if(check[1])
  202. {
  203.        check[2]=0;
  204.        check[0]=0;
  205. }
  206. CMyApp*pApp=(CMyApp*)AfxGetApp();
  207. for(int i=0;i<3;i++)
  208. {
  209. if(check[i])
  210. {
  211. pApp->speed=i;
  212. valid=1;
  213. ClaEluosi.DrawCover(GetDC());
  214. return;
  215. }
  216. }
  217. valid=0;
  218. }
  219. void CMyView::OnUpdateMenuitemNormal(CCmdUI* pCmdUI) 
  220. {
  221. // TODO: Add your command update UI handler code here
  222. pCmdUI->SetCheck(check[1]);
  223. pCmdUI->Enable(gray);
  224. }
  225. void CMyView::OnMenuitemHard() 
  226. {
  227. // TODO: Add your command handler code here
  228. check[2]=!check[2];
  229. if(check[2])
  230. {
  231.        check[0]=0;
  232.        check[1]=0;
  233. }
  234. CMyApp*pApp=(CMyApp*)AfxGetApp();
  235. for(int i=0;i<3;i++)
  236. {
  237. if(check[i])
  238. {
  239. pApp->speed=i;
  240. valid=1;
  241. ClaEluosi.DrawCover(GetDC());
  242. return;
  243. }
  244. }
  245. valid=0;
  246. }
  247. void CMyView::OnUpdateMenuitemHard(CCmdUI* pCmdUI) 
  248. {
  249. // TODO: Add your command update UI handler code here
  250. pCmdUI->SetCheck(check[2]);
  251. pCmdUI->Enable(gray);
  252. }
  253. void CMyView::OnMenuitemOver() 
  254. {
  255. // TODO: Add your command handler code here
  256. gray=1;
  257. KillTimer(IDT_TIMER);
  258.     ClaEluosi.end();
  259.     ClaEluosi.DrawCover(GetDC());
  260. }
  261. void CMyView::OnUpdateMenuitemStar(CCmdUI* pCmdUI) 
  262. {
  263. // TODO: Add your command update UI handler code here
  264. pCmdUI->Enable(valid);
  265. }