DigitalPlayer.cpp
上传用户:clj987822
上传日期:2022-04-25
资源大小:13296k
文件大小:5k
源码类别:

其他智力游戏

开发平台:

Visual C++

  1. // DigitalPlayer.cpp: implementation of the CDigitalPlayer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "RussianGame.h"
  6. #include "DigitalPlayer.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. int nDigitFont[11][7]={
  13. { 1, 2, 3, 4, 5, 6,-7},
  14. {-1,-2, 3, 4,-5,-6,-7},
  15. {-1, 2, 3,-4, 5, 6, 7},
  16. {-1, 2, 3, 4, 5,-6, 7},
  17. { 1,-2, 3, 4,-5,-6, 7},
  18. { 1, 2,-3, 4, 5,-6, 7},
  19. { 1, 2,-3, 4, 5, 6, 7},
  20. {-1, 2, 3, 4,-5,-6,-7},
  21. { 1, 2, 3, 4, 5, 6, 7},
  22. { 1, 2, 3, 4, 5,-6, 7},
  23. {-1,-2,-3,-4,-5,-6, 7}
  24. };
  25. //////////////////////////////////////////////////////////////////////
  26. // Construction/Destruction
  27. //////////////////////////////////////////////////////////////////////
  28. /*CDigitalPlayer::CDigitalPlayer()
  29. {
  30. }*/
  31. CDigitalPlayer::~CDigitalPlayer()
  32. {
  33. }
  34. void CDigitalPlayer::Create(CWnd *pWnd,int nX,int nY,
  35. long lOriginal, int nMaxNumbers, int nSepMics, 
  36. COLORREF crColor,COLORREF crBkColor)
  37. {
  38. m_nMaxNumber = nMaxNumbers;
  39. m_nSepMics = nSepMics;
  40. m_nX = nX;
  41. m_nY = nY;
  42. m_pWnd = pWnd;
  43. m_nCalculator = lOriginal;
  44. m_crColor = crColor;
  45. m_crBkColor = crBkColor;
  46. long multy=1;
  47. int i;
  48. for(i=0;i<m_nMaxNumber;i++)
  49. multy*=10;
  50. m_Mulply=multy;
  51. }
  52. long CDigitalPlayer::GetNumber()
  53. {
  54. return m_nCalculator;
  55. }
  56. void CDigitalPlayer::SetNumber(long lOriginal)
  57. {
  58. m_nCalculator = lOriginal%m_Mulply;
  59. ReShow();
  60. }
  61. void CDigitalPlayer::ReShow()
  62. {
  63. CClientDC ClientDC(m_pWnd);
  64. ClientDC.SelectObject(&Brush);
  65. ClientDC.SelectObject(&Pen1);
  66. ClientDC.Rectangle(m_nX,m_nY,
  67. m_nX+(11+m_nSepMics)*m_nMaxNumber+m_nSepMics,
  68. m_nY+25);
  69. ClientDC.SelectObject(&Pen2);
  70. ClientDC.SelectStockObject(NULL_BRUSH);
  71. ClientDC.MoveTo(m_nX,m_nY+25);
  72. ClientDC.LineTo(m_nX,m_nY);
  73. ClientDC.LineTo(m_nX+(11+m_nSepMics)*m_nMaxNumber+m_nSepMics,m_nY);
  74. ShowDigit();
  75. }
  76. void CDigitalPlayer::ShowOneDigit(int nWhichDigit,int nWhichBit)
  77. {
  78. CClientDC ClientDC(m_pWnd);
  79. int nI;
  80. for (nI=0;nI<7;nI++)
  81. {
  82. char nTmp = nDigitFont[nWhichDigit][nI];
  83. if(nTmp>0)
  84. {
  85. ClientDC.SelectObject(&Pen3);
  86. }
  87. else
  88. {
  89. ClientDC.SelectObject(&Pen4);
  90. nTmp = -nTmp;
  91. }
  92. ClientDC.SelectStockObject(NULL_BRUSH);
  93. int nStartPosX, nStartPosY, nJ;
  94. switch(nTmp)
  95. {
  96. case 1:
  97. nStartPosX = m_nX+(11+m_nSepMics)*nWhichBit+m_nSepMics;
  98. nStartPosY = m_nY+3;
  99. for (nJ=0;nJ<3;nJ++)
  100. {
  101. ClientDC.MoveTo(nStartPosX+nJ,nStartPosY+nJ);
  102. ClientDC.LineTo(nStartPosX+nJ,nStartPosY-nJ+9);
  103. }
  104. break;
  105. case 2:
  106. nStartPosX = m_nX+(11+m_nSepMics)*nWhichBit+m_nSepMics+1;
  107. for (nJ=0;nJ<3;nJ++)
  108. {
  109. ClientDC.MoveTo(nStartPosX+nJ,m_nY+nJ+2);
  110. ClientDC.LineTo(nStartPosX-nJ+9,m_nY+nJ+2);
  111. }
  112. break;
  113. case 3:
  114. nStartPosX = m_nX+(11+m_nSepMics)*nWhichBit+m_nSepMics+10;
  115. for (nJ=0;nJ<3;nJ++)
  116. {
  117. ClientDC.MoveTo(nStartPosX-nJ,m_nY+nJ+3);
  118. ClientDC.LineTo(nStartPosX-nJ,m_nY-nJ+9+3);
  119. }
  120. break;
  121. case 4:
  122. nStartPosX = m_nX+(11+m_nSepMics)*nWhichBit+10+m_nSepMics;
  123. nStartPosY = m_nY+13;
  124. for (nJ=0;nJ<3;nJ++)
  125. {
  126. ClientDC.MoveTo(nStartPosX-nJ,nStartPosY+nJ);
  127. ClientDC.LineTo(nStartPosX-nJ,nStartPosY-nJ+9);
  128. }
  129. break;
  130. case 5:
  131. nStartPosX = m_nX+(11+m_nSepMics)*nWhichBit+m_nSepMics+1;
  132. nStartPosY = m_nY+22;
  133. for (nJ=0;nJ<3;nJ++)
  134. {
  135. ClientDC.MoveTo(nStartPosX+nJ,nStartPosY-nJ);
  136. ClientDC.LineTo(nStartPosX-nJ+9,nStartPosY-nJ);
  137. }
  138. break;
  139. case 6:
  140. nStartPosX = m_nX+(11+m_nSepMics)*nWhichBit+m_nSepMics;
  141. nStartPosY = m_nY+13;
  142. for (nJ=0;nJ<3;nJ++)
  143. {
  144. ClientDC.MoveTo(nStartPosX+nJ,nStartPosY+nJ);
  145. ClientDC.LineTo(nStartPosX+nJ,nStartPosY-nJ+9);
  146. }
  147. break;
  148. case 7:
  149. nStartPosX = m_nX+(11+m_nSepMics)*nWhichBit+m_nSepMics+1;
  150. nStartPosY = m_nY+12;
  151. ClientDC.MoveTo(nStartPosX,nStartPosY);
  152. ClientDC.LineTo(nStartPosX+9,nStartPosY);
  153. ClientDC.MoveTo(nStartPosX+1,nStartPosY+1);
  154. ClientDC.LineTo(nStartPosX+8,nStartPosY+1);
  155. ClientDC.MoveTo(nStartPosX+1,nStartPosY-1);
  156. ClientDC.LineTo(nStartPosX+8,nStartPosY-1);
  157. break;
  158. }
  159. }
  160. }
  161. void CDigitalPlayer::ShowDigit()
  162. {
  163. int nI,nJ;
  164. char cTmp[20];
  165. if(m_nCalculator<0)
  166. {
  167. nJ=1;
  168. ShowOneDigit(10,0);
  169. sprintf(cTmp,"%d",-m_nCalculator);
  170. }
  171. else
  172. {
  173. nJ=0;
  174. sprintf(cTmp,"%d",m_nCalculator);
  175. }
  176. int nLen=strlen(cTmp);
  177. for (nI=0;nJ<m_nMaxNumber;nJ++)
  178. {
  179. if(nJ>=m_nMaxNumber-nLen)
  180. {
  181. ShowOneDigit(cTmp[nI]-'0',nJ);
  182. nI++;
  183. }
  184. else
  185. ShowOneDigit(0,nJ);
  186. }
  187. }