BaseClasses.cpp
上传用户:onward9999
上传日期:2022-06-27
资源大小:989k
文件大小:6k
源码类别:

其他游戏

开发平台:

Visual C++

  1. // BaseClasses.cpp: implementation of the CFace class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "chess.h"
  6. #include "BaseClasses.h"
  7. #include "BaseDef.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. CFace::CFace()
  17. {
  18. Reset();
  19. }
  20. CFace::CFace(CFace& face)
  21. {
  22. for(int i=0;i<32;i++)man[i]=face.man[i];
  23. side=face.side;
  24. }
  25. BOOL CFace::operator==(CFace& face)const
  26. {
  27. for(int i=0;i<32;i++)
  28. if(man[i]!=face.man[i])return FALSE;
  29. if (side!=face.side)return FALSE;
  30. return TRUE;
  31. }
  32. BOOL CFace::operator!=(CFace& face)const
  33. {
  34. for(int i=0;i<32;i++)
  35. if(man[i]!=face.man[i])return TRUE;
  36. if (side!=face.side)return TRUE;
  37. return FALSE;
  38. }
  39. CFace& CFace::operator=(CFace& face)
  40. {
  41. for(int i=0;i<32;i++)man[i]=face.man[i];
  42. side=face.side;
  43. return *this;
  44. }
  45. void CFace::Reset()
  46. {
  47. //红
  48. man[0].x=5;man[0].y=10; //帅
  49. man[1].x=4;man[1].y=10; //士
  50. man[2].x=6;man[2].y=10;
  51. man[3].x=3;man[3].y=10; //相
  52. man[4].x=7;man[4].y=10;
  53. man[5].x=2;man[5].y=10; //马
  54. man[6].x=8;man[6].y=10;
  55. man[7].x=1;man[7].y=10; //车
  56. man[8].x=9;man[8].y=10;
  57. man[9].x=2;man[9].y=8; //炮
  58. man[10].x=8;man[10].y=8;
  59. man[11].x=1;man[11].y=7;//兵
  60. man[12].x=3;man[12].y=7;
  61. man[13].x=5;man[13].y=7;
  62. man[14].x=7;man[14].y=7;
  63. man[15].x=9;man[15].y=7;
  64. //黑
  65. man[16].x=5;man[16].y=1;//将
  66. man[17].x=4;man[17].y=1;//士
  67. man[18].x=6;man[18].y=1;
  68. man[19].x=3;man[19].y=1;//相
  69. man[20].x=7;man[20].y=1;
  70. man[21].x=2;man[21].y=1;//马
  71. man[22].x=8;man[22].y=1;
  72. man[23].x=1;man[23].y=1;//车
  73. man[24].x=9;man[24].y=1;
  74. man[25].x=2;man[25].y=3;//炮
  75. man[26].x=8;man[26].y=3;
  76. man[27].x=1;man[27].y=4;//卒
  77. man[28].x=3;man[28].y=4;
  78. man[29].x=5;man[29].y=4;
  79. man[30].x=7;man[30].y=4;
  80. man[31].x=9;man[31].y=4;
  81. side=RED;
  82. }
  83. BOOL CFace::IsNormal()
  84. {
  85. if(side!=RED && side !=BLACK)return FALSE;
  86. int map[10][11];//map数组用来判断是否有两个没死的棋子放在同一点
  87. for(int i=1;i<10;i++)
  88. for(int j=1;j<11;j++)map[i][j]=0; //初始化
  89. for(i=0;i<32;i++)
  90. {
  91. if(man[i].x!=0) //没死
  92. {
  93. if ( 
  94. man[i].x<1 ||
  95. man[i].x>9 ||
  96. man[i].y<1 ||
  97. man[i].y>10
  98. ) return FALSE; //不在棋盘内
  99. if(map[man[i].x][man[i].y]!=0) //这一点已有子
  100. return FALSE;
  101. map[man[i].x][man[i].y]=1; //记者一点已有棋子
  102. //棋子放的位置不对:
  103. if( !::IsNormal(ManToType[i],man[i].x,man[i].y) )return FALSE;
  104. }
  105. }
  106. return TRUE;
  107. }
  108. BOOL CFace::Save(LPCSTR filename)
  109. {
  110. CFile file;
  111. if(file.Open(filename,CFile::modeWrite|CFile::modeCreate))
  112. {
  113. file.SeekToBegin();
  114. file.Write(this,sizeof(CFace));
  115. file.Close();
  116. return TRUE;
  117. }
  118. else return FALSE;
  119. }
  120. BOOL CFace::Open(LPCSTR filename)
  121. {
  122. CFile file;
  123. if(file.Open( filename,CFile::modeRead))
  124. {
  125. file.SeekToBegin();
  126. file.Read(this,sizeof(CFace));
  127. file.Close();
  128. return TRUE;
  129. }
  130. return FALSE;
  131. }
  132. //////////////////////////////////////////////////////////////////////
  133. // CMove Class
  134. //////////////////////////////////////////////////////////////////////
  135. //////////////////////////////////////////////////////////////////////
  136. // Construction/Destruction
  137. //////////////////////////////////////////////////////////////////////
  138. CMove::CMove()
  139. {
  140. man=0;
  141. x=0;
  142. y=0;
  143. }
  144. CMove::CMove(CMove &move)
  145. {
  146. man=move.man;
  147. x=move.x;
  148. y=move.y;
  149. }
  150. CMove& CMove::operator =(CMove & move)
  151. {
  152. man=move.man;
  153. x=move.x;
  154. y=move.y;
  155. return *this;
  156. }
  157. //////////////////////////////////////////////////////////////////////
  158. // CStep Class
  159. //////////////////////////////////////////////////////////////////////
  160. //////////////////////////////////////////////////////////////////////
  161. // Construction/Destruction
  162. //////////////////////////////////////////////////////////////////////
  163. CStep::CStep()
  164. {
  165. man=32;
  166. eaten=32;
  167. from.x=0;
  168. from.y=0;
  169. to.x=0;
  170. to.y=0;
  171. }
  172. //////////////////////////////////////////////////////////////////////
  173. // CXY Class
  174. //////////////////////////////////////////////////////////////////////
  175. //////////////////////////////////////////////////////////////////////
  176. // Construction/Destruction
  177. //////////////////////////////////////////////////////////////////////
  178. CXY::CXY()
  179. {
  180. x=0;
  181. y=0;
  182. }
  183. CXY::CXY(int xx,int yy)
  184. {
  185. x=(BYTE)xx;
  186. y=(BYTE)yy;
  187. }
  188. CXY::CXY(CXY& xy)
  189. {
  190. x=xy.x;
  191. y=xy.y;
  192. }
  193. CXY& CXY::operator=(CXY& xy)
  194. {
  195. x=xy.x;
  196. y=xy.y;
  197. return *this;
  198. }
  199. BOOL CXY::operator==(CXY& xy)const
  200. {
  201. if(xy.x != x)return FALSE;
  202. if(xy.y != y)return FALSE;
  203. return TRUE;
  204. }
  205. BOOL CXY::operator!=(CXY& xy)const
  206. {
  207. if(xy.x != x)return TRUE;
  208. if(xy.y != y)return TRUE;
  209. return FALSE;
  210. }
  211. CSetting::CSetting()
  212. {
  213. Reset();
  214. }
  215. BOOL CSetting::Save()
  216. {
  217. CFile file;
  218. if(file.Open("Setting.set",CFile::modeWrite|CFile::modeCreate))
  219. {
  220. file.SeekToBegin();
  221. file.Write(this,sizeof(CSetting));
  222. file.Close();
  223. return TRUE;
  224. }
  225. else return FALSE;
  226. }
  227. BOOL CSetting::Load()
  228. {
  229. CFile file;
  230. if(file.Open( "Setting.set",CFile::modeRead))
  231. {
  232. file.SeekToBegin();
  233. file.Read(this,sizeof(CSetting));
  234. file.Close();
  235. if(IsNormal())return TRUE;
  236. else
  237. {
  238. Reset();
  239. Save();
  240. return FALSE;
  241. }
  242. }
  243. MessageBox(NULL, "没找到 Setting.set 文件nn这个文件并不是必需的,但它记录了你的设置内容,nn请不要删掉nn你现在可以通过菜单 "文件" -> "设置" 重新设定.","提醒",MB_OK|MB_ICONINFORMATION);
  244. Reset();
  245. Save();
  246. return FALSE;
  247. }
  248. void CSetting::Reset()
  249. {
  250. m_nMode=1;
  251. m_nLevel=3;
  252. m_nCOrM[0]=0;
  253. m_nCOrM[1]=1;
  254. m_nPlayer[0]=RED;
  255. m_nPlayer[1]=BLACK;
  256. }
  257. BOOL CSetting::IsNormal()
  258. {
  259. if(m_nCOrM[0]>1 || m_nCOrM[1]>1) return FALSE;
  260. if(m_nPlayer[0]>1 || m_nPlayer[1]>1)return FALSE;
  261. if(m_nPlayer[1] == m_nPlayer[0]) return FALSE;
  262. if(m_nLevel<1 || m_nLevel>4) return FALSE;
  263. if(m_nMode>2) return FALSE;
  264. return TRUE;
  265. }