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

其他游戏

开发平台:

Visual C++

  1. // MoveList.cpp: implementation of the CMoveList class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "chess.h"
  6. #include "MoveList.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. CMoveList::CMoveList()
  17. {
  18. now=NULL;
  19. head=NULL;
  20. end=NULL;
  21. count =0;
  22. }
  23. CMoveList::~CMoveList()
  24. {
  25. now=head;
  26. while (now!=NULL)
  27. {
  28. now=now->next;
  29. delete head;
  30. head=now;
  31. }
  32. }
  33. void CMoveList::EnumMove(CFace &face)
  34. {
  35. static CXY man;
  36. static int n,i,j,nb,nk;
  37. FixManMap(face,m_Map);
  38. if(end!=head)DelAll();
  39.  nb=face.side*16;
  40.  nk=face.side*16+15;
  41. for (n=nb;n<=nk;n++)
  42. {
  43. man=face.man[n];
  44. switch(n)
  45. {
  46. case 0:
  47. if(!man.x)break;
  48. if(CanGo(m_Map,0,man.x,man.y,man.x,face.man[16].y)) Add(0,man.x,face.man[16].y);
  49. if(CanGo(m_Map,0,man.x,man.y,man.x+1,man.y)) Add(0,man.x+1,man.y);
  50. if(CanGo(m_Map,0,man.x,man.y,man.x-1,man.y)) Add(0,man.x-1,man.y);
  51. if(CanGo(m_Map,0,man.x,man.y,man.x,man.y+1)) Add(0,man.x,man.y+1);
  52. if(CanGo(m_Map,0,man.x,man.y,man.x,man.y-1)) Add(0,man.x,man.y-1);
  53. break;
  54. case 16:
  55. if(!man.x)break;
  56. if(CanGo(m_Map,16,man.x,man.y,man.x,face.man[0].y)) Add(n,man.x,face.man[0].y);
  57. if(CanGo(m_Map,16,man.x,man.y,man.x+1,man.y)) Add(16,man.x+1,man.y);
  58. if(CanGo(m_Map,16,man.x,man.y,man.x-1,man.y)) Add(16,man.x-1,man.y);
  59. if(CanGo(m_Map,16,man.x,man.y,man.x,man.y+1)) Add(16,man.x,man.y+1);
  60. if(CanGo(m_Map,16,man.x,man.y,man.x,man.y-1)) Add(16,man.x,man.y-1);
  61. break;
  62. case 1:
  63. case 2:
  64. case 17:
  65. case 18:
  66. if(!man.x)break;
  67. if(CanGo(m_Map,n,man.x,man.y,man.x-1,man.y-1)) Add(n,man.x-1,man.y-1);
  68. if(CanGo(m_Map,n,man.x,man.y,man.x+1,man.y+1)) Add(n,man.x+1,man.y+1);
  69. if(CanGo(m_Map,n,man.x,man.y,man.x+1,man.y-1)) Add(n,man.x+1,man.y-1);
  70. if(CanGo(m_Map,n,man.x,man.y,man.x-1,man.y+1)) Add(n,man.x-1,man.y+1);
  71. break;
  72. case 3:
  73. case 4:
  74. case 19:
  75. case 20:
  76. if(!man.x)break;
  77. if(CanGo(m_Map,n,man.x,man.y,man.x-2,man.y-2)) Add(n,man.x-2,man.y-2);
  78. if(CanGo(m_Map,n,man.x,man.y,man.x+2,man.y+2)) Add(n,man.x+2,man.y+2);
  79. if(CanGo(m_Map,n,man.x,man.y,man.x+2,man.y-2)) Add(n,man.x+2,man.y-2);
  80. if(CanGo(m_Map,n,man.x,man.y,man.x-2,man.y+2)) Add(n,man.x-2,man.y+2);
  81. break;
  82. case 5:
  83. case 6:
  84. case 21:
  85. case 22:
  86. if(!man.x)break;
  87. if(CanGo(m_Map,n,man.x,man.y,man.x-2,man.y-1)) Add(n,man.x-2,man.y-1);
  88. if(CanGo(m_Map,n,man.x,man.y,man.x+2,man.y+1)) Add(n,man.x+2,man.y+1);
  89. if(CanGo(m_Map,n,man.x,man.y,man.x+2,man.y-1)) Add(n,man.x+2,man.y-1);
  90. if(CanGo(m_Map,n,man.x,man.y,man.x-2,man.y+1)) Add(n,man.x-2,man.y+1);
  91. if(CanGo(m_Map,n,man.x,man.y,man.x-1,man.y-2)) Add(n,man.x-1,man.y-2);
  92. if(CanGo(m_Map,n,man.x,man.y,man.x+1,man.y+2)) Add(n,man.x+1,man.y+2);
  93. if(CanGo(m_Map,n,man.x,man.y,man.x+1,man.y-2)) Add(n,man.x+1,man.y-2);
  94. if(CanGo(m_Map,n,man.x,man.y,man.x-1,man.y+2)) Add(n,man.x-1,man.y+2);
  95. break;
  96. case 7:
  97. case 8:
  98. case 9:
  99. case 10:
  100. case 23:
  101. case 24:
  102. case 25:
  103. case 26:
  104. if(!man.x)break;
  105. for(i=1;i<=9;i++) if(CanGo(m_Map,n,man.x,man.y,i,man.y)) Add(n,i,man.y);
  106. for(j=1;j<=10;j++) if(CanGo(m_Map,n,man.x,man.y,man.x,j)) Add(n,man.x,j);
  107. break;
  108. case 27:
  109. case 28:
  110. case 29:
  111. case 30:
  112. case 31:
  113. if(!man.x)break;
  114. if(man.y>5)
  115. {
  116. if(CanGo(m_Map,n,man.x,man.y,man.x+1,man.y)) Add(n,man.x+1,man.y);
  117. if(CanGo(m_Map,n,man.x,man.y,man.x-1,man.y)) Add(n,man.x-1,man.y);
  118. }
  119. if(CanGo(m_Map,n,man.x,man.y,man.x,man.y+1)) Add(n,man.x,man.y+1);
  120. break;
  121. case 11:
  122. case 12:
  123. case 13:
  124. case 14:
  125. case 15:
  126. if(!man.x)break;
  127. if(man.y<6)
  128. {
  129. if(CanGo(m_Map,n,man.x,man.y,man.x+1,man.y)) Add(n,man.x+1,man.y);
  130. if(CanGo(m_Map,n,man.x,man.y,man.x-1,man.y)) Add(n,man.x-1,man.y);
  131. }
  132. if(CanGo(m_Map,n,man.x,man.y,man.x,man.y-1)) Add(n,man.x,man.y-1);
  133. break;
  134. }
  135. }
  136. }
  137. void CMoveList::Add(int man, int x, int y)
  138. {
  139. count ++;
  140. MOVENODE * p=new MOVENODE;
  141. p->move.man=man;
  142. p->move.x=x;
  143. p->move.y=y;
  144. if(end)
  145. {
  146. end->next=p;
  147. end=p;
  148. }
  149. else 
  150. {
  151. end=p;
  152. head=p;
  153. now=p;
  154. }
  155. end->next=NULL;
  156. }
  157. void CMoveList::DelAll()
  158. {
  159. now=head;
  160. while (now!=NULL)
  161. {
  162. head=now;
  163. now=now->next;
  164. delete head;
  165. }
  166. head=NULL;
  167. now=NULL;
  168. end=NULL;
  169. count =0;
  170. }